Home | History | Annotate | Line # | Download | only in ci
      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