run-buildbot revision 1.1.1.1 1 1.1 joerg #!/usr/bin/env bash
2 1.1 joerg #===----------------------------------------------------------------------===##
3 1.1 joerg #
4 1.1 joerg # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 1.1 joerg # See https://llvm.org/LICENSE.txt for license information.
6 1.1 joerg # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 1.1 joerg #
8 1.1 joerg #===----------------------------------------------------------------------===##
9 1.1 joerg
10 1.1 joerg set -ex
11 1.1 joerg set -o pipefail
12 1.1 joerg unset LANG
13 1.1 joerg unset LC_ALL
14 1.1 joerg unset LC_COLLATE
15 1.1 joerg
16 1.1 joerg PROGNAME="$(basename "${0}")"
17 1.1 joerg
18 1.1 joerg function usage() {
19 1.1 joerg cat <<EOF
20 1.1 joerg Usage:
21 1.1 joerg ${PROGNAME} [options] <BUILDER>
22 1.1 joerg
23 1.1 joerg [-h|--help] Display this help and exit.
24 1.1 joerg
25 1.1 joerg --llvm-root <DIR> Path to the root of the LLVM monorepo. By default, we try
26 1.1 joerg to figure it out based on the current working directory.
27 1.1 joerg
28 1.1 joerg --build-dir <DIR> The directory to use for building the library. By default,
29 1.1 joerg this is '<llvm-root>/build/<builder>'.
30 1.1 joerg
31 1.1 joerg --osx-roots <DIR> Path to pre-downloaded macOS dylibs. By default, we download
32 1.1 joerg them from Green Dragon. This is only relevant at all when
33 1.1 joerg running back-deployment testing if one wants to override
34 1.1 joerg the old dylibs we use to run the tests with different ones.
35 1.1 joerg EOF
36 1.1 joerg }
37 1.1 joerg
38 1.1 joerg while [[ $# -gt 0 ]]; do
39 1.1 joerg case ${1} in
40 1.1 joerg -h|--help)
41 1.1 joerg usage
42 1.1 joerg exit 0
43 1.1 joerg ;;
44 1.1 joerg --llvm-root)
45 1.1 joerg MONOREPO_ROOT="${2}"
46 1.1 joerg shift; shift
47 1.1 joerg ;;
48 1.1 joerg --build-dir)
49 1.1 joerg BUILD_DIR="${2}"
50 1.1 joerg shift; shift
51 1.1 joerg ;;
52 1.1 joerg --osx-roots)
53 1.1 joerg OSX_ROOTS="${2}"
54 1.1 joerg shift; shift
55 1.1 joerg ;;
56 1.1 joerg *)
57 1.1 joerg BUILDER="${1}"
58 1.1 joerg shift
59 1.1 joerg ;;
60 1.1 joerg esac
61 1.1 joerg done
62 1.1 joerg
63 1.1 joerg MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
64 1.1 joerg BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
65 1.1 joerg INSTALL_DIR="${BUILD_DIR}/install"
66 1.1 joerg
67 1.1 joerg # If we can find Ninja/CMake provided by Xcode, use those since we know their
68 1.1 joerg # version will generally work with the Clang shipped in Xcode (e.g. if Clang
69 1.1 joerg # knows about -std=c++20, the CMake bundled in Xcode will probably know about
70 1.1 joerg # that flag too).
71 1.1 joerg if xcrun --find ninja &>/dev/null; then NINJA="$(xcrun --find ninja)"; else NINJA="ninja"; fi
72 1.1 joerg if xcrun --find cmake &>/dev/null; then CMAKE="$(xcrun --find cmake)"; else CMAKE="cmake"; fi
73 1.1 joerg
74 1.1 joerg function clean() {
75 1.1 joerg rm -rf "${BUILD_DIR}"
76 1.1 joerg }
77 1.1 joerg
78 1.1 joerg function generate-cmake-base() {
79 1.1 joerg echo "--- Generating CMake"
80 1.1 joerg ${CMAKE} \
81 1.1 joerg -B "${BUILD_DIR}" \
82 1.1 joerg -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
83 1.1 joerg -DCMAKE_BUILD_TYPE=RelWithDebInfo \
84 1.1 joerg -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
85 1.1 joerg -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
86 1.1 joerg "${@}"
87 1.1 joerg }
88 1.1 joerg
89 1.1 joerg function generate-cmake() {
90 1.1 joerg generate-cmake-base \
91 1.1 joerg -S "${MONOREPO_ROOT}/llvm" \
92 1.1 joerg -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
93 1.1 joerg -DLIBCXX_CXX_ABI=libcxxabi \
94 1.1 joerg "${@}"
95 1.1 joerg }
96 1.1 joerg
97 1.1 joerg function generate-cmake-libcxx-win() {
98 1.1 joerg # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
99 1.1 joerg # builtins helpers for int128 division. See
100 1.1 joerg # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
101 1.1 joerg # intent for handling the issue. In the meantime, define
102 1.1 joerg # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
103 1.1 joerg # when building tests) to allow enabling filesystem for running tests,
104 1.1 joerg # even if it uses a non-permanent ABI.
105 1.1 joerg
106 1.1 joerg generate-cmake-base \
107 1.1 joerg -S "${MONOREPO_ROOT}/libcxx" \
108 1.1 joerg -DCMAKE_C_COMPILER=clang-cl \
109 1.1 joerg -DCMAKE_CXX_COMPILER=clang-cl \
110 1.1 joerg -DLIBCXX_ENABLE_FILESYSTEM=YES \
111 1.1 joerg -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
112 1.1 joerg -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
113 1.1 joerg "${@}"
114 1.1 joerg }
115 1.1 joerg
116 1.1 joerg function check-cxx-cxxabi() {
117 1.1 joerg echo "--- Installing libc++ and libc++abi to a fake location"
118 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi
119 1.1 joerg
120 1.1 joerg echo "+++ Running the libc++ tests"
121 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxx
122 1.1 joerg
123 1.1 joerg echo "+++ Running the libc++abi tests"
124 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxxabi
125 1.1 joerg }
126 1.1 joerg
127 1.1 joerg # TODO: The goal is to test this against all configurations. We should also move
128 1.1 joerg # this to the Lit test suite instead of being a separate CMake target.
129 1.1 joerg function check-abi-list() {
130 1.1 joerg echo "+++ Running the libc++ ABI list test"
131 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxx-abilist || (
132 1.1 joerg echo "+++ Generating the libc++ ABI list after failed check"
133 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" generate-cxx-abilist
134 1.1 joerg false
135 1.1 joerg )
136 1.1 joerg }
137 1.1 joerg
138 1.1 joerg function check-cxx-benchmarks() {
139 1.1 joerg echo "--- Running the benchmarks"
140 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks
141 1.1 joerg }
142 1.1 joerg
143 1.1 joerg # Print the version of a few tools to aid diagnostics in some cases
144 1.1 joerg ${CMAKE} --version
145 1.1 joerg ${NINJA} --version
146 1.1 joerg
147 1.1 joerg case "${BUILDER}" in
148 1.1 joerg check-format)
149 1.1 joerg clean
150 1.1 joerg echo "+++ Checking formatting"
151 1.1 joerg # We need to set --extensions so that clang-format checks extensionless files.
152 1.1 joerg mkdir -p ${BUILD_DIR}
153 1.1 joerg git-clang-format \
154 1.1 joerg --binary /usr/bin/clang-format --diff \
155 1.1 joerg --extensions ',h,hh,hpp,hxx,c,cc,cxx,cpp' HEAD~1 \
156 1.1 joerg -- \
157 1.1 joerg libcxx/{benchmarks,include,src,test} \
158 1.1 joerg libcxxabi/{fuzz,include,src,test} \
159 1.1 joerg | tee ${BUILD_DIR}/clang-format.patch
160 1.1 joerg # Check if the diff is empty, fail otherwise.
161 1.1 joerg ! grep -q '^--- a' ${BUILD_DIR}/clang-format.patch
162 1.1 joerg ;;
163 1.1 joerg check-generated-output)
164 1.1 joerg # `! foo` doesn't work properly with `set -e`, use `! foo || false` instead.
165 1.1 joerg # https://stackoverflow.com/questions/57681955/set-e-does-not-respect-logical-not
166 1.1 joerg clean
167 1.1 joerg echo "+++ Checking the output of the generator scripts"
168 1.1 joerg mkdir -p ${BUILD_DIR}
169 1.1 joerg # Reject patches that don't update the generated output correctly.
170 1.1 joerg python3 libcxx/utils/generate_feature_test_macro_components.py
171 1.1 joerg python3 libcxx/utils/generate_header_inclusion_tests.py
172 1.1 joerg python3 libcxx/utils/generate_header_tests.py
173 1.1 joerg git diff | tee ${BUILD_DIR}/generated_output.patch
174 1.1 joerg # Check if the diffs are empty, fail otherwise.
175 1.1 joerg ! grep -q '^--- a' ${BUILD_DIR}/generated_output.patch || false
176 1.1 joerg # Reject patches that introduce non-ASCII characters or hard tabs.
177 1.1 joerg # Depends on LC_COLLATE set at the top of this script.
178 1.1 joerg ! grep -rn '[^ -~]' libcxx/include/ || false
179 1.1 joerg # Check that no dependency cycles have been introduced.
180 1.1 joerg python3 libcxx/utils/graph_header_deps.py >/dev/null
181 1.1 joerg ;;
182 1.1 joerg generic-cxx03)
183 1.1 joerg export CC=clang
184 1.1 joerg export CXX=clang++
185 1.1 joerg clean
186 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake" \
187 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
188 1.1 joerg check-cxx-cxxabi
189 1.1 joerg check-abi-list
190 1.1 joerg ;;
191 1.1 joerg generic-cxx11)
192 1.1 joerg export CC=clang
193 1.1 joerg export CXX=clang++
194 1.1 joerg clean
195 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake" \
196 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
197 1.1 joerg check-cxx-cxxabi
198 1.1 joerg check-abi-list
199 1.1 joerg ;;
200 1.1 joerg generic-cxx14)
201 1.1 joerg export CC=clang
202 1.1 joerg export CXX=clang++
203 1.1 joerg clean
204 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx14.cmake" \
205 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
206 1.1 joerg check-cxx-cxxabi
207 1.1 joerg check-abi-list
208 1.1 joerg ;;
209 1.1 joerg generic-cxx17)
210 1.1 joerg export CC=clang
211 1.1 joerg export CXX=clang++
212 1.1 joerg clean
213 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx17.cmake" \
214 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
215 1.1 joerg check-cxx-cxxabi
216 1.1 joerg check-abi-list
217 1.1 joerg ;;
218 1.1 joerg generic-cxx20)
219 1.1 joerg export CC=clang
220 1.1 joerg export CXX=clang++
221 1.1 joerg clean
222 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx20.cmake" \
223 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
224 1.1 joerg check-cxx-cxxabi
225 1.1 joerg check-abi-list
226 1.1 joerg ;;
227 1.1 joerg generic-cxx2b)
228 1.1 joerg export CC=clang-tot
229 1.1 joerg export CXX=clang++-tot
230 1.1 joerg clean
231 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx2b.cmake" \
232 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
233 1.1 joerg check-cxx-cxxabi
234 1.1 joerg check-abi-list
235 1.1 joerg ;;
236 1.1 joerg generic-debug-iterators)
237 1.1 joerg export CC=clang-tot
238 1.1 joerg export CXX=clang++-tot
239 1.1 joerg clean
240 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-debug-iterators.cmake"
241 1.1 joerg check-cxx-cxxabi
242 1.1 joerg check-abi-list
243 1.1 joerg ;;
244 1.1 joerg generic-noexceptions)
245 1.1 joerg export CC=clang
246 1.1 joerg export CXX=clang++
247 1.1 joerg clean
248 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-noexceptions.cmake"
249 1.1 joerg check-cxx-cxxabi
250 1.1 joerg ;;
251 1.1 joerg generic-static)
252 1.1 joerg export CC=clang
253 1.1 joerg export CXX=clang++
254 1.1 joerg clean
255 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-static.cmake" \
256 1.1 joerg -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-static.cfg.in"
257 1.1 joerg check-cxx-cxxabi
258 1.1 joerg ;;
259 1.1 joerg generic-32bit)
260 1.1 joerg export CC=clang
261 1.1 joerg export CXX=clang++
262 1.1 joerg clean
263 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-32bits.cmake"
264 1.1 joerg check-cxx-cxxabi
265 1.1 joerg ;;
266 1.1 joerg generic-gcc)
267 1.1 joerg export CC=gcc
268 1.1 joerg export CXX=g++
269 1.1 joerg clean
270 1.1 joerg generate-cmake
271 1.1 joerg check-cxx-cxxabi
272 1.1 joerg ;;
273 1.1 joerg generic-asan)
274 1.1 joerg export CC=clang
275 1.1 joerg export CXX=clang++
276 1.1 joerg clean
277 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-asan.cmake"
278 1.1 joerg check-cxx-cxxabi
279 1.1 joerg ;;
280 1.1 joerg generic-msan)
281 1.1 joerg export CC=clang
282 1.1 joerg export CXX=clang++
283 1.1 joerg clean
284 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-msan.cmake"
285 1.1 joerg check-cxx-cxxabi
286 1.1 joerg ;;
287 1.1 joerg generic-tsan)
288 1.1 joerg export CC=clang
289 1.1 joerg export CXX=clang++
290 1.1 joerg clean
291 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-tsan.cmake"
292 1.1 joerg check-cxx-cxxabi
293 1.1 joerg ;;
294 1.1 joerg generic-ubsan)
295 1.1 joerg export CC=clang
296 1.1 joerg export CXX=clang++
297 1.1 joerg clean
298 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-ubsan.cmake"
299 1.1 joerg check-cxx-cxxabi
300 1.1 joerg ;;
301 1.1 joerg generic-with_llvm_unwinder)
302 1.1 joerg export CC=clang
303 1.1 joerg export CXX=clang++
304 1.1 joerg clean
305 1.1 joerg generate-cmake -DLIBCXXABI_USE_LLVM_UNWINDER=ON
306 1.1 joerg check-cxx-cxxabi
307 1.1 joerg ;;
308 1.1 joerg generic-singlethreaded)
309 1.1 joerg export CC=clang
310 1.1 joerg export CXX=clang++
311 1.1 joerg clean
312 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-singlethreaded.cmake"
313 1.1 joerg check-cxx-cxxabi
314 1.1 joerg ;;
315 1.1 joerg generic-no-debug)
316 1.1 joerg export CC=clang
317 1.1 joerg export CXX=clang++
318 1.1 joerg clean
319 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-debug.cmake"
320 1.1 joerg check-cxx-cxxabi
321 1.1 joerg ;;
322 1.1 joerg generic-no-filesystem)
323 1.1 joerg export CC=clang
324 1.1 joerg export CXX=clang++
325 1.1 joerg clean
326 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-filesystem.cmake"
327 1.1 joerg check-cxx-cxxabi
328 1.1 joerg ;;
329 1.1 joerg generic-no-random_device)
330 1.1 joerg export CC=clang
331 1.1 joerg export CXX=clang++
332 1.1 joerg clean
333 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake"
334 1.1 joerg check-cxx-cxxabi
335 1.1 joerg ;;
336 1.1 joerg generic-no-localization)
337 1.1 joerg export CC=clang
338 1.1 joerg export CXX=clang++
339 1.1 joerg clean
340 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake"
341 1.1 joerg check-cxx-cxxabi
342 1.1 joerg ;;
343 1.1 joerg x86_64-apple-system)
344 1.1 joerg export CC=clang
345 1.1 joerg export CXX=clang++
346 1.1 joerg clean
347 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake"
348 1.1 joerg check-cxx-cxxabi
349 1.1 joerg ;;
350 1.1 joerg x86_64-apple-system-noexceptions)
351 1.1 joerg export CC=clang
352 1.1 joerg export CXX=clang++
353 1.1 joerg clean
354 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
355 1.1 joerg -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
356 1.1 joerg -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
357 1.1 joerg check-cxx-cxxabi
358 1.1 joerg ;;
359 1.1 joerg x86_64-apple-system-backdeployment-*)
360 1.1 joerg clean
361 1.1 joerg
362 1.1 joerg if [[ "${OSX_ROOTS}" == "" ]]; then
363 1.1 joerg echo "--- Downloading previous macOS dylibs"
364 1.1 joerg PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/liu4fmc53qzlfly/libcxx-roots.tar.gz"
365 1.1 joerg OSX_ROOTS="${BUILD_DIR}/macos-roots"
366 1.1 joerg mkdir -p "${OSX_ROOTS}"
367 1.1 joerg curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
368 1.1 joerg fi
369 1.1 joerg
370 1.1 joerg DEPLOYMENT_TARGET="${BUILDER#x86_64-apple-system-backdeployment-}"
371 1.1 joerg
372 1.1 joerg # TODO: On Apple platforms, we never produce libc++abi.1.dylib, always libc++abi.dylib.
373 1.1 joerg # Fix that in the build so that the tests stop searching for @rpath/libc++abi.1.dylib.
374 1.1 joerg cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
375 1.1 joerg "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
376 1.1 joerg
377 1.1 joerg PARAMS="target_triple=x86_64-apple-macosx${DEPLOYMENT_TARGET}"
378 1.1 joerg PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
379 1.1 joerg PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
380 1.1 joerg PARAMS+=";use_system_cxx_lib=True"
381 1.1 joerg
382 1.1 joerg export CC=clang
383 1.1 joerg export CXX=clang++
384 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
385 1.1 joerg -DLIBCXX_TEST_PARAMS="${PARAMS}" \
386 1.1 joerg -DLIBCXXABI_TEST_PARAMS="${PARAMS}"
387 1.1 joerg
388 1.1 joerg check-cxx-cxxabi
389 1.1 joerg ;;
390 1.1 joerg benchmarks)
391 1.1 joerg export CC=clang
392 1.1 joerg export CXX=clang++
393 1.1 joerg clean
394 1.1 joerg generate-cmake
395 1.1 joerg check-cxx-benchmarks
396 1.1 joerg ;;
397 1.1 joerg documentation)
398 1.1 joerg export CC=clang
399 1.1 joerg export CXX=clang++
400 1.1 joerg clean
401 1.1 joerg generate-cmake -DLLVM_ENABLE_SPHINX=ON
402 1.1 joerg
403 1.1 joerg echo "+++ Generating documentation"
404 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" docs-libcxx-html
405 1.1 joerg ;;
406 1.1 joerg unified-standalone)
407 1.1 joerg export CC=clang
408 1.1 joerg export CXX=clang++
409 1.1 joerg
410 1.1 joerg clean
411 1.1 joerg
412 1.1 joerg echo "--- Generating CMake"
413 1.1 joerg ${CMAKE} \
414 1.1 joerg -S "${MONOREPO_ROOT}/libcxx/utils/ci/runtimes" \
415 1.1 joerg -B "${BUILD_DIR}" \
416 1.1 joerg -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
417 1.1 joerg -DCMAKE_BUILD_TYPE=RelWithDebInfo \
418 1.1 joerg -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
419 1.1 joerg -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind"
420 1.1 joerg
421 1.1 joerg check-cxx-cxxabi
422 1.1 joerg ;;
423 1.1 joerg runtimes-build)
424 1.1 joerg export CC=clang
425 1.1 joerg export CXX=clang++
426 1.1 joerg
427 1.1 joerg clean
428 1.1 joerg
429 1.1 joerg echo "--- Generating CMake"
430 1.1 joerg ${CMAKE} \
431 1.1 joerg -S "${MONOREPO_ROOT}/llvm" \
432 1.1 joerg -B "${BUILD_DIR}" \
433 1.1 joerg -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
434 1.1 joerg -DCMAKE_BUILD_TYPE=RelWithDebInfo \
435 1.1 joerg -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
436 1.1 joerg -DLLVM_ENABLE_PROJECTS="clang" \
437 1.1 joerg -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
438 1.1 joerg -DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu"
439 1.1 joerg
440 1.1 joerg echo "+++ Running the libc++ and libc++abi tests"
441 1.1 joerg ${NINJA} -C "${BUILD_DIR}" check-runtimes
442 1.1 joerg
443 1.1 joerg echo "--- Installing libc++ and libc++abi to a fake location"
444 1.1 joerg ${NINJA} -C "${BUILD_DIR}" install-cxx install-cxxabi
445 1.1 joerg ;;
446 1.1 joerg legacy-test-config)
447 1.1 joerg export CC=clang
448 1.1 joerg export CXX=clang++
449 1.1 joerg clean
450 1.1 joerg generate-cmake -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/legacy.cfg.in"
451 1.1 joerg check-cxx-cxxabi
452 1.1 joerg ;;
453 1.1 joerg legacy-standalone)
454 1.1 joerg export CC=clang
455 1.1 joerg export CXX=clang++
456 1.1 joerg
457 1.1 joerg clean
458 1.1 joerg
459 1.1 joerg echo "--- Generating CMake"
460 1.1 joerg ${CMAKE} \
461 1.1 joerg -S "${MONOREPO_ROOT}/libcxx" \
462 1.1 joerg -B "${BUILD_DIR}/libcxx" \
463 1.1 joerg -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
464 1.1 joerg -DCMAKE_BUILD_TYPE=RelWithDebInfo \
465 1.1 joerg -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
466 1.1 joerg -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
467 1.1 joerg -DLIBCXX_CXX_ABI=libcxxabi \
468 1.1 joerg -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${MONOREPO_ROOT}/libcxxabi/include" \
469 1.1 joerg -DLIBCXX_CXX_ABI_LIBRARY_PATH="${BUILD_DIR}/libcxxabi/lib"
470 1.1 joerg
471 1.1 joerg ${CMAKE} \
472 1.1 joerg -S "${MONOREPO_ROOT}/libcxxabi" \
473 1.1 joerg -B "${BUILD_DIR}/libcxxabi" \
474 1.1 joerg -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
475 1.1 joerg -DCMAKE_BUILD_TYPE=RelWithDebInfo \
476 1.1 joerg -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
477 1.1 joerg -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
478 1.1 joerg -DLIBCXXABI_LIBCXX_PATH="${MONOREPO_ROOT}/libcxx" \
479 1.1 joerg -DLIBCXXABI_LIBCXX_INCLUDES="${BUILD_DIR}/libcxx/include/c++/v1" \
480 1.1 joerg -DLIBCXXABI_LIBCXX_LIBRARY_PATH="${BUILD_DIR}/libcxx/lib"
481 1.1 joerg
482 1.1 joerg echo "+++ Generating libc++ headers"
483 1.1 joerg ${NINJA} -vC "${BUILD_DIR}/libcxx" generate-cxx-headers
484 1.1 joerg
485 1.1 joerg echo "+++ Building libc++abi"
486 1.1 joerg ${NINJA} -vC "${BUILD_DIR}/libcxxabi" cxxabi
487 1.1 joerg
488 1.1 joerg echo "+++ Building libc++"
489 1.1 joerg ${NINJA} -vC "${BUILD_DIR}/libcxx" cxx
490 1.1 joerg
491 1.1 joerg echo "+++ Running the libc++ tests"
492 1.1 joerg ${NINJA} -vC "${BUILD_DIR}/libcxx" check-cxx
493 1.1 joerg
494 1.1 joerg echo "+++ Running the libc++abi tests"
495 1.1 joerg ${NINJA} -vC "${BUILD_DIR}/libcxxabi" check-cxxabi
496 1.1 joerg ;;
497 1.1 joerg aarch64)
498 1.1 joerg clean
499 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake"
500 1.1 joerg check-cxx-cxxabi
501 1.1 joerg ;;
502 1.1 joerg aarch64-noexceptions)
503 1.1 joerg clean
504 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake" \
505 1.1 joerg -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
506 1.1 joerg -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
507 1.1 joerg check-cxx-cxxabi
508 1.1 joerg ;;
509 1.1 joerg # Aka Armv8 32 bit
510 1.1 joerg armv8)
511 1.1 joerg clean
512 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Arm.cmake"
513 1.1 joerg check-cxx-cxxabi
514 1.1 joerg ;;
515 1.1 joerg armv8-noexceptions)
516 1.1 joerg clean
517 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Thumb-noexceptions.cmake"
518 1.1 joerg check-cxx-cxxabi
519 1.1 joerg ;;
520 1.1 joerg # Armv7 32 bit. One building Arm only one Thumb only code.
521 1.1 joerg armv7)
522 1.1 joerg clean
523 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Arm.cmake"
524 1.1 joerg check-cxx-cxxabi
525 1.1 joerg ;;
526 1.1 joerg armv7-noexceptions)
527 1.1 joerg clean
528 1.1 joerg generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
529 1.1 joerg check-cxx-cxxabi
530 1.1 joerg ;;
531 1.1 joerg windows-dll)
532 1.1 joerg clean
533 1.1 joerg # TODO: Currently, building with the experimental library breaks running
534 1.1 joerg # tests (the test linking look for the c++experimental library with the
535 1.1 joerg # wrong name, and the statically linked c++experimental can't be linked
536 1.1 joerg # correctly when libc++ visibility attributes indicate dllimport linkage
537 1.1 joerg # anyway), thus just disable the experimental library. Remove this
538 1.1 joerg # setting when cmake and the test driver does the right thing automatically.
539 1.1 joerg generate-cmake-libcxx-win -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF
540 1.1 joerg echo "+++ Running the libc++ tests"
541 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxx
542 1.1 joerg ;;
543 1.1 joerg windows-static)
544 1.1 joerg clean
545 1.1 joerg generate-cmake-libcxx-win -DLIBCXX_ENABLE_SHARED=OFF
546 1.1 joerg echo "+++ Running the libc++ tests"
547 1.1 joerg ${NINJA} -vC "${BUILD_DIR}" check-cxx
548 1.1 joerg ;;
549 1.1 joerg *)
550 1.1 joerg echo "${BUILDER} is not a known configuration"
551 1.1 joerg exit 1
552 1.1 joerg ;;
553 1.1 joerg esac
554