blob: d79bfebfa28dcba8e73dcdf3e1f6e236db24349d [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
Louis Dionnece556052020-09-23 09:20:03 -040012
Louis Dionnebb7be752020-11-05 19:02:32 -050013PROGNAME="$(basename "${0}")"
14
15function usage() {
16cat <<EOF
17Usage:
18${PROGNAME} [options] <BUILDER>
19
20[-h|--help] Display this help and exit.
21
22--llvm-root <DIR> Path to the root of the LLVM monorepo. By default, we try
23 to figure it out based on the current working directory.
24
Louis Dionne04bf1032020-11-05 19:09:03 -050025--build-dir <DIR> The directory to use for building the library. By default,
26 this is '<llvm-root>/build/<builder>'.
27
Louis Dionnebb7be752020-11-05 19:02:32 -050028--osx-roots <DIR> Path to pre-downloaded macOS dylibs. By default, we download
29 them from Green Dragon. This is only relevant at all when
30 running back-deployment testing if one wants to override
31 the old dylibs we use to run the tests with different ones.
32EOF
33}
34
35while [[ $# -gt 0 ]]; do
36 case ${1} in
37 -h|--help)
38 usage
39 exit 0
40 ;;
41 --llvm-root)
42 MONOREPO_ROOT="${2}"
43 shift; shift
44 ;;
Louis Dionne04bf1032020-11-05 19:09:03 -050045 --build-dir)
46 BUILD_DIR="${2}"
47 shift; shift
48 ;;
Louis Dionnebb7be752020-11-05 19:02:32 -050049 --osx-roots)
50 OSX_ROOTS="${2}"
51 shift; shift
52 ;;
53 *)
54 BUILDER="${1}"
55 shift
56 ;;
57 esac
58done
59
60MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
Louis Dionne04bf1032020-11-05 19:09:03 -050061BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
Louis Dionne485f4c02021-01-07 17:37:09 -050062INSTALL_DIR="${BUILD_DIR}/install"
Louis Dionnece556052020-09-23 09:20:03 -040063
Louis Dionne7a8d5362021-03-04 16:01:36 -050064# On macOS, fall back to using the Ninja provided with Xcode if no other Ninja can be found.
65if which ninja &>/dev/null; then
66 NINJA="$(which ninja)"
67else
68 NINJA="$(xcrun --find ninja)"
69fi
70
Louis Dionnebb7be752020-11-05 19:02:32 -050071function clean() {
72 rm -rf "${BUILD_DIR}"
73}
74
Louis Dionnef9c11b02020-10-23 10:02:14 -040075function generate-cmake() {
76 echo "--- Generating CMake"
Louis Dionnef9c11b02020-10-23 10:02:14 -040077 cmake -S "${MONOREPO_ROOT}/llvm" \
78 -B "${BUILD_DIR}" \
Louis Dionne7a8d5362021-03-04 16:01:36 -050079 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionnef9c11b02020-10-23 10:02:14 -040080 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
81 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
82 -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
83 -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
84 -DLIBCXX_CXX_ABI=libcxxabi \
Louis Dionne662aaa22020-11-05 10:47:06 -050085 "${@}"
86}
87
Louis Dionnef9c11b02020-10-23 10:02:14 -040088function check-cxx-cxxabi() {
Louis Dionneeacce542021-03-24 09:50:59 -040089 echo "--- Installing libc++ and libc++abi to a fake location"
90 ${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi
91
Louis Dionnef9c11b02020-10-23 10:02:14 -040092 echo "+++ Running the libc++ tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -070093 ${NINJA} -vC "${BUILD_DIR}" check-cxx
Louis Dionnef9c11b02020-10-23 10:02:14 -040094
95 echo "+++ Running the libc++abi tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -070096 ${NINJA} -vC "${BUILD_DIR}" check-cxxabi
Louis Dionnef9c11b02020-10-23 10:02:14 -040097}
98
Louis Dionnedfbd00e2020-11-26 15:00:42 -050099# TODO: The goal is to test this against all configurations. We should also move
100# this to the Lit test suite instead of being a separate CMake target.
101function check-abi-list() {
102 echo "+++ Running the libc++ ABI list test"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700103 ${NINJA} -vC "${BUILD_DIR}" check-cxx-abilist || (
Marek Kurdej718b62c2020-12-02 08:57:02 +0100104 echo "+++ Generating the libc++ ABI list after failed check"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700105 ${NINJA} -vC "${BUILD_DIR}" generate-cxx-abilist
Marek Kurdej718b62c2020-12-02 08:57:02 +0100106 false
107 )
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500108}
109
Louis Dionnef9c11b02020-10-23 10:02:14 -0400110function check-cxx-benchmarks() {
111 echo "--- Running the benchmarks"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700112 ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks
Louis Dionnef9c11b02020-10-23 10:02:14 -0400113}
Louis Dionnece556052020-09-23 09:20:03 -0400114
Louis Dionne6bd3e652021-04-01 13:40:04 -0400115# Print the version of a few tools to aid diagnostics in some cases
116cmake --version
117${NINJA} --version
118
Louis Dionnece556052020-09-23 09:20:03 -0400119case "${BUILDER}" in
Marek Kurdej05449362021-02-04 21:13:22 +0100120check-format)
121 clean
122 echo "+++ Checking formatting"
123 # We need to set --extensions so that clang-format checks extensionless files.
124 mkdir -p ${BUILD_DIR}
125 git-clang-format \
126 --binary /usr/bin/clang-format --diff \
127 --extensions ',h,hh,hpp,hxx,c,cc,cxx,cpp' HEAD~1 \
128 -- \
129 libcxx/{benchmarks,include,src,test} \
130 libcxxabi/{fuzz,include,src,test} \
131 | tee ${BUILD_DIR}/clang-format.patch
132 # Check if the diff is empty, fail otherwise.
133 ! grep -q '^--- a' ${BUILD_DIR}/clang-format.patch
134;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400135generic-cxx03)
Louis Dionnece556052020-09-23 09:20:03 -0400136 export CC=clang
137 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500138 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400139 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake"
140 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500141 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400142;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400143generic-cxx11)
Louis Dionnece556052020-09-23 09:20:03 -0400144 export CC=clang
145 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500146 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400147 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake"
148 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500149 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400150;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400151generic-cxx14)
Louis Dionnece556052020-09-23 09:20:03 -0400152 export CC=clang
153 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500154 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400155 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx14.cmake"
156 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500157 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400158;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400159generic-cxx17)
Louis Dionnece556052020-09-23 09:20:03 -0400160 export CC=clang
161 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500162 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400163 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx17.cmake"
164 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500165 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400166;;
Marek Kurdej24b4c512021-01-07 12:29:04 +0100167generic-cxx20)
Louis Dionnece556052020-09-23 09:20:03 -0400168 export CC=clang
169 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500170 clean
Marek Kurdej24b4c512021-01-07 12:29:04 +0100171 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx20.cmake"
Louis Dionnef9c11b02020-10-23 10:02:14 -0400172 check-cxx-cxxabi
Louis Dionnedfbd00e2020-11-26 15:00:42 -0500173 check-abi-list
Louis Dionnece556052020-09-23 09:20:03 -0400174;;
Marek Kurdej758067c2021-01-08 18:40:42 +0100175generic-cxx2b)
176 export CC=clang-tot
177 export CXX=clang++-tot
178 clean
179 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx2b.cmake"
180 check-cxx-cxxabi
181 check-abi-list
182;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400183generic-noexceptions)
Louis Dionnece556052020-09-23 09:20:03 -0400184 export CC=clang
185 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500186 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400187 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-noexceptions.cmake"
188 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400189;;
Louis Dionneeacce542021-03-24 09:50:59 -0400190generic-static)
191 export CC=clang
192 export CXX=clang++
193 clean
194 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-static.cmake"
195 check-cxx-cxxabi
196;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400197generic-32bit)
Louis Dionnece556052020-09-23 09:20:03 -0400198 export CC=clang
199 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500200 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400201 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-32bits.cmake"
202 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400203;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400204generic-gcc)
Louis Dionnece556052020-09-23 09:20:03 -0400205 export CC=gcc
206 export CXX=g++
Louis Dionnebb7be752020-11-05 19:02:32 -0500207 clean
Louis Dionneeacce542021-03-24 09:50:59 -0400208 generate-cmake
Louis Dionnef9c11b02020-10-23 10:02:14 -0400209 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400210;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400211generic-asan)
Louis Dionnece556052020-09-23 09:20:03 -0400212 export CC=clang
213 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500214 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400215 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-asan.cmake"
216 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400217;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400218generic-msan)
Louis Dionnece556052020-09-23 09:20:03 -0400219 export CC=clang
220 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500221 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400222 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-msan.cmake"
223 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400224;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400225generic-tsan)
Louis Dionnece556052020-09-23 09:20:03 -0400226 export CC=clang
227 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500228 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400229 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-tsan.cmake"
230 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400231;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400232generic-ubsan)
Louis Dionnece556052020-09-23 09:20:03 -0400233 export CC=clang
234 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500235 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400236 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-ubsan.cmake"
237 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400238;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400239generic-with_llvm_unwinder)
Louis Dionnece556052020-09-23 09:20:03 -0400240 export CC=clang
241 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500242 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400243 generate-cmake -DLIBCXXABI_USE_LLVM_UNWINDER=ON
244 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400245;;
Louis Dionne6f8038c2020-10-01 13:55:39 -0400246generic-singlethreaded)
Louis Dionnece556052020-09-23 09:20:03 -0400247 export CC=clang
248 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500249 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400250 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-singlethreaded.cmake"
251 check-cxx-cxxabi
Louis Dionnece556052020-09-23 09:20:03 -0400252;;
Louis Dionneabcfdbc2021-03-23 14:09:52 -0400253generic-no-debug)
Louis Dionne4396f9b2020-10-06 16:46:58 -0400254 export CC=clang
255 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500256 clean
Louis Dionneabcfdbc2021-03-23 14:09:52 -0400257 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-debug.cmake"
Louis Dionnef9c11b02020-10-23 10:02:14 -0400258 check-cxx-cxxabi
Louis Dionne4396f9b2020-10-06 16:46:58 -0400259;;
Louis Dionnedb84e122021-01-18 12:18:18 -0500260generic-no-filesystem)
261 export CC=clang
262 export CXX=clang++
263 clean
264 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-filesystem.cmake"
265 check-cxx-cxxabi
266;;
Louis Dionne3777e682020-10-15 10:32:09 -0400267generic-no-random_device)
268 export CC=clang
269 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500270 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400271 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake"
272 check-cxx-cxxabi
Louis Dionne3777e682020-10-15 10:32:09 -0400273;;
Louis Dionne8d053eb2020-10-09 15:31:05 -0400274generic-no-localization)
275 export CC=clang
276 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500277 clean
Louis Dionne8d053eb2020-10-09 15:31:05 -0400278 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake"
279 check-cxx-cxxabi
280;;
Louis Dionne89d0eb22020-10-01 08:55:40 -0400281x86_64-apple-system)
282 export CC=clang
283 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500284 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400285 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake"
286 check-cxx-cxxabi
Louis Dionne89d0eb22020-10-01 08:55:40 -0400287;;
288x86_64-apple-system-noexceptions)
289 export CC=clang
290 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500291 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400292 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
293 -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
294 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
295 check-cxx-cxxabi
296;;
Louis Dionne662aaa22020-11-05 10:47:06 -0500297x86_64-apple-system-backdeployment-*)
Louis Dionnebb7be752020-11-05 19:02:32 -0500298 clean
Louis Dionne662aaa22020-11-05 10:47:06 -0500299
Louis Dionnebb7be752020-11-05 19:02:32 -0500300 if [[ "${OSX_ROOTS}" == "" ]]; then
301 echo "--- Downloading previous macOS dylibs"
Louis Dionnec7675352021-03-25 14:14:20 -0400302 PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/liu4fmc53qzlfly/libcxx-roots.tar.gz"
Louis Dionnebb7be752020-11-05 19:02:32 -0500303 OSX_ROOTS="${BUILD_DIR}/macos-roots"
304 mkdir -p "${OSX_ROOTS}"
305 curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
306 fi
Louis Dionne662aaa22020-11-05 10:47:06 -0500307
Louis Dionnebb7be752020-11-05 19:02:32 -0500308 DEPLOYMENT_TARGET="${BUILDER#x86_64-apple-system-backdeployment-}"
Louis Dionne84ad13b2020-07-08 16:38:54 -0400309
310 # TODO: On Apple platforms, we never produce libc++abi.1.dylib, always libc++abi.dylib.
311 # Fix that in the build so that the tests stop searching for @rpath/libc++abi.1.dylib.
312 cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
313 "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
314
Louis Dionnebb7be752020-11-05 19:02:32 -0500315 PARAMS="target_triple=x86_64-apple-macosx${DEPLOYMENT_TARGET}"
316 PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
Louis Dionne84ad13b2020-07-08 16:38:54 -0400317 PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
Louis Dionnebb7be752020-11-05 19:02:32 -0500318 PARAMS+=";use_system_cxx_lib=True"
Louis Dionnebb7be752020-11-05 19:02:32 -0500319
320 export CC=clang
321 export CXX=clang++
322 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
323 -DLIBCXX_TEST_PARAMS="${PARAMS}" \
324 -DLIBCXXABI_TEST_PARAMS="${PARAMS}"
325
Louis Dionne84ad13b2020-07-08 16:38:54 -0400326 check-cxx-cxxabi
Louis Dionne662aaa22020-11-05 10:47:06 -0500327;;
Louis Dionnef9c11b02020-10-23 10:02:14 -0400328benchmarks)
329 export CC=clang
330 export CXX=clang++
Louis Dionnebb7be752020-11-05 19:02:32 -0500331 clean
Louis Dionnef9c11b02020-10-23 10:02:14 -0400332 generate-cmake
333 check-cxx-benchmarks
Louis Dionne89d0eb22020-10-01 08:55:40 -0400334;;
Louis Dionneaa4e44f2020-11-05 14:34:29 -0500335documentation)
Louis Dionnebb7be752020-11-05 19:02:32 -0500336 export CC=clang
337 export CXX=clang++
338 clean
339 generate-cmake -DLLVM_ENABLE_SPHINX=ON
340
341 echo "+++ Generating documentation"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700342 ${NINJA} -vC "${BUILD_DIR}" docs-libcxx-html
Louis Dionneaa4e44f2020-11-05 14:34:29 -0500343;;
Louis Dionne435c36b2020-10-23 16:27:41 -0400344unified-standalone)
345 export CC=clang
346 export CXX=clang++
347
Louis Dionnebb7be752020-11-05 19:02:32 -0500348 clean
349
Louis Dionne435c36b2020-10-23 16:27:41 -0400350 echo "--- Generating CMake"
Louis Dionne435c36b2020-10-23 16:27:41 -0400351 cmake -S "${MONOREPO_ROOT}/libcxx/utils/ci/runtimes" \
352 -B "${BUILD_DIR}" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500353 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400354 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
355 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
356 -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind"
357
358 check-cxx-cxxabi
359;;
Louis Dionne61b63fd2021-03-16 11:57:42 -0700360runtimes-build)
361 export CC=clang
362 export CXX=clang++
363
364 clean
365
366 echo "--- Generating CMake"
367 cmake -S "${MONOREPO_ROOT}/llvm" \
368 -B "${BUILD_DIR}" \
369 -GNinja \
370 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
371 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
372 -DLLVM_ENABLE_PROJECTS="clang" \
373 -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
374 -DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu"
375
376 echo "+++ Running the libc++ and libc++abi tests"
377 ${NINJA} -C "${BUILD_DIR}" check-runtimes
378
379 echo "--- Installing libc++ and libc++abi to a fake location"
380 ${NINJA} -C "${BUILD_DIR}" install-cxx install-cxxabi
381;;
Louis Dionne435c36b2020-10-23 16:27:41 -0400382legacy-standalone)
383 export CC=clang
384 export CXX=clang++
385
Louis Dionnebb7be752020-11-05 19:02:32 -0500386 clean
387
Louis Dionne435c36b2020-10-23 16:27:41 -0400388 echo "--- Generating CMake"
Louis Dionne435c36b2020-10-23 16:27:41 -0400389 cmake -S "${MONOREPO_ROOT}/libcxx" \
390 -B "${BUILD_DIR}/libcxx" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500391 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400392 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
393 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
394 -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
395 -DLIBCXX_CXX_ABI=libcxxabi \
396 -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${MONOREPO_ROOT}/libcxxabi/include" \
397 -DLIBCXX_CXX_ABI_LIBRARY_PATH="${BUILD_DIR}/libcxxabi/lib"
398
399 cmake -S "${MONOREPO_ROOT}/libcxxabi" \
400 -B "${BUILD_DIR}/libcxxabi" \
Louis Dionne7a8d5362021-03-04 16:01:36 -0500401 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
Louis Dionne435c36b2020-10-23 16:27:41 -0400402 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
403 -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
404 -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
405 -DLIBCXXABI_LIBCXX_PATH="${MONOREPO_ROOT}/libcxx" \
Louis Dionne94870d82020-06-26 12:08:59 -0400406 -DLIBCXXABI_LIBCXX_INCLUDES="${BUILD_DIR}/libcxx/include/c++/v1" \
Louis Dionne5be8b092020-10-26 14:25:49 -0400407 -DLIBCXXABI_LIBCXX_LIBRARY_PATH="${BUILD_DIR}/libcxx/lib"
Louis Dionne435c36b2020-10-23 16:27:41 -0400408
Louis Dionne94870d82020-06-26 12:08:59 -0400409 echo "+++ Generating libc++ headers"
410 ${NINJA} -vC "${BUILD_DIR}/libcxx" generate-cxx-headers
411
Louis Dionne435c36b2020-10-23 16:27:41 -0400412 echo "+++ Building libc++abi"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700413 ${NINJA} -vC "${BUILD_DIR}/libcxxabi" cxxabi
Louis Dionne435c36b2020-10-23 16:27:41 -0400414
415 echo "+++ Building libc++"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700416 ${NINJA} -vC "${BUILD_DIR}/libcxx" cxx
Louis Dionne435c36b2020-10-23 16:27:41 -0400417
418 echo "+++ Running the libc++ tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700419 ${NINJA} -vC "${BUILD_DIR}/libcxx" check-cxx
Louis Dionne435c36b2020-10-23 16:27:41 -0400420
421 echo "+++ Running the libc++abi tests"
Louis Dionne1fcb0412021-03-19 16:26:15 -0700422 ${NINJA} -vC "${BUILD_DIR}/libcxxabi" check-cxxabi
Louis Dionne435c36b2020-10-23 16:27:41 -0400423;;
David Spickett77471a12021-02-08 10:43:21 +0000424aarch64)
425 clean
426 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake"
427 check-cxx-cxxabi
428;;
429aarch64-noexceptions)
430 clean
431 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake" \
432 -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
433 -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
434 check-cxx-cxxabi
435;;
David Spicketta16b8862021-03-02 15:07:19 +0000436# Aka Armv8 32 bit
437armv8)
438 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000439 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Arm.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000440 check-cxx-cxxabi
441;;
442armv8-noexceptions)
443 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000444 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Thumb-noexceptions.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000445 check-cxx-cxxabi
446;;
447# Armv7 32 bit. One building Arm only one Thumb only code.
448armv7)
449 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000450 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Arm.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000451 check-cxx-cxxabi
452;;
453armv7-noexceptions)
454 clean
David Spickett7cc0a7f2021-03-17 11:09:41 +0000455 generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
David Spicketta16b8862021-03-02 15:07:19 +0000456 check-cxx-cxxabi
457;;
Martin Storsjö2ffae012021-03-17 12:10:42 +0200458generic-win)
459 clean
460 # TODO: The CI runner doesn't have bash in the path currently, and it's
461 # needed for running tests. Once it's available out of the box, remove this.
462 export PATH="$PATH:/c/Program Files/Git/usr/bin"
463
464 # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
465 # builtins helpers for int128 division. See
466 # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
467 # intent for handling the issue. In the meantime, define
468 # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
469 # when building tests) to allow enabling filesystem for running tests,
470 # even if it uses a non-permanent ABI.
471
472 # TODO: The CI runner currently uses Clang 11, which doesn't implicitly
473 # link in oldnames.lib (which is needed for some tests) when compiling
474 # with the plain "clang" driver, as the tests do (as opposed to using
475 # the "clang-cl" driver for compiling). When the CI runner runs
476 # Clang 12, the "-loldnames" option can be dropped.
477
478 # TODO: Currently, building with the experimental library breaks running
479 # tests (the test linking look for the c++experimental library with the
480 # wrong name, and the statically linked c++experimental can't be linked
481 # correctly when libc++ visibility attributes indicate dllimport linkage
482 # anyway), thus just disable the experimental library. Remove this
483 # setting when cmake and the test driver does the right thing automatically.
484
485 echo "--- Generating CMake"
486 cmake -S "${MONOREPO_ROOT}/libcxx" \
487 -B "${BUILD_DIR}" \
488 -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
489 -DCMAKE_BUILD_TYPE=RelWithDebInfo \
490 -DCMAKE_C_COMPILER=clang-cl \
491 -DCMAKE_CXX_COMPILER=clang-cl \
492 -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
493 -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=NO \
494 -DLIBCXX_ENABLE_FILESYSTEM=YES \
495 -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
496 -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
497 -DLIBCXX_TEST_LINKER_FLAGS="-loldnames"
498 echo "+++ Running the libc++ tests"
499 ${NINJA} -vC "${BUILD_DIR}" check-cxx
500;;
Louis Dionnece556052020-09-23 09:20:03 -0400501*)
502 echo "${BUILDER} is not a known configuration"
503 exit 1
504;;
505esac