Home | History | Annotate | Line # | Download | only in ci
run-buildbot revision 1.1.1.1.2.2
      1  1.1.1.1.2.2  cjep #!/usr/bin/env bash
      2  1.1.1.1.2.2  cjep #===----------------------------------------------------------------------===##
      3  1.1.1.1.2.2  cjep #
      4  1.1.1.1.2.2  cjep # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      5  1.1.1.1.2.2  cjep # See https://llvm.org/LICENSE.txt for license information.
      6  1.1.1.1.2.2  cjep # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      7  1.1.1.1.2.2  cjep #
      8  1.1.1.1.2.2  cjep #===----------------------------------------------------------------------===##
      9  1.1.1.1.2.2  cjep 
     10  1.1.1.1.2.2  cjep set -ex
     11  1.1.1.1.2.2  cjep set -o pipefail
     12  1.1.1.1.2.2  cjep unset LANG
     13  1.1.1.1.2.2  cjep unset LC_ALL
     14  1.1.1.1.2.2  cjep unset LC_COLLATE
     15  1.1.1.1.2.2  cjep 
     16  1.1.1.1.2.2  cjep PROGNAME="$(basename "${0}")"
     17  1.1.1.1.2.2  cjep 
     18  1.1.1.1.2.2  cjep function usage() {
     19  1.1.1.1.2.2  cjep cat <<EOF
     20  1.1.1.1.2.2  cjep Usage:
     21  1.1.1.1.2.2  cjep ${PROGNAME} [options] <BUILDER>
     22  1.1.1.1.2.2  cjep 
     23  1.1.1.1.2.2  cjep [-h|--help]         Display this help and exit.
     24  1.1.1.1.2.2  cjep 
     25  1.1.1.1.2.2  cjep --llvm-root <DIR>   Path to the root of the LLVM monorepo. By default, we try
     26  1.1.1.1.2.2  cjep                     to figure it out based on the current working directory.
     27  1.1.1.1.2.2  cjep 
     28  1.1.1.1.2.2  cjep --build-dir <DIR>   The directory to use for building the library. By default,
     29  1.1.1.1.2.2  cjep                     this is '<llvm-root>/build/<builder>'.
     30  1.1.1.1.2.2  cjep 
     31  1.1.1.1.2.2  cjep --osx-roots <DIR>   Path to pre-downloaded macOS dylibs. By default, we download
     32  1.1.1.1.2.2  cjep                     them from Green Dragon. This is only relevant at all when
     33  1.1.1.1.2.2  cjep                     running back-deployment testing if one wants to override
     34  1.1.1.1.2.2  cjep                     the old dylibs we use to run the tests with different ones.
     35  1.1.1.1.2.2  cjep EOF
     36  1.1.1.1.2.2  cjep }
     37  1.1.1.1.2.2  cjep 
     38  1.1.1.1.2.2  cjep while [[ $# -gt 0 ]]; do
     39  1.1.1.1.2.2  cjep     case ${1} in
     40  1.1.1.1.2.2  cjep         -h|--help)
     41  1.1.1.1.2.2  cjep             usage
     42  1.1.1.1.2.2  cjep             exit 0
     43  1.1.1.1.2.2  cjep             ;;
     44  1.1.1.1.2.2  cjep         --llvm-root)
     45  1.1.1.1.2.2  cjep             MONOREPO_ROOT="${2}"
     46  1.1.1.1.2.2  cjep             shift; shift
     47  1.1.1.1.2.2  cjep             ;;
     48  1.1.1.1.2.2  cjep         --build-dir)
     49  1.1.1.1.2.2  cjep             BUILD_DIR="${2}"
     50  1.1.1.1.2.2  cjep             shift; shift
     51  1.1.1.1.2.2  cjep             ;;
     52  1.1.1.1.2.2  cjep         --osx-roots)
     53  1.1.1.1.2.2  cjep             OSX_ROOTS="${2}"
     54  1.1.1.1.2.2  cjep             shift; shift
     55  1.1.1.1.2.2  cjep             ;;
     56  1.1.1.1.2.2  cjep         *)
     57  1.1.1.1.2.2  cjep             BUILDER="${1}"
     58  1.1.1.1.2.2  cjep             shift
     59  1.1.1.1.2.2  cjep             ;;
     60  1.1.1.1.2.2  cjep     esac
     61  1.1.1.1.2.2  cjep done
     62  1.1.1.1.2.2  cjep 
     63  1.1.1.1.2.2  cjep MONOREPO_ROOT="${MONOREPO_ROOT:="$(git rev-parse --show-toplevel)"}"
     64  1.1.1.1.2.2  cjep BUILD_DIR="${BUILD_DIR:=${MONOREPO_ROOT}/build/${BUILDER}}"
     65  1.1.1.1.2.2  cjep INSTALL_DIR="${BUILD_DIR}/install"
     66  1.1.1.1.2.2  cjep 
     67  1.1.1.1.2.2  cjep # If we can find Ninja/CMake provided by Xcode, use those since we know their
     68  1.1.1.1.2.2  cjep # version will generally work with the Clang shipped in Xcode (e.g. if Clang
     69  1.1.1.1.2.2  cjep # knows about -std=c++20, the CMake bundled in Xcode will probably know about
     70  1.1.1.1.2.2  cjep # that flag too).
     71  1.1.1.1.2.2  cjep if xcrun --find ninja &>/dev/null; then NINJA="$(xcrun --find ninja)"; else NINJA="ninja"; fi
     72  1.1.1.1.2.2  cjep if xcrun --find cmake &>/dev/null; then CMAKE="$(xcrun --find cmake)"; else CMAKE="cmake"; fi
     73  1.1.1.1.2.2  cjep 
     74  1.1.1.1.2.2  cjep function clean() {
     75  1.1.1.1.2.2  cjep     rm -rf "${BUILD_DIR}"
     76  1.1.1.1.2.2  cjep }
     77  1.1.1.1.2.2  cjep 
     78  1.1.1.1.2.2  cjep function generate-cmake-base() {
     79  1.1.1.1.2.2  cjep     echo "--- Generating CMake"
     80  1.1.1.1.2.2  cjep     ${CMAKE} \
     81  1.1.1.1.2.2  cjep           -B "${BUILD_DIR}" \
     82  1.1.1.1.2.2  cjep           -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
     83  1.1.1.1.2.2  cjep           -DCMAKE_BUILD_TYPE=RelWithDebInfo \
     84  1.1.1.1.2.2  cjep           -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
     85  1.1.1.1.2.2  cjep           -DLLVM_LIT_ARGS="-sv --show-unsupported --xunit-xml-output test-results.xml" \
     86  1.1.1.1.2.2  cjep           "${@}"
     87  1.1.1.1.2.2  cjep }
     88  1.1.1.1.2.2  cjep 
     89  1.1.1.1.2.2  cjep function generate-cmake() {
     90  1.1.1.1.2.2  cjep     generate-cmake-base \
     91  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/llvm" \
     92  1.1.1.1.2.2  cjep           -DLLVM_ENABLE_PROJECTS="libcxx;libunwind;libcxxabi" \
     93  1.1.1.1.2.2  cjep           -DLIBCXX_CXX_ABI=libcxxabi \
     94  1.1.1.1.2.2  cjep           "${@}"
     95  1.1.1.1.2.2  cjep }
     96  1.1.1.1.2.2  cjep 
     97  1.1.1.1.2.2  cjep function generate-cmake-libcxx-win() {
     98  1.1.1.1.2.2  cjep     # TODO: Clang-cl in MSVC configurations don't have access to compiler_rt
     99  1.1.1.1.2.2  cjep     # builtins helpers for int128 division. See
    100  1.1.1.1.2.2  cjep     # https://reviews.llvm.org/D91139#2429595 for a comment about longterm
    101  1.1.1.1.2.2  cjep     # intent for handling the issue. In the meantime, define
    102  1.1.1.1.2.2  cjep     # -D_LIBCPP_HAS_NO_INT128 (both when building the library itself and
    103  1.1.1.1.2.2  cjep     # when building tests) to allow enabling filesystem for running tests,
    104  1.1.1.1.2.2  cjep     # even if it uses a non-permanent ABI.
    105  1.1.1.1.2.2  cjep 
    106  1.1.1.1.2.2  cjep     generate-cmake-base \
    107  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/libcxx" \
    108  1.1.1.1.2.2  cjep           -DCMAKE_C_COMPILER=clang-cl \
    109  1.1.1.1.2.2  cjep           -DCMAKE_CXX_COMPILER=clang-cl \
    110  1.1.1.1.2.2  cjep           -DLIBCXX_ENABLE_FILESYSTEM=YES \
    111  1.1.1.1.2.2  cjep           -DCMAKE_CXX_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
    112  1.1.1.1.2.2  cjep           -DLIBCXX_TEST_COMPILER_FLAGS="-D_LIBCPP_HAS_NO_INT128" \
    113  1.1.1.1.2.2  cjep           "${@}"
    114  1.1.1.1.2.2  cjep }
    115  1.1.1.1.2.2  cjep 
    116  1.1.1.1.2.2  cjep function check-cxx-cxxabi() {
    117  1.1.1.1.2.2  cjep     echo "--- Installing libc++ and libc++abi to a fake location"
    118  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" install-cxx install-cxxabi
    119  1.1.1.1.2.2  cjep 
    120  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ tests"
    121  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxx
    122  1.1.1.1.2.2  cjep 
    123  1.1.1.1.2.2  cjep     echo "+++ Running the libc++abi tests"
    124  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxxabi
    125  1.1.1.1.2.2  cjep }
    126  1.1.1.1.2.2  cjep 
    127  1.1.1.1.2.2  cjep # TODO: The goal is to test this against all configurations. We should also move
    128  1.1.1.1.2.2  cjep #       this to the Lit test suite instead of being a separate CMake target.
    129  1.1.1.1.2.2  cjep function check-abi-list() {
    130  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ ABI list test"
    131  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxx-abilist || (
    132  1.1.1.1.2.2  cjep         echo "+++ Generating the libc++ ABI list after failed check"
    133  1.1.1.1.2.2  cjep         ${NINJA} -vC "${BUILD_DIR}" generate-cxx-abilist
    134  1.1.1.1.2.2  cjep         false
    135  1.1.1.1.2.2  cjep     )
    136  1.1.1.1.2.2  cjep }
    137  1.1.1.1.2.2  cjep 
    138  1.1.1.1.2.2  cjep function check-cxx-benchmarks() {
    139  1.1.1.1.2.2  cjep     echo "--- Running the benchmarks"
    140  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks
    141  1.1.1.1.2.2  cjep }
    142  1.1.1.1.2.2  cjep 
    143  1.1.1.1.2.2  cjep # Print the version of a few tools to aid diagnostics in some cases
    144  1.1.1.1.2.2  cjep ${CMAKE} --version
    145  1.1.1.1.2.2  cjep ${NINJA} --version
    146  1.1.1.1.2.2  cjep 
    147  1.1.1.1.2.2  cjep case "${BUILDER}" in
    148  1.1.1.1.2.2  cjep check-format)
    149  1.1.1.1.2.2  cjep     clean
    150  1.1.1.1.2.2  cjep     echo "+++ Checking formatting"
    151  1.1.1.1.2.2  cjep     # We need to set --extensions so that clang-format checks extensionless files.
    152  1.1.1.1.2.2  cjep     mkdir -p ${BUILD_DIR}
    153  1.1.1.1.2.2  cjep     git-clang-format \
    154  1.1.1.1.2.2  cjep         --binary /usr/bin/clang-format --diff \
    155  1.1.1.1.2.2  cjep         --extensions ',h,hh,hpp,hxx,c,cc,cxx,cpp' HEAD~1 \
    156  1.1.1.1.2.2  cjep         -- \
    157  1.1.1.1.2.2  cjep             libcxx/{benchmarks,include,src,test} \
    158  1.1.1.1.2.2  cjep             libcxxabi/{fuzz,include,src,test} \
    159  1.1.1.1.2.2  cjep         | tee ${BUILD_DIR}/clang-format.patch
    160  1.1.1.1.2.2  cjep     # Check if the diff is empty, fail otherwise.
    161  1.1.1.1.2.2  cjep     ! grep -q '^--- a' ${BUILD_DIR}/clang-format.patch
    162  1.1.1.1.2.2  cjep ;;
    163  1.1.1.1.2.2  cjep check-generated-output)
    164  1.1.1.1.2.2  cjep     # `! foo` doesn't work properly with `set -e`, use `! foo || false` instead.
    165  1.1.1.1.2.2  cjep     # https://stackoverflow.com/questions/57681955/set-e-does-not-respect-logical-not
    166  1.1.1.1.2.2  cjep     clean
    167  1.1.1.1.2.2  cjep     echo "+++ Checking the output of the generator scripts"
    168  1.1.1.1.2.2  cjep     mkdir -p ${BUILD_DIR}
    169  1.1.1.1.2.2  cjep     # Reject patches that don't update the generated output correctly.
    170  1.1.1.1.2.2  cjep     python3 libcxx/utils/generate_feature_test_macro_components.py
    171  1.1.1.1.2.2  cjep     python3 libcxx/utils/generate_header_inclusion_tests.py
    172  1.1.1.1.2.2  cjep     python3 libcxx/utils/generate_header_tests.py
    173  1.1.1.1.2.2  cjep     git diff | tee ${BUILD_DIR}/generated_output.patch
    174  1.1.1.1.2.2  cjep     # Check if the diffs are empty, fail otherwise.
    175  1.1.1.1.2.2  cjep     ! grep -q '^--- a' ${BUILD_DIR}/generated_output.patch || false
    176  1.1.1.1.2.2  cjep     # Reject patches that introduce non-ASCII characters or hard tabs.
    177  1.1.1.1.2.2  cjep     # Depends on LC_COLLATE set at the top of this script.
    178  1.1.1.1.2.2  cjep     ! grep -rn '[^ -~]' libcxx/include/ || false
    179  1.1.1.1.2.2  cjep     # Check that no dependency cycles have been introduced.
    180  1.1.1.1.2.2  cjep     python3 libcxx/utils/graph_header_deps.py >/dev/null
    181  1.1.1.1.2.2  cjep ;;
    182  1.1.1.1.2.2  cjep generic-cxx03)
    183  1.1.1.1.2.2  cjep     export CC=clang
    184  1.1.1.1.2.2  cjep     export CXX=clang++
    185  1.1.1.1.2.2  cjep     clean
    186  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx03.cmake" \
    187  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    188  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    189  1.1.1.1.2.2  cjep     check-abi-list
    190  1.1.1.1.2.2  cjep ;;
    191  1.1.1.1.2.2  cjep generic-cxx11)
    192  1.1.1.1.2.2  cjep     export CC=clang
    193  1.1.1.1.2.2  cjep     export CXX=clang++
    194  1.1.1.1.2.2  cjep     clean
    195  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx11.cmake" \
    196  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    197  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    198  1.1.1.1.2.2  cjep     check-abi-list
    199  1.1.1.1.2.2  cjep ;;
    200  1.1.1.1.2.2  cjep generic-cxx14)
    201  1.1.1.1.2.2  cjep     export CC=clang
    202  1.1.1.1.2.2  cjep     export CXX=clang++
    203  1.1.1.1.2.2  cjep     clean
    204  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx14.cmake" \
    205  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    206  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    207  1.1.1.1.2.2  cjep     check-abi-list
    208  1.1.1.1.2.2  cjep ;;
    209  1.1.1.1.2.2  cjep generic-cxx17)
    210  1.1.1.1.2.2  cjep     export CC=clang
    211  1.1.1.1.2.2  cjep     export CXX=clang++
    212  1.1.1.1.2.2  cjep     clean
    213  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx17.cmake" \
    214  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    215  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    216  1.1.1.1.2.2  cjep     check-abi-list
    217  1.1.1.1.2.2  cjep ;;
    218  1.1.1.1.2.2  cjep generic-cxx20)
    219  1.1.1.1.2.2  cjep     export CC=clang
    220  1.1.1.1.2.2  cjep     export CXX=clang++
    221  1.1.1.1.2.2  cjep     clean
    222  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx20.cmake" \
    223  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    224  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    225  1.1.1.1.2.2  cjep     check-abi-list
    226  1.1.1.1.2.2  cjep ;;
    227  1.1.1.1.2.2  cjep generic-cxx2b)
    228  1.1.1.1.2.2  cjep     export CC=clang-tot
    229  1.1.1.1.2.2  cjep     export CXX=clang++-tot
    230  1.1.1.1.2.2  cjep     clean
    231  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-cxx2b.cmake" \
    232  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-shared.cfg.in"
    233  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    234  1.1.1.1.2.2  cjep     check-abi-list
    235  1.1.1.1.2.2  cjep ;;
    236  1.1.1.1.2.2  cjep generic-debug-iterators)
    237  1.1.1.1.2.2  cjep     export CC=clang-tot
    238  1.1.1.1.2.2  cjep     export CXX=clang++-tot
    239  1.1.1.1.2.2  cjep     clean
    240  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-debug-iterators.cmake"
    241  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    242  1.1.1.1.2.2  cjep     check-abi-list
    243  1.1.1.1.2.2  cjep ;;
    244  1.1.1.1.2.2  cjep generic-noexceptions)
    245  1.1.1.1.2.2  cjep     export CC=clang
    246  1.1.1.1.2.2  cjep     export CXX=clang++
    247  1.1.1.1.2.2  cjep     clean
    248  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-noexceptions.cmake"
    249  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    250  1.1.1.1.2.2  cjep ;;
    251  1.1.1.1.2.2  cjep generic-static)
    252  1.1.1.1.2.2  cjep     export CC=clang
    253  1.1.1.1.2.2  cjep     export CXX=clang++
    254  1.1.1.1.2.2  cjep     clean
    255  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-static.cmake" \
    256  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/libcxx-trunk-static.cfg.in"
    257  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    258  1.1.1.1.2.2  cjep ;;
    259  1.1.1.1.2.2  cjep generic-32bit)
    260  1.1.1.1.2.2  cjep     export CC=clang
    261  1.1.1.1.2.2  cjep     export CXX=clang++
    262  1.1.1.1.2.2  cjep     clean
    263  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-32bits.cmake"
    264  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    265  1.1.1.1.2.2  cjep ;;
    266  1.1.1.1.2.2  cjep generic-gcc)
    267  1.1.1.1.2.2  cjep     export CC=gcc
    268  1.1.1.1.2.2  cjep     export CXX=g++
    269  1.1.1.1.2.2  cjep     clean
    270  1.1.1.1.2.2  cjep     generate-cmake
    271  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    272  1.1.1.1.2.2  cjep ;;
    273  1.1.1.1.2.2  cjep generic-asan)
    274  1.1.1.1.2.2  cjep     export CC=clang
    275  1.1.1.1.2.2  cjep     export CXX=clang++
    276  1.1.1.1.2.2  cjep     clean
    277  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-asan.cmake"
    278  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    279  1.1.1.1.2.2  cjep ;;
    280  1.1.1.1.2.2  cjep generic-msan)
    281  1.1.1.1.2.2  cjep     export CC=clang
    282  1.1.1.1.2.2  cjep     export CXX=clang++
    283  1.1.1.1.2.2  cjep     clean
    284  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-msan.cmake"
    285  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    286  1.1.1.1.2.2  cjep ;;
    287  1.1.1.1.2.2  cjep generic-tsan)
    288  1.1.1.1.2.2  cjep     export CC=clang
    289  1.1.1.1.2.2  cjep     export CXX=clang++
    290  1.1.1.1.2.2  cjep     clean
    291  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-tsan.cmake"
    292  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    293  1.1.1.1.2.2  cjep ;;
    294  1.1.1.1.2.2  cjep generic-ubsan)
    295  1.1.1.1.2.2  cjep     export CC=clang
    296  1.1.1.1.2.2  cjep     export CXX=clang++
    297  1.1.1.1.2.2  cjep     clean
    298  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-ubsan.cmake"
    299  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    300  1.1.1.1.2.2  cjep ;;
    301  1.1.1.1.2.2  cjep generic-with_llvm_unwinder)
    302  1.1.1.1.2.2  cjep     export CC=clang
    303  1.1.1.1.2.2  cjep     export CXX=clang++
    304  1.1.1.1.2.2  cjep     clean
    305  1.1.1.1.2.2  cjep     generate-cmake -DLIBCXXABI_USE_LLVM_UNWINDER=ON
    306  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    307  1.1.1.1.2.2  cjep ;;
    308  1.1.1.1.2.2  cjep generic-singlethreaded)
    309  1.1.1.1.2.2  cjep     export CC=clang
    310  1.1.1.1.2.2  cjep     export CXX=clang++
    311  1.1.1.1.2.2  cjep     clean
    312  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-singlethreaded.cmake"
    313  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    314  1.1.1.1.2.2  cjep ;;
    315  1.1.1.1.2.2  cjep generic-no-debug)
    316  1.1.1.1.2.2  cjep     export CC=clang
    317  1.1.1.1.2.2  cjep     export CXX=clang++
    318  1.1.1.1.2.2  cjep     clean
    319  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-debug.cmake"
    320  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    321  1.1.1.1.2.2  cjep ;;
    322  1.1.1.1.2.2  cjep generic-no-filesystem)
    323  1.1.1.1.2.2  cjep     export CC=clang
    324  1.1.1.1.2.2  cjep     export CXX=clang++
    325  1.1.1.1.2.2  cjep     clean
    326  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-filesystem.cmake"
    327  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    328  1.1.1.1.2.2  cjep ;;
    329  1.1.1.1.2.2  cjep generic-no-random_device)
    330  1.1.1.1.2.2  cjep     export CC=clang
    331  1.1.1.1.2.2  cjep     export CXX=clang++
    332  1.1.1.1.2.2  cjep     clean
    333  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-random_device.cmake"
    334  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    335  1.1.1.1.2.2  cjep ;;
    336  1.1.1.1.2.2  cjep generic-no-localization)
    337  1.1.1.1.2.2  cjep     export CC=clang
    338  1.1.1.1.2.2  cjep     export CXX=clang++
    339  1.1.1.1.2.2  cjep     clean
    340  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-no-localization.cmake"
    341  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    342  1.1.1.1.2.2  cjep ;;
    343  1.1.1.1.2.2  cjep x86_64-apple-system)
    344  1.1.1.1.2.2  cjep     export CC=clang
    345  1.1.1.1.2.2  cjep     export CXX=clang++
    346  1.1.1.1.2.2  cjep     clean
    347  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake"
    348  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    349  1.1.1.1.2.2  cjep ;;
    350  1.1.1.1.2.2  cjep x86_64-apple-system-noexceptions)
    351  1.1.1.1.2.2  cjep     export CC=clang
    352  1.1.1.1.2.2  cjep     export CXX=clang++
    353  1.1.1.1.2.2  cjep     clean
    354  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
    355  1.1.1.1.2.2  cjep                    -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
    356  1.1.1.1.2.2  cjep                    -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
    357  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    358  1.1.1.1.2.2  cjep ;;
    359  1.1.1.1.2.2  cjep x86_64-apple-system-backdeployment-*)
    360  1.1.1.1.2.2  cjep     clean
    361  1.1.1.1.2.2  cjep 
    362  1.1.1.1.2.2  cjep     if [[ "${OSX_ROOTS}" == "" ]]; then
    363  1.1.1.1.2.2  cjep         echo "--- Downloading previous macOS dylibs"
    364  1.1.1.1.2.2  cjep         PREVIOUS_DYLIBS_URL="https://dl.dropboxusercontent.com/s/liu4fmc53qzlfly/libcxx-roots.tar.gz"
    365  1.1.1.1.2.2  cjep         OSX_ROOTS="${BUILD_DIR}/macos-roots"
    366  1.1.1.1.2.2  cjep         mkdir -p "${OSX_ROOTS}"
    367  1.1.1.1.2.2  cjep         curl "${PREVIOUS_DYLIBS_URL}" | tar -xz --strip-components=1 -C "${OSX_ROOTS}"
    368  1.1.1.1.2.2  cjep     fi
    369  1.1.1.1.2.2  cjep 
    370  1.1.1.1.2.2  cjep     DEPLOYMENT_TARGET="${BUILDER#x86_64-apple-system-backdeployment-}"
    371  1.1.1.1.2.2  cjep 
    372  1.1.1.1.2.2  cjep     # TODO: On Apple platforms, we never produce libc++abi.1.dylib, always libc++abi.dylib.
    373  1.1.1.1.2.2  cjep     #       Fix that in the build so that the tests stop searching for @rpath/libc++abi.1.dylib.
    374  1.1.1.1.2.2  cjep     cp "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.dylib" \
    375  1.1.1.1.2.2  cjep        "${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}/libc++abi.1.dylib"
    376  1.1.1.1.2.2  cjep 
    377  1.1.1.1.2.2  cjep     PARAMS="target_triple=x86_64-apple-macosx${DEPLOYMENT_TARGET}"
    378  1.1.1.1.2.2  cjep     PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}"
    379  1.1.1.1.2.2  cjep     PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}"
    380  1.1.1.1.2.2  cjep     PARAMS+=";use_system_cxx_lib=True"
    381  1.1.1.1.2.2  cjep 
    382  1.1.1.1.2.2  cjep     export CC=clang
    383  1.1.1.1.2.2  cjep     export CXX=clang++
    384  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \
    385  1.1.1.1.2.2  cjep                    -DLIBCXX_TEST_PARAMS="${PARAMS}" \
    386  1.1.1.1.2.2  cjep                    -DLIBCXXABI_TEST_PARAMS="${PARAMS}"
    387  1.1.1.1.2.2  cjep 
    388  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    389  1.1.1.1.2.2  cjep ;;
    390  1.1.1.1.2.2  cjep benchmarks)
    391  1.1.1.1.2.2  cjep     export CC=clang
    392  1.1.1.1.2.2  cjep     export CXX=clang++
    393  1.1.1.1.2.2  cjep     clean
    394  1.1.1.1.2.2  cjep     generate-cmake
    395  1.1.1.1.2.2  cjep     check-cxx-benchmarks
    396  1.1.1.1.2.2  cjep ;;
    397  1.1.1.1.2.2  cjep documentation)
    398  1.1.1.1.2.2  cjep     export CC=clang
    399  1.1.1.1.2.2  cjep     export CXX=clang++
    400  1.1.1.1.2.2  cjep     clean
    401  1.1.1.1.2.2  cjep     generate-cmake -DLLVM_ENABLE_SPHINX=ON
    402  1.1.1.1.2.2  cjep 
    403  1.1.1.1.2.2  cjep     echo "+++ Generating documentation"
    404  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" docs-libcxx-html
    405  1.1.1.1.2.2  cjep ;;
    406  1.1.1.1.2.2  cjep unified-standalone)
    407  1.1.1.1.2.2  cjep     export CC=clang
    408  1.1.1.1.2.2  cjep     export CXX=clang++
    409  1.1.1.1.2.2  cjep 
    410  1.1.1.1.2.2  cjep     clean
    411  1.1.1.1.2.2  cjep 
    412  1.1.1.1.2.2  cjep     echo "--- Generating CMake"
    413  1.1.1.1.2.2  cjep     ${CMAKE} \
    414  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/libcxx/utils/ci/runtimes" \
    415  1.1.1.1.2.2  cjep           -B "${BUILD_DIR}" \
    416  1.1.1.1.2.2  cjep           -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
    417  1.1.1.1.2.2  cjep           -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    418  1.1.1.1.2.2  cjep           -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
    419  1.1.1.1.2.2  cjep           -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind"
    420  1.1.1.1.2.2  cjep 
    421  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    422  1.1.1.1.2.2  cjep ;;
    423  1.1.1.1.2.2  cjep runtimes-build)
    424  1.1.1.1.2.2  cjep     export CC=clang
    425  1.1.1.1.2.2  cjep     export CXX=clang++
    426  1.1.1.1.2.2  cjep 
    427  1.1.1.1.2.2  cjep     clean
    428  1.1.1.1.2.2  cjep 
    429  1.1.1.1.2.2  cjep     echo "--- Generating CMake"
    430  1.1.1.1.2.2  cjep     ${CMAKE} \
    431  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/llvm" \
    432  1.1.1.1.2.2  cjep           -B "${BUILD_DIR}" \
    433  1.1.1.1.2.2  cjep           -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
    434  1.1.1.1.2.2  cjep           -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    435  1.1.1.1.2.2  cjep           -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
    436  1.1.1.1.2.2  cjep           -DLLVM_ENABLE_PROJECTS="clang" \
    437  1.1.1.1.2.2  cjep           -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
    438  1.1.1.1.2.2  cjep           -DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu"
    439  1.1.1.1.2.2  cjep 
    440  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ and libc++abi tests"
    441  1.1.1.1.2.2  cjep     ${NINJA} -C "${BUILD_DIR}" check-runtimes
    442  1.1.1.1.2.2  cjep 
    443  1.1.1.1.2.2  cjep     echo "--- Installing libc++ and libc++abi to a fake location"
    444  1.1.1.1.2.2  cjep     ${NINJA} -C "${BUILD_DIR}" install-cxx install-cxxabi
    445  1.1.1.1.2.2  cjep ;;
    446  1.1.1.1.2.2  cjep legacy-test-config)
    447  1.1.1.1.2.2  cjep     export CC=clang
    448  1.1.1.1.2.2  cjep     export CXX=clang++
    449  1.1.1.1.2.2  cjep     clean
    450  1.1.1.1.2.2  cjep     generate-cmake -DLIBCXX_TEST_CONFIG="${MONOREPO_ROOT}/libcxx/test/configs/legacy.cfg.in"
    451  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    452  1.1.1.1.2.2  cjep ;;
    453  1.1.1.1.2.2  cjep legacy-standalone)
    454  1.1.1.1.2.2  cjep     export CC=clang
    455  1.1.1.1.2.2  cjep     export CXX=clang++
    456  1.1.1.1.2.2  cjep 
    457  1.1.1.1.2.2  cjep     clean
    458  1.1.1.1.2.2  cjep 
    459  1.1.1.1.2.2  cjep     echo "--- Generating CMake"
    460  1.1.1.1.2.2  cjep     ${CMAKE} \
    461  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/libcxx" \
    462  1.1.1.1.2.2  cjep           -B "${BUILD_DIR}/libcxx" \
    463  1.1.1.1.2.2  cjep           -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
    464  1.1.1.1.2.2  cjep           -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    465  1.1.1.1.2.2  cjep           -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
    466  1.1.1.1.2.2  cjep           -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
    467  1.1.1.1.2.2  cjep           -DLIBCXX_CXX_ABI=libcxxabi \
    468  1.1.1.1.2.2  cjep           -DLIBCXX_CXX_ABI_INCLUDE_PATHS="${MONOREPO_ROOT}/libcxxabi/include" \
    469  1.1.1.1.2.2  cjep           -DLIBCXX_CXX_ABI_LIBRARY_PATH="${BUILD_DIR}/libcxxabi/lib"
    470  1.1.1.1.2.2  cjep 
    471  1.1.1.1.2.2  cjep     ${CMAKE} \
    472  1.1.1.1.2.2  cjep           -S "${MONOREPO_ROOT}/libcxxabi" \
    473  1.1.1.1.2.2  cjep           -B "${BUILD_DIR}/libcxxabi" \
    474  1.1.1.1.2.2  cjep           -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \
    475  1.1.1.1.2.2  cjep           -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    476  1.1.1.1.2.2  cjep           -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \
    477  1.1.1.1.2.2  cjep           -DLLVM_PATH="${MONOREPO_ROOT}/llvm" \
    478  1.1.1.1.2.2  cjep           -DLIBCXXABI_LIBCXX_PATH="${MONOREPO_ROOT}/libcxx" \
    479  1.1.1.1.2.2  cjep           -DLIBCXXABI_LIBCXX_INCLUDES="${BUILD_DIR}/libcxx/include/c++/v1" \
    480  1.1.1.1.2.2  cjep           -DLIBCXXABI_LIBCXX_LIBRARY_PATH="${BUILD_DIR}/libcxx/lib"
    481  1.1.1.1.2.2  cjep 
    482  1.1.1.1.2.2  cjep     echo "+++ Generating libc++ headers"
    483  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}/libcxx" generate-cxx-headers
    484  1.1.1.1.2.2  cjep 
    485  1.1.1.1.2.2  cjep     echo "+++ Building libc++abi"
    486  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}/libcxxabi" cxxabi
    487  1.1.1.1.2.2  cjep 
    488  1.1.1.1.2.2  cjep     echo "+++ Building libc++"
    489  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}/libcxx" cxx
    490  1.1.1.1.2.2  cjep 
    491  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ tests"
    492  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}/libcxx" check-cxx
    493  1.1.1.1.2.2  cjep 
    494  1.1.1.1.2.2  cjep     echo "+++ Running the libc++abi tests"
    495  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}/libcxxabi" check-cxxabi
    496  1.1.1.1.2.2  cjep ;;
    497  1.1.1.1.2.2  cjep aarch64)
    498  1.1.1.1.2.2  cjep     clean
    499  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake"
    500  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    501  1.1.1.1.2.2  cjep ;;
    502  1.1.1.1.2.2  cjep aarch64-noexceptions)
    503  1.1.1.1.2.2  cjep     clean
    504  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/AArch64.cmake" \
    505  1.1.1.1.2.2  cjep     -DLIBCXX_ENABLE_EXCEPTIONS=OFF \
    506  1.1.1.1.2.2  cjep     -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF
    507  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    508  1.1.1.1.2.2  cjep ;;
    509  1.1.1.1.2.2  cjep # Aka Armv8 32 bit
    510  1.1.1.1.2.2  cjep armv8)
    511  1.1.1.1.2.2  cjep     clean
    512  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Arm.cmake"
    513  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    514  1.1.1.1.2.2  cjep ;;
    515  1.1.1.1.2.2  cjep armv8-noexceptions)
    516  1.1.1.1.2.2  cjep     clean
    517  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv8Thumb-noexceptions.cmake"
    518  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    519  1.1.1.1.2.2  cjep ;;
    520  1.1.1.1.2.2  cjep # Armv7 32 bit. One building Arm only one Thumb only code.
    521  1.1.1.1.2.2  cjep armv7)
    522  1.1.1.1.2.2  cjep     clean
    523  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Arm.cmake"
    524  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    525  1.1.1.1.2.2  cjep ;;
    526  1.1.1.1.2.2  cjep armv7-noexceptions)
    527  1.1.1.1.2.2  cjep     clean
    528  1.1.1.1.2.2  cjep     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7Thumb-noexceptions.cmake"
    529  1.1.1.1.2.2  cjep     check-cxx-cxxabi
    530  1.1.1.1.2.2  cjep ;;
    531  1.1.1.1.2.2  cjep windows-dll)
    532  1.1.1.1.2.2  cjep     clean
    533  1.1.1.1.2.2  cjep     # TODO: Currently, building with the experimental library breaks running
    534  1.1.1.1.2.2  cjep     # tests (the test linking look for the c++experimental library with the
    535  1.1.1.1.2.2  cjep     # wrong name, and the statically linked c++experimental can't be linked
    536  1.1.1.1.2.2  cjep     # correctly when libc++ visibility attributes indicate dllimport linkage
    537  1.1.1.1.2.2  cjep     # anyway), thus just disable the experimental library. Remove this
    538  1.1.1.1.2.2  cjep     # setting when cmake and the test driver does the right thing automatically.
    539  1.1.1.1.2.2  cjep     generate-cmake-libcxx-win -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF
    540  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ tests"
    541  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxx
    542  1.1.1.1.2.2  cjep ;;
    543  1.1.1.1.2.2  cjep windows-static)
    544  1.1.1.1.2.2  cjep     clean
    545  1.1.1.1.2.2  cjep     generate-cmake-libcxx-win -DLIBCXX_ENABLE_SHARED=OFF
    546  1.1.1.1.2.2  cjep     echo "+++ Running the libc++ tests"
    547  1.1.1.1.2.2  cjep     ${NINJA} -vC "${BUILD_DIR}" check-cxx
    548  1.1.1.1.2.2  cjep ;;
    549  1.1.1.1.2.2  cjep *)
    550  1.1.1.1.2.2  cjep     echo "${BUILDER} is not a known configuration"
    551  1.1.1.1.2.2  cjep     exit 1
    552  1.1.1.1.2.2  cjep ;;
    553  1.1.1.1.2.2  cjep esac
    554