blob: 08ab52316611c9b8c028fffb428da06a1bcefccc [file] [log] [blame]
Louis Dionne9f21d342020-09-23 13:20:031#!/usr/bin/env bash
2#===----------------------------------------------------------------------===##
3#
4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5# See https://llvm.org/LICENSE.txt for license information.
6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7#
8#===----------------------------------------------------------------------===##
9
10set -ex
Marek Kurdej1361c5e2021-02-04 20:13:2211set -o pipefail
Arthur O'Dwyerc92cdb42021-04-30 18:43:3312unset LANG
13unset LC_ALL
14unset LC_COLLATE
Louis Dionne9f21d342020-09-23 13:20:0315
Louis Dionne3790e172020-11-06 00:02:3216PROGNAME="$(basename "${0}")"
17
18function usage() {
19cat <<EOF
20Usage:
21${PROGNAME} [options] <BUILDER>
22
23[-h|--help] Display this help and exit.
24
25--llvm-root <DIR> Path to the root of the LLVM monorepo. By default, we try
26 to figure it out based on the current working directory.
27
Louis Dionne75b67262020-11-06 00:09:0328--build-dir <DIR> The directory to use for building the library. By default,
29 this is '<llvm-root>/build/<builder>'.
30
Louis Dionne3790e172020-11-06 00:02:3231--osx-roots <DIR> Path to pre-downloaded macOS dylibs. By default, we download
32 them from Green Dragon. This is only relevant at all when
33 running back-deployment testing if one wants to override
34 the old dylibs we use to run the tests with different ones.
35EOF
36}
37
38while [[ $# -gt 0 ]]; do
39 case ${1} in
40 -h|--help)
41 usage
42 exit 0
43 ;;
44 --llvm-root)
45 MONOREPO_ROOT="${2}"
46 shift; shift
47 ;;
Louis Dionne75b67262020-11-06 00:09:0348 --build-dir)
49 BUILD_DIR="${2}"
50 shift; shift
51 ;;
Louis Dionne3790e172020-11-06 00:02:3252 --osx-roots)
53 OSX_ROOTS="${2}"
54 shift; shift
55 ;;
56 *)
57 BUILDER="${1}"
58 shift
59 ;;
60 esac
61done
62
63MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
Louis Dionne75b67262020-11-06 00:09:0364BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
Louis Dionnec01202a2021-01-07 22:37:0965INSTALL_DIR="${BUILD_DIR}/install"
Louis Dionne9f21d342020-09-23 13:20:0366
Louis Dionnec42007e2021-05-07 17:14:5767# If we can find Ninja/CMake provided by Xcode, use those since we know their
68# version will generally work with the Clang shipped in Xcode (e.g. if Clang
69# knows about -std=c++20, the CMake bundled in Xcode will probably know about
70# that flag too).
71if xcrun --find ninja &>/dev/null; then NINJA="$(xcrun --find ninja)"; else NINJA="ninja"; fi
72if xcrun --find cmake &>/dev/null; then CMAKE="$(xcrun --find cmake)"; else CMAKE="cmake"; fi
Louis Dionnec7f244b2021-03-04 21:01:3673
Louis Dionne3790e172020-11-06 00:02:3274function clean() {
75 rm -rf "${BUILD_DIR}"
76}
77
Martin Storsjö9b24ff92021-04-05 21:17:3078function generate-cmake-base() {
Louis Dionne2f8dd262020-10-23 14:02:1479 echo "--- Generating CMake"
Louis Dionnec42007e2021-05-07 17:14:5780 ${CMAKE} \
Louis Dionne79175f32021-10-07 20:19:1181 -S "${MONOREPO_ROOT}/runtimes" \
Louis Dionne2f8dd262020-10-23 14:02:1482 -B "${BUILD_DIR}" \
Louis Dionnec7f244b2021-03-04 21:01:3683 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne2f8dd262020-10-23 14:02:1484 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
85 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
Martin Storsjö7420cf12022-02-10 11:08:2486 -DLIBCXX_ENABLE_WERROR=YES \
Martin Storsjö64d7f772022-03-31 08:51:3087 -DLIBCXXABI_ENABLE_WERROR=YES \
88 -DLIBUNWIND_ENABLE_WERROR=YES \
Louis Dionne222bd832022-06-07 14:01:0189 -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml --timeout=1500 --time-tests" \
Martin Storsjö9b24ff92021-04-05 21:17:3090 "${@}"
91}
92
93function generate-cmake() {
94 generate-cmake-base \
Louis Dionne79175f32021-10-07 20:19:1195 -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
Louis Dionne2f8dd262020-10-23 14:02:1496 -DLIBCXX_CXX_ABI=libcxxabi \
Louis Dionnebb43a0c2020-11-05 15:47:0697 "${@}"
98}
99
Martin Storsjö9b24ff92021-04-05 21:17:30100function generate-cmake-libcxx-win() {
101 # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
102 # builtins helpers for int128 division. See
103 # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
104 # intent for handling the issue. In the meantime, define
105 # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
106 # when building tests) to allow enabling filesystem for running tests,
107 # even if it uses a non-permanent ABI.
Martin Storsjö9b24ff92021-04-05 21:17:30108 generate-cmake-base \
Louis Dionne79175f32021-10-07 20:19:11109 -DLLVM_ENABLE_RUNTIMES="libcxx" \
Martin Storsjö9b24ff92021-04-05 21:17:30110 -DCMAKE_C_COMPILER=clang-cl \
111 -DCMAKE_CXX_COMPILER=clang-cl \
112 -DLIBCXX_ENABLE_FILESYSTEM=YES \
Martin Storsjöf68e8902021-12-20 23:19:34113 -DLIBCXX_EXTRA_SITE_DEFINES="_LIBCPP_HAS_NO_INT128" \
Martin Storsjö9b24ff92021-04-05 21:17:30114 "${@}"
115}
116
Louis Dionne60fe1f52021-09-30 19:11:48117function check-runtimes() {
118 echo "--- Installing libc++, libc++abi and libunwind to a fake location"
119 ${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi install-unwind
Louis Dionnec504c682021-03-24 13:50:59120
Louis Dionne2f8dd262020-10-23 14:02:14121 echo "+++ Running the libc++ tests"
Louis Dionne116b8522021-03-19 23:26:15122 ${NINJA} -vC "${BUILD_DIR}" check-cxx
Louis Dionne2f8dd262020-10-23 14:02:14123
124 echo "+++ Running the libc++abi tests"
Louis Dionne116b8522021-03-19 23:26:15125 ${NINJA} -vC "${BUILD_DIR}" check-cxxabi
Louis Dionne60fe1f52021-09-30 19:11:48126
127 echo "+++ Running the libunwind tests"
128 ${NINJA} -vC "${BUILD_DIR}" check-unwind
Louis Dionne2f8dd262020-10-23 14:02:14129}
130
Louis Dionneda1b50d2020-11-26 20:00:42131# TODO: The goal is to test this against all configurations. We should also move
132# this to the Lit test suite instead of being a separate CMake target.
133function check-abi-list() {
134 echo "+++ Running the libc++ ABI list test"
Louis Dionne116b8522021-03-19 23:26:15135 ${NINJA} -vC "${BUILD_DIR}" check-cxx-abilist || (
Marek Kurdeja984dca2020-12-02 07:57:02136 echo "+++ Generating the libc++ ABI list after failed check"
Louis Dionne116b8522021-03-19 23:26:15137 ${NINJA} -vC "${BUILD_DIR}" generate-cxx-abilist
Marek Kurdeja984dca2020-12-02 07:57:02138 false
139 )
Louis Dionneda1b50d2020-11-26 20:00:42140}
141
Louis Dionne2f8dd262020-10-23 14:02:14142function check-cxx-benchmarks() {
143 echo "--- Running the benchmarks"
Louis Dionne116b8522021-03-19 23:26:15144 ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks
Louis Dionne2f8dd262020-10-23 14:02:14145}
Louis Dionne9f21d342020-09-23 13:20:03146
Louis Dionnee93c95d2021-04-01 17:40:04147# Print the version of a few tools to aid diagnostics in some cases
Louis Dionnec42007e2021-05-07 17:14:57148${CMAKE} --version
Louis Dionnee93c95d2021-04-01 17:40:04149${NINJA} --version
150
Mark de Weverc632ee12022-09-01 16:38:03151if [ ! -z "${CXX}" ]; then ${CXX} --version; fi
152
Louis Dionne9f21d342020-09-23 13:20:03153case "${BUILDER}" in
Marek Kurdej1361c5e2021-02-04 20:13:22154check-format)
155 clean
156 echo "+++ Checking formatting"
157 # We need to set --extensions so that clang-format checks extensionless files.
158 mkdir -p ${BUILD_DIR}
159 git-clang-format \
160 --binary /usr/bin/clang-format --diff \
161 --extensions ',h,hh,hpp,hxx,c,cc,cxx,cpp' HEAD~1 \
162 -- \
163 libcxx/{benchmarks,include,src,test} \
164 libcxxabi/{fuzz,include,src,test} \
165 | tee ${BUILD_DIR}/clang-format.patch
166 # Check if the diff is empty, fail otherwise.
167 ! grep -q '^--- a' ${BUILD_DIR}/clang-format.patch
168;;
Mark de Weverae103002021-04-04 18:11:48169check-generated-output)
Mark de Weverbf72f6b2021-04-28 17:13:52170 # `! foo` doesn't work properly with `set -e`, use `! foo || false` instead.
171 # https://stackoverflow.com/questions/57681955/set-e-does-not-respect-logical-not
Mark de Weverae103002021-04-04 18:11:48172 clean
Louis Dionne1f8e2862021-07-15 14:19:39173 generate-cmake
174
175 # Reject patches that forgot to re-run the generator scripts.
176 echo "+++ Making sure the generator scripts were run"
177 ${NINJA} -vC "${BUILD_DIR}" libcxx-generate-files
Mark de Weverae103002021-04-04 18:11:48178 git diff | tee ${BUILD_DIR}/generated_output.patch
Mark de Wever1139fd42021-07-22 09:17:53179 git ls-files -o --exclude-standard | tee ${BUILD_DIR}/generated_output.status
Mark de Weverbf72f6b2021-04-28 17:13:52180 ! grep -q '^--- a' ${BUILD_DIR}/generated_output.patch || false
Mark de Wever1139fd42021-07-22 09:17:53181 if [ -s ${BUILD_DIR}/generated_output.status ]; then
182 echo "It looks like not all the generator scripts were run,"
183 echo "did you forget to build the libcxx-generate-files target?"
184 echo "Did you add all new files it generated?"
185 false
186 fi
Louis Dionne1f8e2862021-07-15 14:19:39187
Mark de Weverbf72f6b2021-04-28 17:13:52188 # Reject patches that introduce non-ASCII characters or hard tabs.
Arthur O'Dwyerc92cdb42021-04-30 18:43:33189 # Depends on LC_COLLATE set at the top of this script.
Louis Dionne355e0ce2022-08-18 21:41:13190 ! grep -rn '[^ -~]' libcxx/include libcxx/src libcxx/test libcxx/benchmarks \
191 --exclude '*.dat' \
Mark de Wevera4800732022-05-05 06:03:58192 --exclude 'escaped_output.*.pass.cpp' \
Mark de Wevere5d2d3e2022-03-20 12:40:02193 --exclude 'format_tests.h' \
Mark de Wever3eb4f162022-03-20 12:40:02194 --exclude 'formatter.*.pass.cpp' \
Louis Dionne355e0ce2022-08-18 21:41:13195 --exclude 'grep.pass.cpp' \
196 --exclude 'locale-specific_form.pass.cpp' \
Mark de Wever1522f192022-03-20 12:40:02197 --exclude 'ostream.pass.cpp' \
Mark de Wevere5d2d3e2022-03-20 12:40:02198 --exclude 'std_format_spec_string_unicode.bench.cpp' \
199 || false
Louis Dionne1f8e2862021-07-15 14:19:39200
Louis Dionne89469df2022-08-18 20:49:06201 # Reject code with trailing whitespace
202 ! grep -rn '[[:blank:]]$' libcxx/include libcxx/src libcxx/test libcxx/benchmarks || false
Mark de Weverae103002021-04-04 18:11:48203;;
Louis Dionneba9b1502020-10-01 17:55:39204generic-cxx03)
Louis Dionne3790e172020-11-06 00:02:32205 clean
Louis Dionne92bbcfa2022-05-26 14:19:25206 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48207 check-runtimes
Louis Dionneda1b50d2020-11-26 20:00:42208 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03209;;
Louis Dionneba9b1502020-10-01 17:55:39210generic-cxx11)
Louis Dionne3790e172020-11-06 00:02:32211 clean
Louis Dionne92bbcfa2022-05-26 14:19:25212 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48213 check-runtimes
Louis Dionneda1b50d2020-11-26 20:00:42214 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03215;;
Louis Dionneba9b1502020-10-01 17:55:39216generic-cxx14)
Louis Dionne3790e172020-11-06 00:02:32217 clean
Louis Dionne92bbcfa2022-05-26 14:19:25218 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx14.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48219 check-runtimes
Louis Dionneda1b50d2020-11-26 20:00:42220 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03221;;
Louis Dionneba9b1502020-10-01 17:55:39222generic-cxx17)
Louis Dionne3790e172020-11-06 00:02:32223 clean
Louis Dionne92bbcfa2022-05-26 14:19:25224 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx17.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48225 check-runtimes
Louis Dionneda1b50d2020-11-26 20:00:42226 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03227;;
Marek Kurdej044b8922021-01-07 11:29:04228generic-cxx20)
Louis Dionne3790e172020-11-06 00:02:32229 clean
Louis Dionne92bbcfa2022-05-26 14:19:25230 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx20.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48231 check-runtimes
Louis Dionneda1b50d2020-11-26 20:00:42232 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03233;;
Marek Kurdej95729f92021-01-08 17:40:42234generic-cxx2b)
Marek Kurdej95729f92021-01-08 17:40:42235 clean
Louis Dionne92bbcfa2022-05-26 14:19:25236 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx2b.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48237 check-runtimes
Marek Kurdej95729f92021-01-08 17:40:42238 check-abi-list
239;;
Louis Dionneb648c612021-06-09 13:41:27240generic-assertions)
Louis Dionneb648c612021-06-09 13:41:27241 clean
Louis Dionne92bbcfa2022-05-26 14:19:25242 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-assertions.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48243 check-runtimes
Louis Dionneb648c612021-06-09 13:41:27244 check-abi-list
245;;
Louis Dionnef3966ea2022-04-01 20:38:30246generic-debug-mode)
Arthur O'Dwyer86d1f592021-04-20 15:27:03247 clean
Louis Dionnef3966ea2022-04-01 20:38:30248 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-debug-mode.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48249 check-runtimes
Louis Dionnef1c30132022-07-19 15:04:31250 # We don't check the ABI lists because the debug mode ABI is not stable
Arthur O'Dwyer86d1f592021-04-20 15:27:03251;;
Louis Dionneba9b1502020-10-01 17:55:39252generic-noexceptions)
Louis Dionne3790e172020-11-06 00:02:32253 clean
Louis Dionne92bbcfa2022-05-26 14:19:25254 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-noexceptions.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48255 check-runtimes
Louis Dionne0e628a72022-02-14 19:39:17256 check-abi-list
Louis Dionne9f21d342020-09-23 13:20:03257;;
Louis Dionne4d680b02021-06-02 21:07:57258generic-modules)
Louis Dionne4d680b02021-06-02 21:07:57259 clean
Louis Dionne92bbcfa2022-05-26 14:19:25260 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-modules.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48261 check-runtimes
Louis Dionne0e628a72022-02-14 19:39:17262 check-abi-list
Louis Dionne4d680b02021-06-02 21:07:57263;;
Louis Dionnec504c682021-03-24 13:50:59264generic-static)
Louis Dionnec504c682021-03-24 13:50:59265 clean
Louis Dionne92bbcfa2022-05-26 14:19:25266 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-static.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48267 check-runtimes
Louis Dionnec504c682021-03-24 13:50:59268;;
Louis Dionnefa7ce8e2022-05-18 16:05:45269generic-merged)
270 clean
271 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-merged.cmake" \
272 -DLIBCXX_TEST_CONFIG="llvm-libc++-shared.cfg.in" \
273 -DLIBCXXABI_TEST_CONFIG="llvm-libc++abi-merged.cfg.in" \
274 -DLIBUNWIND_TEST_CONFIG="llvm-libunwind-merged.cfg.in"
275 check-runtimes
276;;
Louis Dionneba9b1502020-10-01 17:55:39277generic-gcc)
Louis Dionne3790e172020-11-06 00:02:32278 clean
Louis Dionne92bbcfa2022-05-26 14:19:25279 generate-cmake -DLIBCXX_ENABLE_WERROR=NO \
Martin Storsjö64d7f772022-03-31 08:51:30280 -DLIBCXXABI_ENABLE_WERROR=NO \
281 -DLIBUNWIND_ENABLE_WERROR=NO
Louis Dionne60fe1f52021-09-30 19:11:48282 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03283;;
Louis Dionne851a3352021-07-15 13:46:36284generic-gcc-cxx11)
Louis Dionne851a3352021-07-15 13:46:36285 clean
Louis Dionnec07b80c2021-10-07 18:54:14286 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake" \
Martin Storsjö64d7f772022-03-31 08:51:30287 -DLIBCXX_ENABLE_WERROR=NO \
288 -DLIBCXXABI_ENABLE_WERROR=NO \
289 -DLIBUNWIND_ENABLE_WERROR=NO
Louis Dionne60fe1f52021-09-30 19:11:48290 check-runtimes
Louis Dionne851a3352021-07-15 13:46:36291;;
Louis Dionneba9b1502020-10-01 17:55:39292generic-asan)
Louis Dionne3790e172020-11-06 00:02:32293 clean
Louis Dionne92bbcfa2022-05-26 14:19:25294 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-asan.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48295 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03296;;
Louis Dionneba9b1502020-10-01 17:55:39297generic-msan)
Louis Dionne3790e172020-11-06 00:02:32298 clean
Louis Dionne92bbcfa2022-05-26 14:19:25299 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-msan.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48300 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03301;;
Louis Dionneba9b1502020-10-01 17:55:39302generic-tsan)
Louis Dionne3790e172020-11-06 00:02:32303 clean
Louis Dionne92bbcfa2022-05-26 14:19:25304 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-tsan.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48305 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03306;;
Louis Dionneba9b1502020-10-01 17:55:39307generic-ubsan)
Louis Dionne3790e172020-11-06 00:02:32308 clean
Louis Dionne92bbcfa2022-05-26 14:19:25309 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-ubsan.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48310 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03311;;
Louis Dionneba9b1502020-10-01 17:55:39312generic-with_llvm_unwinder)
Louis Dionne3790e172020-11-06 00:02:32313 clean
Louis Dionne92bbcfa2022-05-26 14:19:25314 generate-cmake -DLIBCXXABI_USE_LLVM_UNWINDER=ON
Louis Dionne60fe1f52021-09-30 19:11:48315 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03316;;
Louis Dionnede4a57c2022-06-27 19:53:41317generic-no-transitive-includes)
318 clean
319 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-transitive-includes.cmake"
320 check-runtimes
321;;
Louis Dionnea9a6e202022-05-24 13:58:04322generic-no-threads)
Louis Dionne3790e172020-11-06 00:02:32323 clean
Louis Dionne92bbcfa2022-05-26 14:19:25324 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-threads.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48325 check-runtimes
Louis Dionne9f21d342020-09-23 13:20:03326;;
Louis Dionne933518f2021-01-18 17:18:18327generic-no-filesystem)
Louis Dionne933518f2021-01-18 17:18:18328 clean
Louis Dionne92bbcfa2022-05-26 14:19:25329 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-filesystem.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48330 check-runtimes
Louis Dionne933518f2021-01-18 17:18:18331;;
Louis Dionnee0d01292020-10-15 14:32:09332generic-no-random_device)
Louis Dionne3790e172020-11-06 00:02:32333 clean
Louis Dionne92bbcfa2022-05-26 14:19:25334 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48335 check-runtimes
Louis Dionnee0d01292020-10-15 14:32:09336;;
Louis Dionne88ffc722020-10-09 19:31:05337generic-no-localization)
Louis Dionne3790e172020-11-06 00:02:32338 clean
Louis Dionne92bbcfa2022-05-26 14:19:25339 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48340 check-runtimes
Louis Dionne88ffc722020-10-09 19:31:05341;;
Mark de Weverdf2af992021-05-25 18:11:08342generic-no-unicode)
Mark de Weverdf2af992021-05-25 18:11:08343 clean
Louis Dionne92bbcfa2022-05-26 14:19:25344 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-unicode.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48345 check-runtimes
Mark de Weverdf2af992021-05-25 18:11:08346;;
Louis Dionnef4c12582021-08-23 19:32:36347generic-no-wide-characters)
348 clean
Louis Dionne92bbcfa2022-05-26 14:19:25349 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-wide-characters.cmake"
Louis Dionnef4c12582021-08-23 19:32:36350 check-runtimes
351;;
Louis Dionne99ae4582022-02-01 21:32:39352generic-no-experimental)
353 clean
Louis Dionne92bbcfa2022-05-26 14:19:25354 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-experimental.cmake"
Louis Dionne99ae4582022-02-01 21:32:39355 check-runtimes
Louis Dionne0e628a72022-02-14 19:39:17356 check-abi-list
Louis Dionne99ae4582022-02-01 21:32:39357;;
Nikolas Klauser54880212022-02-05 13:09:45358generic-abi-unstable)
359 clean
Louis Dionne92bbcfa2022-05-26 14:19:25360 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-abi-unstable.cmake"
Nikolas Klauser54880212022-02-05 13:09:45361 check-runtimes
362;;
Louis Dionne25cbf722021-10-15 04:21:26363apple-system)
Louis Dionne3790e172020-11-06 00:02:32364 clean
Louis Dionne25cbf722021-10-15 04:21:26365
Louis Dionne25cbf722021-10-15 04:21:26366 arch="$(uname -m)"
Louis Dionne1b06d2c2022-02-03 15:57:49367 xcrun --sdk macosx \
368 ${MONOREPO_ROOT}/libcxx/utils/ci/apple-install-libcxx.sh \
369 --llvm-root ${MONOREPO_ROOT} \
370 --build-dir ${BUILD_DIR} \
371 --install-dir ${INSTALL_DIR} \
372 --symbols-dir "${BUILD_DIR}/symbols" \
373 --architectures "${arch}" \
374 --version "999.99"
Louis Dionne25cbf722021-10-15 04:21:26375
376 # TODO: It would be better to run the tests against the fake-installed version of libc++ instead
Louis Dionne0e628a72022-02-14 19:39:17377 xcrun --sdk macosx ninja -vC "${BUILD_DIR}/${arch}" check-cxx check-cxxabi check-cxx-abilist
Louis Dionne79410dd2020-10-01 12:55:40378;;
Louis Dionnee36f9e12022-08-04 19:25:48379apple-system-backdeployment-assertions-*)
380 clean
381
382 if [[ "${OSX_ROOTS}" == "" ]]; then
383 echo "--- Downloading previous macOS dylibs"
384 PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/gmcfxwgl9f9n6pu/libcxx-roots.tar.gz"
385 OSX_ROOTS="${BUILD_DIR}/macos-roots"
386 mkdir -p "${OSX_ROOTS}"
387 curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
388 fi
389
390 DEPLOYMENT_TARGET="${BUILDER#apple-system-backdeployment-assertions-}"
391
392 # TODO: On Apple platforms, we never produce libc++abi.1.dylib or libunwind.1.dylib,
393 # only libc++abi.dylib and libunwind.dylib. Fix that in the build so that the
394 # tests stop searching for @rpath/libc++abi.1.dylib and @rpath/libunwind.1.dylib.
395 cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
396 "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
397 cp "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.dylib" \
398 "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.1.dylib"
399
400 arch="$(uname -m)"
401 PARAMS="target_triple=${arch}-apple-macosx${DEPLOYMENT_TARGET}"
402 PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
403 PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
404 PARAMS+=";unwind_runtime_root=${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}"
405 PARAMS+=";use_system_cxx_lib=True"
406 PARAMS+=";enable_assertions=True"
407 # TODO: Enable experimental features during back-deployment -- right now some of the availability
408 # annotations are incorrect, leading to test failures that could be avoided.
409 PARAMS+=";enable_experimental=False"
410
411 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
412 -DLIBCXX_TEST_CONFIG="apple-libc++-backdeployment.cfg.in" \
413 -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-backdeployment.cfg.in" \
414 -DLIBUNWIND_TEST_CONFIG="apple-libunwind-backdeployment.cfg.in" \
415 -DLIBCXX_TEST_PARAMS="${PARAMS}" \
416 -DLIBCXXABI_TEST_PARAMS="${PARAMS}" \
417 -DLIBUNWIND_TEST_PARAMS="${PARAMS}"
418
419 check-runtimes
420;;
Louis Dionne25cbf722021-10-15 04:21:26421apple-system-backdeployment-*)
Louis Dionne3790e172020-11-06 00:02:32422 clean
Louis Dionnebb43a0c2020-11-05 15:47:06423
Louis Dionne3790e172020-11-06 00:02:32424 if [[ "${OSX_ROOTS}" == "" ]]; then
425 echo "--- Downloading previous macOS dylibs"
Louis Dionned4d8f032022-03-15 20:18:45426 PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/gmcfxwgl9f9n6pu/libcxx-roots.tar.gz"
Louis Dionne3790e172020-11-06 00:02:32427 OSX_ROOTS="${BUILD_DIR}/macos-roots"
428 mkdir -p "${OSX_ROOTS}"
429 curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
430 fi
Louis Dionnebb43a0c2020-11-05 15:47:06431
Louis Dionne25cbf722021-10-15 04:21:26432 DEPLOYMENT_TARGET="${BUILDER#apple-system-backdeployment-}"
Louis Dionne60ba1fe2020-07-08 20:38:54433
Louis Dionne92bbcfa2022-05-26 14:19:25434 # TODO: On Apple platforms, we never produce libc++abi.1.dylib or libunwind.1.dylib,
435 # only libc++abi.dylib and libunwind.dylib. Fix that in the build so that the
436 # tests stop searching for @rpath/libc++abi.1.dylib and @rpath/libunwind.1.dylib.
Louis Dionne60ba1fe2020-07-08 20:38:54437 cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
438 "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
Louis Dionne92bbcfa2022-05-26 14:19:25439 cp "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.dylib" \
440 "${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}/libunwind.1.dylib"
Louis Dionne60ba1fe2020-07-08 20:38:54441
Louis Dionne25cbf722021-10-15 04:21:26442 arch="$(uname -m)"
443 PARAMS="target_triple=${arch}-apple-macosx${DEPLOYMENT_TARGET}"
Louis Dionne3790e172020-11-06 00:02:32444 PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
Louis Dionne60ba1fe2020-07-08 20:38:54445 PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
Louis Dionne8c060612022-02-10 19:03:05446 PARAMS+=";unwind_runtime_root=${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}"
Louis Dionne3790e172020-11-06 00:02:32447 PARAMS+=";use_system_cxx_lib=True"
Louis Dionne8711fca2022-06-30 15:57:52448 # TODO: Enable experimental features during back-deployment -- right now some of the availability
449 # annotations are incorrect, leading to test failures that could be avoided.
450 PARAMS+=";enable_experimental=False"
Louis Dionne3790e172020-11-06 00:02:32451
Louis Dionne3790e172020-11-06 00:02:32452 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
Louis Dionne768b50d2022-02-07 22:25:41453 -DLIBCXX_TEST_CONFIG="apple-libc++-backdeployment.cfg.in" \
Louis Dionne8c060612022-02-10 19:03:05454 -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-backdeployment.cfg.in" \
Louis Dionne92bbcfa2022-05-26 14:19:25455 -DLIBUNWIND_TEST_CONFIG="apple-libunwind-backdeployment.cfg.in" \
Louis Dionne3790e172020-11-06 00:02:32456 -DLIBCXX_TEST_PARAMS="${PARAMS}" \
Louis Dionne92bbcfa2022-05-26 14:19:25457 -DLIBCXXABI_TEST_PARAMS="${PARAMS}" \
458 -DLIBUNWIND_TEST_PARAMS="${PARAMS}"
Louis Dionne3790e172020-11-06 00:02:32459
Louis Dionne60fe1f52021-09-30 19:11:48460 check-runtimes
Louis Dionnebb43a0c2020-11-05 15:47:06461;;
Louis Dionne2f8dd262020-10-23 14:02:14462benchmarks)
Louis Dionne3790e172020-11-06 00:02:32463 clean
Louis Dionne92bbcfa2022-05-26 14:19:25464 generate-cmake
Louis Dionne2f8dd262020-10-23 14:02:14465 check-cxx-benchmarks
Louis Dionne79410dd2020-10-01 12:55:40466;;
Louis Dionnef7e4f042020-11-05 19:34:29467documentation)
Louis Dionne3790e172020-11-06 00:02:32468 clean
469 generate-cmake -DLLVM_ENABLE_SPHINX=ON
470
471 echo "+++ Generating documentation"
Louis Dionne116b8522021-03-19 23:26:15472 ${NINJA} -vC "${BUILD_DIR}" docs-libcxx-html
Louis Dionnef7e4f042020-11-05 19:34:29473;;
Louis Dionne3cea2502021-10-20 21:43:55474bootstrapping-build)
Louis Dionne180e9e52021-03-16 18:57:42475 clean
476
477 echo "--- Generating CMake"
Louis Dionnec42007e2021-05-07 17:14:57478 ${CMAKE} \
479 -S "${MONOREPO_ROOT}/llvm" \
Louis Dionne180e9e52021-03-16 18:57:42480 -B "${BUILD_DIR}" \
Louis Dionnec42007e2021-05-07 17:14:57481 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Mark de Weverade336de2021-12-08 16:58:51482 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
Louis Dionne180e9e52021-03-16 18:57:42483 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
484 -DLLVM_ENABLE_PROJECTS="clang" \
Louis Dionne5082b942022-03-18 14:03:01485 -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
Louis Dionne3016ceb2021-11-11 16:55:20486 -DLLVM_RUNTIME_TARGETS="$(c++ --print-target-triple)" \
Matheus Izvekov35f798d2021-11-15 23:32:48487 -DLLVM_TARGETS_TO_BUILD="host" \
Louis Dionne3016ceb2021-11-11 16:55:20488 -DRUNTIMES_BUILD_ALLOW_DARWIN=ON \
Louis Dionne92bbcfa2022-05-26 14:19:25489 -DLLVM_ENABLE_ASSERTIONS=ON
Louis Dionne180e9e52021-03-16 18:57:42490
491 echo "+++ Running the libc++ and libc++abi tests"
492 ${NINJA} -C "${BUILD_DIR}" check-runtimes
493
494 echo "--- Installing libc++ and libc++abi to a fake location"
Louis Dionne2ce0df42021-07-06 14:39:01495 ${NINJA} -C "${BUILD_DIR}" install-runtimes
Louis Dionne180e9e52021-03-16 18:57:42496;;
David Spickett6e5342a2021-02-08 10:43:21497aarch64)
498 clean
Louis Dionne92bbcfa2022-05-26 14:19:25499 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48500 check-runtimes
David Spickett6e5342a2021-02-08 10:43:21501;;
502aarch64-noexceptions)
503 clean
504 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake" \
Louis Dionne4628ff42021-07-15 17:29:47505 -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
Louis Dionne92bbcfa2022-05-26 14:19:25506 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
Louis Dionne60fe1f52021-09-30 19:11:48507 check-runtimes
David Spickett6e5342a2021-02-08 10:43:21508;;
David Spickett44e36fc2021-03-02 15:07:19509# Aka Armv8 32 bit
510armv8)
511 clean
Louis Dionne92bbcfa2022-05-26 14:19:25512 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Arm.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48513 check-runtimes
David Spickett44e36fc2021-03-02 15:07:19514;;
515armv8-noexceptions)
516 clean
Louis Dionne92bbcfa2022-05-26 14:19:25517 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Thumb-noexceptions.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48518 check-runtimes
David Spickett44e36fc2021-03-02 15:07:19519;;
520# Armv7 32 bit. One building Arm only one Thumb only code.
521armv7)
522 clean
Louis Dionne92bbcfa2022-05-26 14:19:25523 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Arm.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48524 check-runtimes
David Spickett44e36fc2021-03-02 15:07:19525;;
526armv7-noexceptions)
527 clean
Louis Dionne92bbcfa2022-05-26 14:19:25528 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
Louis Dionne60fe1f52021-09-30 19:11:48529 check-runtimes
David Spickett44e36fc2021-03-02 15:07:19530;;
Martin Storsjöf5ca3ac2021-10-01 20:08:57531clang-cl-dll)
Martin Storsjö740e3492021-03-17 10:10:42532 clean
Martin Storsjö740e3492021-03-17 10:10:42533 # TODO: Currently, building with the experimental library breaks running
534 # tests (the test linking look for the c++experimental library with the
535 # wrong name, and the statically linked c++experimental can't be linked
536 # correctly when libc++ visibility attributes indicate dllimport linkage
537 # anyway), thus just disable the experimental library. Remove this
538 # setting when cmake and the test driver does the right thing automatically.
Louis Dionne7300a652022-07-19 14:44:06539 generate-cmake-libcxx-win -DLIBCXX_TEST_PARAMS="enable_experimental=False"
Martin Storsjö9b24ff92021-04-05 21:17:30540 echo "+++ Running the libc++ tests"
541 ${NINJA} -vC "${BUILD_DIR}" check-cxx
542;;
Martin Storsjöf5ca3ac2021-10-01 20:08:57543clang-cl-static)
Martin Storsjö9b24ff92021-04-05 21:17:30544 clean
Louis Dionned0af4272022-03-14 18:23:38545 generate-cmake-libcxx-win -DLIBCXX_ENABLE_SHARED=OFF
Martin Storsjö740e3492021-03-17 10:10:42546 echo "+++ Running the libc++ tests"
547 ${NINJA} -vC "${BUILD_DIR}" check-cxx
548;;
Paul Kirth56a34452022-08-17 20:57:59549clang-cl-no-vcruntime)
550 clean
551 # Building libc++ in the same way as in clang-cl-dll above, but running
552 # tests with -D_HAS_EXCEPTIONS=0, which users might set in certain
553 # translation units while using libc++, even if libc++ is built with
554 # exceptions enabled.
555 generate-cmake-libcxx-win -DLIBCXX_TEST_PARAMS="enable_experimental=False" \
556 -DLIBCXX_TEST_CONFIG="llvm-libc++-shared-no-vcruntime-clangcl.cfg.in"
557 echo "+++ Running the libc++ tests"
558 ${NINJA} -vC "${BUILD_DIR}" check-cxx
559;;
Martin Storsjöf5ca3ac2021-10-01 20:08:57560mingw-dll)
561 clean
562 # Explicitly specify the compiler with a triple prefix. The CI
563 # environment has got two installations of Clang; the default one
564 # defaults to MSVC mode, while there's an installation of llvm-mingw
565 # further back in PATH. By calling the compiler with an explicit
566 # triple prefix, we use the one that is bundled with a mingw sysroot.
567 generate-cmake \
568 -DCMAKE_C_COMPILER=x86_64-w64-mingw32-clang \
569 -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-clang++ \
570 -C "${MONOREPO_ROOT}/libcxx/cmake/caches/MinGW.cmake"
571 echo "+++ Running the libc++ tests"
572 ${NINJA} -vC "${BUILD_DIR}" check-cxx
573;;
574mingw-static)
575 clean
576 generate-cmake \
577 -DCMAKE_C_COMPILER=x86_64-w64-mingw32-clang \
578 -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-clang++ \
579 -C "${MONOREPO_ROOT}/libcxx/cmake/caches/MinGW.cmake" \
580 -DLIBCXX_ENABLE_SHARED=OFF \
581 -DLIBUNWIND_ENABLE_SHARED=OFF
582 echo "+++ Running the libc++ tests"
583 ${NINJA} -vC "${BUILD_DIR}" check-cxx
584;;
Martin Storsjö30194d42022-05-04 08:05:44585mingw-dll-i686)
586 clean
587 generate-cmake \
588 -DCMAKE_C_COMPILER=i686-w64-mingw32-clang \
589 -DCMAKE_CXX_COMPILER=i686-w64-mingw32-clang++ \
590 -C "${MONOREPO_ROOT}/libcxx/cmake/caches/MinGW.cmake"
591 echo "+++ Running the libc++ tests"
592 ${NINJA} -vC "${BUILD_DIR}" check-cxx
593;;
David Tenty228b3b72021-10-13 15:41:47594aix)
David Tenty228b3b72021-10-13 15:41:47595 clean
David Tenty2b416b42021-11-09 17:44:44596 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AIX.cmake" \
David Tenty228b3b72021-10-13 15:41:47597 -DLIBCXX_TEST_CONFIG="ibm-libc++-shared.cfg.in" \
David Tenty2b416b42021-11-09 17:44:44598 -DLIBCXXABI_TEST_CONFIG="ibm-libc++abi-shared.cfg.in" \
Xing Xuedfaee3c2022-06-02 13:03:10599 -DLIBUNWIND_TEST_CONFIG="ibm-libunwind-shared.cfg.in"
Jake Egan3af7aa52022-06-14 17:15:46600 check-abi-list
Xing Xuedfaee3c2022-06-02 13:03:10601 check-runtimes
David Tenty228b3b72021-10-13 15:41:47602;;
Louis Dionneaad878f2021-05-27 20:51:38603#################################################################
604# Insert vendor-specific internal configurations below.
605#
606# This allows vendors to extend this file with their own internal
607# configurations without running into merge conflicts with upstream.
608#################################################################
609
610#################################################################
Louis Dionne9f21d342020-09-23 13:20:03611*)
612 echo "${BUILDER} is not a known configuration"
613 exit 1
614;;
615esac