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