@@ -1218,6 +1218,12 @@ if [ ! -d "${CLANG_SOURCE_DIR}" ] ; then
1218
1218
make_relative_symlink " ${WORKSPACE} /clang" " ${CLANG_SOURCE_DIR} "
1219
1219
fi
1220
1220
1221
+ # Don't symlink clang-tools-extra into the tree as the 'clang' symlink prevents
1222
+ # make_relative_symlink from working correctly.
1223
+ if [ -e " ${WORKSPACE} /clang-tools-extra" ] ; then
1224
+ CLANG_TOOLS_EXTRA_SOURCE_DIR=" ${WORKSPACE} /clang-tools-extra"
1225
+ fi
1226
+
1221
1227
# Symlink compiler-rt into the llvm tree, if it exists.
1222
1228
COMPILER_RT_SOURCE_DIR=" ${LLVM_SOURCE_DIR} /projects/compiler-rt"
1223
1229
if [ -e " ${WORKSPACE} /compiler-rt" ] ; then
@@ -1226,7 +1232,16 @@ if [ -e "${WORKSPACE}/compiler-rt" ] ; then
1226
1232
fi
1227
1233
fi
1228
1234
1235
+ # Build libcxx, unless it doesn't exist.
1236
+ LIBCXX_SOURCE_DIR=" ${WORKSPACE} /libcxx"
1237
+ if [[ ! -e " ${LIBCXX_SOURCE_DIR} " ]] ; then
1238
+ SKIP_BUILD_LIBCXX=1
1239
+ fi
1240
+
1229
1241
PRODUCTS=(cmark llvm)
1242
+ if [[ ! " ${SKIP_BUILD_LIBCXX} " ]] ; then
1243
+ PRODUCTS=(" ${PRODUCTS[@]} " libcxx)
1244
+ fi
1230
1245
if [[ ! " ${SKIP_BUILD_LIBICU} " ]] ; then
1231
1246
PRODUCTS=(" ${PRODUCTS[@]} " libicu)
1232
1247
fi
@@ -1572,6 +1587,10 @@ function build_directory_bin() {
1572
1587
llvm)
1573
1588
echo " ${root} /${LLVM_BUILD_TYPE} /bin"
1574
1589
;;
1590
+ libcxx)
1591
+ # Reuse LLVM's build type.
1592
+ echo " ${root} /${LLVM_BUILD_TYPE} /bin"
1593
+ ;;
1575
1594
swift)
1576
1595
echo " ${root} /${SWIFT_BUILD_TYPE} /bin"
1577
1596
;;
@@ -1719,6 +1738,10 @@ function cmake_config_opt() {
1719
1738
llvm)
1720
1739
echo " --config ${LLVM_BUILD_TYPE} "
1721
1740
;;
1741
+ libcxx)
1742
+ # Reuse LLVM's build type.
1743
+ echo " --config ${LLVM_BUILD_TYPE} "
1744
+ ;;
1722
1745
swift)
1723
1746
echo " --config ${SWIFT_BUILD_TYPE} "
1724
1747
;;
@@ -2163,6 +2186,12 @@ for host in "${ALL_HOSTS[@]}"; do
2163
2186
" ${llvm_cmake_options[@]} "
2164
2187
)
2165
2188
2189
+ if [[ ! -z " ${CLANG_TOOLS_EXTRA_SOURCE_DIR} " ]] ; then
2190
+ cmake_options+=(
2191
+ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=" ${CLANG_TOOLS_EXTRA_SOURCE_DIR} "
2192
+ )
2193
+ fi
2194
+
2166
2195
if [[ " ${BUILD_TOOLCHAIN_ONLY} " ]]; then
2167
2196
cmake_options+=(
2168
2197
-DLLVM_BUILD_TOOLS=NO
@@ -2202,6 +2231,22 @@ for host in "${ALL_HOSTS[@]}"; do
2202
2231
2203
2232
;;
2204
2233
2234
+ libcxx)
2235
+ build_targets=(cxx-headers)
2236
+ cmake_options=(
2237
+ " ${cmake_options[@]} "
2238
+ -DCMAKE_C_FLAGS=" $( llvm_c_flags ${host} ) "
2239
+ -DCMAKE_CXX_FLAGS=" $( llvm_c_flags ${host} ) "
2240
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO=" -O2 -DNDEBUG"
2241
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=" -O2 -DNDEBUG"
2242
+ -DCMAKE_BUILD_TYPE:STRING=" ${LLVM_BUILD_TYPE} "
2243
+ -DLLVM_INCLUDE_DOCS:BOOL=TRUE
2244
+ -DLLVM_CONFIG_PATH=" $( build_directory " ${LOCAL_HOST} " llvm) /bin/llvm-config"
2245
+ " ${llvm_cmake_options[@]} "
2246
+ )
2247
+
2248
+ ;;
2249
+
2205
2250
swift)
2206
2251
2207
2252
if [[ ! " ${SKIP_BUILD_ANDROID} " ]]; then
@@ -3028,6 +3073,9 @@ for host in "${ALL_HOSTS[@]}"; do
3028
3073
llvm)
3029
3074
continue # We don't test LLVM
3030
3075
;;
3076
+ libcxx)
3077
+ continue # We don't test libc++
3078
+ ;;
3031
3079
swift)
3032
3080
executable_target=
3033
3081
results_targets=
@@ -3524,6 +3572,9 @@ for host in "${ALL_HOSTS[@]}"; do
3524
3572
fi
3525
3573
INSTALL_TARGETS=install-$( echo ${LLVM_INSTALL_COMPONENTS} | sed -E ' s/;/ install-/g' )
3526
3574
;;
3575
+ libcxx)
3576
+ INSTALL_TARGETS=install-cxx-headers
3577
+ ;;
3527
3578
swift)
3528
3579
if [[ -z " ${INSTALL_SWIFT} " ]] ; then
3529
3580
continue
0 commit comments