blob: c781310d88f3394dbea820ba7efb0b58d79a7569 [file] [log] [blame]
Louis Dionnece556052020-09-23 09:20:03 -04001#!/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 Kurdej05449362021-02-04 21:13:22 +010011set -o pipefail
Arthur O'Dwyer757d5bd2021-04-30 14:43:33 -040012unset LANG
13unset LC_ALL
14unset LC_COLLATE
Louis Dionnece556052020-09-23 09:20:03 -040015
Louis Dionnebb7be752020-11-05 19:02:32 -050016PROGNAME="$(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 Dionne04bf1032020-11-05 19:09:03 -050028--build-dir <DIR> The directory to use for building the library. By default,
29 this is '<llvm-root>/build/<builder>'.
30
Louis Dionnebb7be752020-11-05 19:02:32 -050031--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 Dionne04bf1032020-11-05 19:09:03 -050048 --build-dir)
49 BUILD_DIR="${2}"
50 shift; shift
51 ;;
Louis Dionnebb7be752020-11-05 19:02:32 -050052 --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 Dionne04bf1032020-11-05 19:09:03 -050064BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
Louis Dionne485f4c02021-01-07 17:37:09 -050065INSTALL_DIR="${BUILD_DIR}/install"
Louis Dionnece556052020-09-23 09:20:03 -040066
Louis Dionne6f96e992021-05-07 13:14:57 -040067# 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 Dionne7a8d5362021-03-04 16:01:36 -050073
Louis Dionnebb7be752020-11-05 19:02:32 -050074function clean() {
75 rm -rf "${BUILD_DIR}"
76}
77
Martin Storsjö47cd3462021-04-06 00:17:30 +030078function generate-cmake-base() {
Louis Dionnef9c11b02020-10-23 10:02:14 -040079 echo "--- Generating CMake"
Louis Dionne6f96e992021-05-07 13:14:57 -040080 ${CMAKE} \
Louis Dionnef9c11b02020-10-23 10:02:14 -040081 -B "${BUILD_DIR}" \
Louis Dionne7a8d5362021-03-04 16:01:36 -050082 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionnef9c11b02020-10-23 10:02:14 -040083 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
84 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
Louis Dionnef9c11b02020-10-23 10:02:14 -040085 -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
Martin Storsjö47cd3462021-04-06 00:17:30 +030086 "${@}"
87}
88
89function generate-cmake() {
90 generate-cmake-base \
91 -S "${MONOREPO_ROOT}/llvm" \
92 -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
Louis Dionnef9c11b02020-10-23 10:02:14 -040093 -DLIBCXX_CXX_ABI=libcxxabi \
Louis Dionne662aaa22020-11-05 10:47:06 -050094 "${@}"
95}
96
Martin Storsjö47cd3462021-04-06 00:17:30 +030097function generate-cmake-libcxx-win() {
98 # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
99 # builtins helpers for int128 division. See
100 # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
101 # intent for handling the issue. In the meantime, define
102 # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
103 # when building tests) to allow enabling filesystem for running tests,
104 # even if it uses a non-permanent ABI.
105
106 generate-cmake-base \
107 -S "${MONOREPO_ROOT}/libcxx" \
108 -DCMAKE_C_COMPILER=clang-cl \
109 -DCMAKE_CXX_COMPILER=clang-cl \
110 -DLIBCXX_ENABLE_FILESYSTEM=YES \
111 -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
112 -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
113 "${@}"
114}
115
Louis Dionnef9c11b02020-10-23 10:02:14 -0400116function check-cxx-cxxabi() {
Louis Dionneeacce542021-03-24 09:50:59 -0400117 echo "--- Installing libc++ and libc++abi to a fake location"
118 ${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi
119
Louis Dionnef9c11b02020-10-23 10:02:14 -0400120 echo "+++ Running the libc++ tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700121 ${NINJA} -vC "${BUILD_DIR}" check-cxx
Louis Dionnef9c11b02020-10-23 10:02:14 -0400122
123 echo "+++ Running the libc++abi tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700124 ${NINJA} -vC "${BUILD_DIR}" check-cxxabi
Louis Dionnef9c11b02020-10-23 10:02:14 -0400125}
126
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500127# TODO: The goal is to test this against all configurations. We should also move
128# this to the Lit test suite instead of being a separate CMake target.
129function check-abi-list() {
130 echo "+++ Running the libc++ ABI list test"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700131 ${NINJA} -vC "${BUILD_DIR}" check-cxx-abilist || (
Marek Kurdej718b62c2020-12-02 08:57:02 +0100132 echo "+++ Generating the libc++ ABI list after failed check"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700133 ${NINJA} -vC "${BUILD_DIR}" generate-cxx-abilist
Marek Kurdej718b62c2020-12-02 08:57:02 +0100134 false
135 )
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500136}
137
Louis Dionnef9c11b02020-10-23 10:02:14 -0400138function check-cxx-benchmarks() {
139 echo "--- Running the benchmarks"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700140 ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks
Louis Dionnef9c11b02020-10-23 10:02:14 -0400141}
Louis Dionnece556052020-09-23 09:20:03 -0400142
Louis Dionne6bd3e652021-04-01 13:40:04 -0400143# Print the version of a few tools to aid diagnostics in some cases
Louis Dionne6f96e992021-05-07 13:14:57 -0400144${CMAKE} --version
Louis Dionne6bd3e652021-04-01 13:40:04 -0400145${NINJA} --version
146
Louis Dionnece556052020-09-23 09:20:03 -0400147case "${BUILDER}" in
Marek Kurdej05449362021-02-04 21:13:22 +0100148check-format)
149 clean
150 echo "+++ Checking formatting"
151 # We need to set --extensions so that clang-format checks extensionless files.
152 mkdir -p ${BUILD_DIR}
153 git-clang-format \
154 --binary /usr/bin/clang-format --diff \
155 --extensions ',h,hh,hpp,hxx,c,cc,cxx,cpp' HEAD~1 \
156 -- \
157 libcxx/{benchmarks,include,src,test} \
158 libcxxabi/{fuzz,include,src,test} \
159 | tee ${BUILD_DIR}/clang-format.patch
160 # Check if the diff is empty, fail otherwise.
161 ! grep -q '^--- a' ${BUILD_DIR}/clang-format.patch
162;;
Mark de Wever53efa102021-04-04 20:11:48 +0200163check-generated-output)
Mark de Weverb10c97d2021-04-28 19:13:52 +0200164 # `! foo` doesn't work properly with `set -e`, use `! foo || false` instead.
165 # https://stackoverflow.com/questions/57681955/set-e-does-not-respect-logical-not
Mark de Wever53efa102021-04-04 20:11:48 +0200166 clean
Arthur O'Dwyerbba78c32021-04-17 09:56:34 -0400167 echo "+++ Checking the output of the generator scripts"
Mark de Wever53efa102021-04-04 20:11:48 +0200168 mkdir -p ${BUILD_DIR}
Arthur O'Dwyerbba78c32021-04-17 09:56:34 -0400169 # Reject patches that don't update the generated output correctly.
Mark de Wever53efa102021-04-04 20:11:48 +0200170 python3 libcxx/utils/generate_feature_test_macro_components.py
171 python3 libcxx/utils/generate_header_inclusion_tests.py
172 python3 libcxx/utils/generate_header_tests.py
173 git diff | tee ${BUILD_DIR}/generated_output.patch
174 # Check if the diffs are empty, fail otherwise.
Mark de Weverb10c97d2021-04-28 19:13:52 +0200175 ! grep -q '^--- a' ${BUILD_DIR}/generated_output.patch || false
176 # Reject patches that introduce non-ASCII characters or hard tabs.
Arthur O'Dwyer757d5bd2021-04-30 14:43:33 -0400177 # Depends on LC_COLLATE set at the top of this script.
Mark de Weverb10c97d2021-04-28 19:13:52 +0200178 ! grep -rn '[^ -~]' libcxx/include/ || false
Arthur O'Dwyerbba78c32021-04-17 09:56:34 -0400179 # Check that no dependency cycles have been introduced.
180 python3 libcxx/utils/graph_header_deps.py >/dev/null
Mark de Wever53efa102021-04-04 20:11:48 +0200181;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400182generic-cxx03)
Louis Dionnece556052020-09-23 09:20:03 -0400183 export CC=clang
184 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500185 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400186 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake"
187 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500188 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400189;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400190generic-cxx11)
Louis Dionnece556052020-09-23 09:20:03 -0400191 export CC=clang
192 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500193 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400194 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake"
195 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500196 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400197;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400198generic-cxx14)
Louis Dionnece556052020-09-23 09:20:03 -0400199 export CC=clang
200 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500201 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400202 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx14.cmake"
203 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500204 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400205;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400206generic-cxx17)
Louis Dionnece556052020-09-23 09:20:03 -0400207 export CC=clang
208 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500209 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400210 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx17.cmake"
211 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500212 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400213;;
Marek Kurdej24b4c512021-01-07 12:29:04 +0100214generic-cxx20)
Louis Dionnece556052020-09-23 09:20:03 -0400215 export CC=clang
216 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500217 clean
Marek Kurdej24b4c512021-01-07 12:29:04 +0100218 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx20.cmake"
Louis Dionnef9c11b02020-10-23 10:02:14 -0400219 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500220 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400221;;
Marek Kurdej758067c2021-01-08 18:40:42 +0100222generic-cxx2b)
223 export CC=clang-tot
224 export CXX=clang++-tot
225 clean
226 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx2b.cmake"
227 check-cxx-cxxabi
228 check-abi-list
229;;
Arthur O'Dwyer64e02472021-04-20 11:27:03 -0400230generic-debug-iterators)
231 export CC=clang-tot
232 export CXX=clang++-tot
233 clean
234 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-debug-iterators.cmake"
235 check-cxx-cxxabi
236 check-abi-list
237;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400238generic-noexceptions)
Louis Dionnece556052020-09-23 09:20:03 -0400239 export CC=clang
240 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500241 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400242 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-noexceptions.cmake"
243 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400244;;
Louis Dionneeacce542021-03-24 09:50:59 -0400245generic-static)
246 export CC=clang
247 export CXX=clang++
248 clean
249 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-static.cmake"
250 check-cxx-cxxabi
251;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400252generic-32bit)
Louis Dionnece556052020-09-23 09:20:03 -0400253 export CC=clang
254 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500255 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400256 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-32bits.cmake"
257 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400258;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400259generic-gcc)
Louis Dionnece556052020-09-23 09:20:03 -0400260 export CC=gcc
261 export CXX=g++
Louis Dionnebb7be752020-11-05 19:02:32 -0500262 clean
Louis Dionneeacce542021-03-24 09:50:59 -0400263 generate-cmake
Louis Dionnef9c11b02020-10-23 10:02:14 -0400264 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400265;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400266generic-asan)
Louis Dionnece556052020-09-23 09:20:03 -0400267 export CC=clang
268 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500269 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400270 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-asan.cmake"
271 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400272;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400273generic-msan)
Louis Dionnece556052020-09-23 09:20:03 -0400274 export CC=clang
275 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500276 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400277 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-msan.cmake"
278 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400279;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400280generic-tsan)
Louis Dionnece556052020-09-23 09:20:03 -0400281 export CC=clang
282 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500283 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400284 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-tsan.cmake"
285 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400286;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400287generic-ubsan)
Louis Dionnece556052020-09-23 09:20:03 -0400288 export CC=clang
289 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500290 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400291 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-ubsan.cmake"
292 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400293;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400294generic-with_llvm_unwinder)
Louis Dionnece556052020-09-23 09:20:03 -0400295 export CC=clang
296 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500297 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400298 generate-cmake -DLIBCXXABI_USE_LLVM_UNWINDER=ON
299 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400300;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400301generic-singlethreaded)
Louis Dionnece556052020-09-23 09:20:03 -0400302 export CC=clang
303 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500304 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400305 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-singlethreaded.cmake"
306 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400307;;
Louis Dionneabcfdbc2021-03-23 14:09:52 -0400308generic-no-debug)
Louis Dionne4396f9b2020-10-06 16:46:58 -0400309 export CC=clang
310 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500311 clean
Louis Dionneabcfdbc2021-03-23 14:09:52 -0400312 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-debug.cmake"
Louis Dionnef9c11b02020-10-23 10:02:14 -0400313 check-cxx-cxxabi
Louis Dionne4396f9b2020-10-06 16:46:58 -0400314;;
Louis Dionnedb84e122021-01-18 12:18:18 -0500315generic-no-filesystem)
316 export CC=clang
317 export CXX=clang++
318 clean
319 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-filesystem.cmake"
320 check-cxx-cxxabi
321;;
Louis Dionne3777e682020-10-15 10:32:09 -0400322generic-no-random_device)
323 export CC=clang
324 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500325 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400326 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake"
327 check-cxx-cxxabi
Louis Dionne3777e682020-10-15 10:32:09 -0400328;;
Louis Dionne8d053eb2020-10-09 15:31:05 -0400329generic-no-localization)
330 export CC=clang
331 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500332 clean
Louis Dionne8d053eb2020-10-09 15:31:05 -0400333 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake"
334 check-cxx-cxxabi
335;;
Louis Dionne89d0eb22020-10-01 08:55:40 -0400336x86_64-apple-system)
337 export CC=clang
338 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500339 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400340 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake"
341 check-cxx-cxxabi
Louis Dionne89d0eb22020-10-01 08:55:40 -0400342;;
343x86_64-apple-system-noexceptions)
344 export CC=clang
345 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500346 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400347 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
348 -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
349 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
350 check-cxx-cxxabi
351;;
Louis Dionne662aaa22020-11-05 10:47:06 -0500352x86_64-apple-system-backdeployment-*)
Louis Dionnebb7be752020-11-05 19:02:32 -0500353 clean
Louis Dionne662aaa22020-11-05 10:47:06 -0500354
Louis Dionnebb7be752020-11-05 19:02:32 -0500355 if [[ "${OSX_ROOTS}" == "" ]]; then
356 echo "--- Downloading previous macOS dylibs"
Louis Dionnec7675352021-03-25 14:14:20 -0400357 PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/liu4fmc53qzlfly/libcxx-roots.tar.gz"
Louis Dionnebb7be752020-11-05 19:02:32 -0500358 OSX_ROOTS="${BUILD_DIR}/macos-roots"
359 mkdir -p "${OSX_ROOTS}"
360 curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
361 fi
Louis Dionne662aaa22020-11-05 10:47:06 -0500362
Louis Dionnebb7be752020-11-05 19:02:32 -0500363 DEPLOYMENT_TARGET="${BUILDER#x86_64-apple-system-backdeployment-}"
Louis Dionne84ad13b2020-07-08 16:38:54 -0400364
365 # TODO: On Apple platforms, we never produce libc++abi.1.dylib, always libc++abi.dylib.
366 # Fix that in the build so that the tests stop searching for @rpath/libc++abi.1.dylib.
367 cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
368 "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
369
Louis Dionnebb7be752020-11-05 19:02:32 -0500370 PARAMS="target_triple=x86_64-apple-macosx${DEPLOYMENT_TARGET}"
371 PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
Louis Dionne84ad13b2020-07-08 16:38:54 -0400372 PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
Louis Dionnebb7be752020-11-05 19:02:32 -0500373 PARAMS+=";use_system_cxx_lib=True"
Louis Dionnebb7be752020-11-05 19:02:32 -0500374
375 export CC=clang
376 export CXX=clang++
377 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
378 -DLIBCXX_TEST_PARAMS="${PARAMS}" \
379 -DLIBCXXABI_TEST_PARAMS="${PARAMS}"
380
Louis Dionne84ad13b2020-07-08 16:38:54 -0400381 check-cxx-cxxabi
Louis Dionne662aaa22020-11-05 10:47:06 -0500382;;
Louis Dionnef9c11b02020-10-23 10:02:14 -0400383benchmarks)
384 export CC=clang
385 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500386 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400387 generate-cmake
388 check-cxx-benchmarks
Louis Dionne89d0eb22020-10-01 08:55:40 -0400389;;
Louis Dionneaa4e44f2020-11-05 14:34:29 -0500390documentation)
Louis Dionnebb7be752020-11-05 19:02:32 -0500391 export CC=clang
392 export CXX=clang++
393 clean
394 generate-cmake -DLLVM_ENABLE_SPHINX=ON
395
396 echo "+++ Generating documentation"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700397 ${NINJA} -vC "${BUILD_DIR}" docs-libcxx-html
Louis Dionneaa4e44f2020-11-05 14:34:29 -0500398;;
Louis Dionne435c36b2020-10-23 16:27:41 -0400399unified-standalone)
400 export CC=clang
401 export CXX=clang++
402
Louis Dionnebb7be752020-11-05 19:02:32 -0500403 clean
404
Louis Dionne435c36b2020-10-23 16:27:41 -0400405 echo "--- Generating CMake"
Louis Dionne6f96e992021-05-07 13:14:57 -0400406 ${CMAKE} \
407 -S "${MONOREPO_ROOT}/libcxx/utils/ci/runtimes" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400408 -B "${BUILD_DIR}" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500409 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400410 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
411 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
412 -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind"
413
414 check-cxx-cxxabi
415;;
Louis Dionne61b63fd2021-03-16 11:57:42 -0700416runtimes-build)
417 export CC=clang
418 export CXX=clang++
419
420 clean
421
422 echo "--- Generating CMake"
Louis Dionne6f96e992021-05-07 13:14:57 -0400423 ${CMAKE} \
424 -S "${MONOREPO_ROOT}/llvm" \
Louis Dionne61b63fd2021-03-16 11:57:42 -0700425 -B "${BUILD_DIR}" \
Louis Dionne6f96e992021-05-07 13:14:57 -0400426 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne61b63fd2021-03-16 11:57:42 -0700427 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
428 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
429 -DLLVM_ENABLE_PROJECTS="clang" \
430 -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
Petr Hosek7134ad62021-04-27 22:31:36 -0700431 -DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu"
Louis Dionne61b63fd2021-03-16 11:57:42 -0700432
433 echo "+++ Running the libc++ and libc++abi tests"
434 ${NINJA} -C "${BUILD_DIR}" check-runtimes
435
436 echo "--- Installing libc++ and libc++abi to a fake location"
437 ${NINJA} -C "${BUILD_DIR}" install-cxx install-cxxabi
438;;
Louis Dionne435c36b2020-10-23 16:27:41 -0400439legacy-standalone)
440 export CC=clang
441 export CXX=clang++
442
Louis Dionnebb7be752020-11-05 19:02:32 -0500443 clean
444
Louis Dionne435c36b2020-10-23 16:27:41 -0400445 echo "--- Generating CMake"
Louis Dionne6f96e992021-05-07 13:14:57 -0400446 ${CMAKE} \
447 -S "${MONOREPO_ROOT}/libcxx" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400448 -B "${BUILD_DIR}/libcxx" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500449 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400450 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
451 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
452 -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
453 -DLIBCXX_CXX_ABI=libcxxabi \
454 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${MONOREPO_ROOT}/libcxxabi/include" \
455 -DLIBCXX_CXX_ABI_LIBRARY_PATH="${BUILD_DIR}/libcxxabi/lib"
456
Louis Dionne6f96e992021-05-07 13:14:57 -0400457 ${CMAKE} \
458 -S "${MONOREPO_ROOT}/libcxxabi" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400459 -B "${BUILD_DIR}/libcxxabi" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500460 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400461 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
462 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
463 -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
464 -DLIBCXXABI_LIBCXX_PATH="${MONOREPO_ROOT}/libcxx" \
Louis Dionne94870d82020-06-26 12:08:59 -0400465 -DLIBCXXABI_LIBCXX_INCLUDES="${BUILD_DIR}/libcxx/include/c++/v1" \
Louis Dionne5be8b092020-10-26 14:25:49 -0400466 -DLIBCXXABI_LIBCXX_LIBRARY_PATH="${BUILD_DIR}/libcxx/lib"
Louis Dionne435c36b2020-10-23 16:27:41 -0400467
Louis Dionne94870d82020-06-26 12:08:59 -0400468 echo "+++ Generating libc++ headers"
469 ${NINJA} -vC "${BUILD_DIR}/libcxx" generate-cxx-headers
470
Louis Dionne435c36b2020-10-23 16:27:41 -0400471 echo "+++ Building libc++abi"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700472 ${NINJA} -vC "${BUILD_DIR}/libcxxabi" cxxabi
Louis Dionne435c36b2020-10-23 16:27:41 -0400473
474 echo "+++ Building libc++"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700475 ${NINJA} -vC "${BUILD_DIR}/libcxx" cxx
Louis Dionne435c36b2020-10-23 16:27:41 -0400476
477 echo "+++ Running the libc++ tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700478 ${NINJA} -vC "${BUILD_DIR}/libcxx" check-cxx
Louis Dionne435c36b2020-10-23 16:27:41 -0400479
480 echo "+++ Running the libc++abi tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700481 ${NINJA} -vC "${BUILD_DIR}/libcxxabi" check-cxxabi
Louis Dionne435c36b2020-10-23 16:27:41 -0400482;;
David Spickett77471a12021-02-08 10:43:21 +0000483aarch64)
484 clean
485 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake"
486 check-cxx-cxxabi
487;;
488aarch64-noexceptions)
489 clean
490 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake" \
491 -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
492 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
493 check-cxx-cxxabi
494;;
David Spicketta16b8862021-03-02 15:07:19 +0000495# Aka Armv8 32 bit
496armv8)
497 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000498 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Arm.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000499 check-cxx-cxxabi
500;;
501armv8-noexceptions)
502 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000503 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Thumb-noexceptions.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000504 check-cxx-cxxabi
505;;
506# Armv7 32 bit. One building Arm only one Thumb only code.
507armv7)
508 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000509 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Arm.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000510 check-cxx-cxxabi
511;;
512armv7-noexceptions)
513 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000514 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000515 check-cxx-cxxabi
516;;
Martin Storsjö47cd3462021-04-06 00:17:30 +0300517windows-dll)
Martin Storsjö2ffae012021-03-17 12:10:42 +0200518 clean
Martin Storsjö2ffae012021-03-17 12:10:42 +0200519 # TODO: Currently, building with the experimental library breaks running
520 # tests (the test linking look for the c++experimental library with the
521 # wrong name, and the statically linked c++experimental can't be linked
522 # correctly when libc++ visibility attributes indicate dllimport linkage
523 # anyway), thus just disable the experimental library. Remove this
524 # setting when cmake and the test driver does the right thing automatically.
Martin Storsjö47cd3462021-04-06 00:17:30 +0300525 generate-cmake-libcxx-win -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF
526 echo "+++ Running the libc++ tests"
527 ${NINJA} -vC "${BUILD_DIR}" check-cxx
528;;
529windows-static)
530 clean
531 generate-cmake-libcxx-win -DLIBCXX_ENABLE_SHARED=OFF
Martin Storsjö2ffae012021-03-17 12:10:42 +0200532 echo "+++ Running the libc++ tests"
533 ${NINJA} -vC "${BUILD_DIR}" check-cxx
534;;
Louis Dionnece556052020-09-23 09:20:03 -0400535*)
536 echo "${BUILDER} is not a known configuration"
537 exit 1
538;;
539esac