test-release.sh: build projects and runtimes lists with semicolons

While doing a test-release.sh run on FreeBSD, I ran into a sed error due
to the introduction of the GNU extension '\s' in commit 500587e23dfd.

Scanning for blanks (spaces and tabs) could be done in a more portable
fashion using the [[:blank:]] character class. But it is easier to avoid
the original problem, which is that the projects and runtime lists have
to be separated by semicolons, and cannot start with a semicolon.

Instead, use the shell's alternate value parameter expansion mechanism,
which makes it easy to append items to lists with separators in between,
and without any leading separator. This also avoids having to run sed on
the end result.

In addition, build any selected runtimes in the second phase, otherwise
the third phase can fail to find several symbols in compiler-rt, if that
has been built. This is because the host's compiler-rt is not guaranteed
to have those symbols.

Reviewed By: tstellar

Differential Revision: https://reviews.llvm.org/D145884
This commit is contained in:
Dimitry Andric 2023-03-12 19:53:12 +01:00
parent b1bd52cd0d
commit 9b17f5ee0e

View File

@ -261,43 +261,43 @@ if [ -z "$NumJobs" ]; then
fi
# Projects list
projects="llvm clang"
projects="llvm;clang"
if [ $do_clang_tools = "yes" ]; then
projects="$projects clang-tools-extra"
projects="${projects:+$projects;}clang-tools-extra"
fi
runtimes=""
if [ $do_rt = "yes" ]; then
runtimes="$runtimes compiler-rt"
runtimes="${runtimes:+$runtimes;}compiler-rt"
fi
if [ $do_libs = "yes" ]; then
runtimes="$runtimes libcxx"
runtimes="${runtimes:+$runtimes;}libcxx"
if [ $do_libcxxabi = "yes" ]; then
runtimes="$runtimes libcxxabi"
runtimes="${runtimes:+$runtimes;}libcxxabi"
fi
if [ $do_libunwind = "yes" ]; then
runtimes="$runtimes libunwind"
runtimes="${runtimes:+$runtimes;}libunwind"
fi
fi
if [ $do_openmp = "yes" ]; then
projects="$projects openmp"
projects="${projects:+$projects;}openmp"
fi
if [ $do_bolt = "yes" ]; then
projects="$projects bolt"
projects="${projects:+$projects;}bolt"
fi
if [ $do_lld = "yes" ]; then
projects="$projects lld"
projects="${projects:+$projects;}lld"
fi
if [ $do_lldb = "yes" ]; then
projects="$projects lldb"
projects="${projects:+$projects;}lldb"
fi
if [ $do_polly = "yes" ]; then
projects="$projects polly"
projects="${projects:+$projects;}polly"
fi
if [ $do_mlir = "yes" ]; then
projects="$projects mlir"
projects="${projects:+$projects;}mlir"
fi
if [ $do_flang = "yes" ]; then
projects="$projects flang"
projects="${projects:+$projects;}flang"
fi
# Go to the build directory (may be different from CWD)
@ -404,17 +404,23 @@ function configure_llvmCore() {
;;
esac
if [ "$Phase" -eq "3" ]; then
project_list=${projects// /;}
# Leading spaces will result in ";<runtime name>". This causes a CMake
# error because the empty string before the first ';' is treated as an
# unknown runtime name.
runtimes=$(echo $runtimes | sed -e 's/^\s*//')
runtime_list=${runtimes// /;}
else
# During the first two phases, there is no need to build any of the projects
# except clang, since these phases are only meant to produce a bootstrapped
# clang compiler, capable of building the third phase.
if [ "$Phase" -lt "3" ]; then
project_list="clang"
runtime_list=""
else
project_list="$projects"
fi
# During the first phase, there is no need to build any of the runtimes,
# since this phase is only meant to get a clang compiler, capable of
# building itself and any selected runtimes in the second phase.
if [ "$Phase" -lt "2" ]; then
runtime_list=""
else
runtime_list="$runtimes"
fi
echo "# Using C compiler: $c_compiler"
echo "# Using C++ compiler: $cxx_compiler"