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