@@ -18,7 +18,6 @@ set -o pipefail
1818
1919MONOREPO_ROOT=" ${MONOREPO_ROOT:= " $( git rev-parse --show-toplevel) " } "
2020BUILD_DIR=" ${BUILD_DIR:= ${MONOREPO_ROOT} / build} "
21- INSTALL_DIR=" ${BUILD_DIR} /install"
2221rm -rf " ${BUILD_DIR} "
2322
2423ccache --zero-stats
@@ -28,11 +27,16 @@ if [[ -n "${CLEAR_CACHE:-}" ]]; then
2827 ccache --clear
2928fi
3029
30+ mkdir -p artifacts/reproducers
31+
32+ # Make sure any clang reproducers will end up as artifacts.
33+ export CLANG_CRASH_DIAGNOSTICS_DIR=` realpath artifacts/reproducers`
34+
3135function at-exit {
3236 retcode=$?
3337
34- mkdir -p artifacts
3538 ccache --print-stats > artifacts/ccache_stats.txt
39+ cp " ${BUILD_DIR} " /.ninja_log artifacts/.ninja_log
3640
3741 # If building fails there will be no results files.
3842 shopt -s nullglob
@@ -49,17 +53,28 @@ trap at-exit EXIT
4953
5054projects=" ${1} "
5155targets=" ${2} "
56+ runtimes=" ${3} "
5257
5358lit_args=" -v --xunit-xml-output ${BUILD_DIR} /test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests"
5459
5560echo " --- cmake"
61+
5662export PIP_BREAK_SYSTEM_PACKAGES=1
5763pip install -q -r " ${MONOREPO_ROOT} " /mlir/python/requirements.txt
5864pip install -q -r " ${MONOREPO_ROOT} " /lldb/test/requirements.txt
5965pip install -q -r " ${MONOREPO_ROOT} " /.ci/requirements.txt
66+
67+ # Set the system llvm-symbolizer as preferred.
68+ export LLVM_SYMBOLIZER_PATH=` which llvm-symbolizer`
69+ [[ ! -f " ${LLVM_SYMBOLIZER_PATH} " ]] && echo " llvm-symbolizer not found!"
70+
71+ # Set up all runtimes either way. libcxx is a dependency of LLDB.
72+ # If it ends up being unused, not much harm.
6073cmake -S " ${MONOREPO_ROOT} " /llvm -B " ${BUILD_DIR} " \
6174 -D LLVM_ENABLE_PROJECTS=" ${projects} " \
75+ -D LLVM_ENABLE_RUNTIMES=" libcxx;libcxxabi;libunwind" \
6276 -G Ninja \
77+ -D CMAKE_PREFIX_PATH=" ${HOME} /.local" \
6378 -D CMAKE_BUILD_TYPE=Release \
6479 -D LLVM_ENABLE_ASSERTIONS=ON \
6580 -D LLVM_BUILD_EXAMPLES=ON \
@@ -68,69 +83,47 @@ cmake -S "${MONOREPO_ROOT}"/llvm -B "${BUILD_DIR}" \
6883 -D LLVM_ENABLE_LLD=ON \
6984 -D CMAKE_CXX_FLAGS=-gmlt \
7085 -D LLVM_CCACHE_BUILD=ON \
86+ -D LIBCXX_CXX_ABI=libcxxabi \
7187 -D MLIR_ENABLE_BINDINGS_PYTHON=ON \
72- -D CMAKE_INSTALL_PREFIX=" ${INSTALL_DIR} "
88+ -D LLDB_ENABLE_PYTHON=ON \
89+ -D LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS=ON
7390
7491echo " --- ninja"
92+
7593# Targets are not escaped as they are passed as separate arguments.
7694ninja -C " ${BUILD_DIR} " -k 0 ${targets}
7795
78- runtimes=" ${3} "
7996runtime_targets=" ${4} "
8097
81- # Compiling runtimes with just-built Clang and running their tests
82- # as an additional testing for Clang.
98+ # Run runtimes tests.
99+ # We don't need to do a clean separate build of runtimes, because runtimes
100+ # will be built against just built clang, and because LIBCXX_TEST_PARAMS
101+ # and LIBCXXABI_TEST_PARAMS only affect lit configuration, which successfully
102+ # propagates without a clean build. Other that those two variables, builds
103+ # are supposed to be the same.
83104if [[ " ${runtimes} " != " " ]]; then
84105 if [[ " ${runtime_targets} " == " " ]]; then
85106 echo " Runtimes to build are specified, but targets are not."
86107 exit 1
87108 fi
88109
89- echo " --- ninja install-clang"
90-
91- ninja -C ${BUILD_DIR} install-clang install-clang-resource-headers
92-
93- RUNTIMES_BUILD_DIR=" ${MONOREPO_ROOT} /build-runtimes"
94- INSTALL_DIR=" ${BUILD_DIR} /install"
95- mkdir -p ${RUNTIMES_BUILD_DIR}
96-
97110 echo " --- cmake runtimes C++26"
98111
99- rm -rf " ${RUNTIMES_BUILD_DIR} "
100- cmake -S " ${MONOREPO_ROOT} /runtimes" -B " ${RUNTIMES_BUILD_DIR} " -GNinja \
101- -D CMAKE_C_COMPILER=" ${INSTALL_DIR} /bin/clang" \
102- -D CMAKE_CXX_COMPILER=" ${INSTALL_DIR} /bin/clang++" \
103- -D LLVM_ENABLE_RUNTIMES=" ${runtimes} " \
104- -D LIBCXX_CXX_ABI=libcxxabi \
105- -D CMAKE_BUILD_TYPE=RelWithDebInfo \
106- -D CMAKE_INSTALL_PREFIX=" ${INSTALL_DIR} " \
112+ cmake -S " ${MONOREPO_ROOT} " /llvm -B " ${BUILD_DIR} " \
107113 -D LIBCXX_TEST_PARAMS=" std=c++26" \
108- -D LIBCXXABI_TEST_PARAMS=" std=c++26" \
109- -D LLVM_LIT_ARGS=" ${lit_args} "
114+ -D LIBCXXABI_TEST_PARAMS=" std=c++26"
110115
111116 echo " --- ninja runtimes C++26"
112117
113- ninja -vC " ${RUNTIMES_BUILD_DIR } " ${runtime_targets}
118+ ninja -vC " ${BUILD_DIR } " ${runtime_targets}
114119
115120 echo " --- cmake runtimes clang modules"
116121
117- # We don't need to do a clean build of runtimes, because LIBCXX_TEST_PARAMS
118- # and LIBCXXABI_TEST_PARAMS only affect lit configuration, which successfully
119- # propagates without a clean build. Other that those two variables, builds
120- # are supposed to be the same.
121-
122- cmake -S " ${MONOREPO_ROOT} /runtimes" -B " ${RUNTIMES_BUILD_DIR} " -GNinja \
123- -D CMAKE_C_COMPILER=" ${INSTALL_DIR} /bin/clang" \
124- -D CMAKE_CXX_COMPILER=" ${INSTALL_DIR} /bin/clang++" \
125- -D LLVM_ENABLE_RUNTIMES=" ${runtimes} " \
126- -D LIBCXX_CXX_ABI=libcxxabi \
127- -D CMAKE_BUILD_TYPE=RelWithDebInfo \
128- -D CMAKE_INSTALL_PREFIX=" ${INSTALL_DIR} " \
122+ cmake -S " ${MONOREPO_ROOT} " /llvm -B " ${BUILD_DIR} " \
129123 -D LIBCXX_TEST_PARAMS=" enable_modules=clang" \
130- -D LIBCXXABI_TEST_PARAMS=" enable_modules=clang" \
131- -D LLVM_LIT_ARGS=" ${lit_args} "
124+ -D LIBCXXABI_TEST_PARAMS=" enable_modules=clang"
132125
133126 echo " --- ninja runtimes clang modules"
134127
135- ninja -vC " ${RUNTIMES_BUILD_DIR } " ${runtime_targets}
128+ ninja -vC " ${BUILD_DIR } " ${runtime_targets}
136129fi
0 commit comments