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