@@ -1221,6 +1221,12 @@ if [ ! -d "${CLANG_SOURCE_DIR}" ] ; then
1221
1221
make_relative_symlink " ${WORKSPACE} /clang" " ${CLANG_SOURCE_DIR} "
1222
1222
fi
1223
1223
1224
+ # Don't symlink clang-tools-extra into the tree as the 'clang' symlink prevents
1225
+ # make_relative_symlink from working correctly.
1226
+ if [ -e " ${WORKSPACE} /clang-tools-extra" ] ; then
1227
+ CLANG_TOOLS_EXTRA_SOURCE_DIR=" ${WORKSPACE} /clang-tools-extra"
1228
+ fi
1229
+
1224
1230
# Symlink compiler-rt into the llvm tree, if it exists.
1225
1231
COMPILER_RT_SOURCE_DIR=" ${LLVM_SOURCE_DIR} /projects/compiler-rt"
1226
1232
if [ -e " ${WORKSPACE} /compiler-rt" ] ; then
@@ -1229,7 +1235,16 @@ if [ -e "${WORKSPACE}/compiler-rt" ] ; then
1229
1235
fi
1230
1236
fi
1231
1237
1238
+ # Build libcxx, unless it doesn't exist.
1239
+ LIBCXX_SOURCE_DIR=" ${WORKSPACE} /libcxx"
1240
+ if [[ ! -e " ${LIBCXX_SOURCE_DIR} " ]] ; then
1241
+ SKIP_BUILD_LIBCXX=1
1242
+ fi
1243
+
1232
1244
PRODUCTS=(cmark llvm)
1245
+ if [[ ! " ${SKIP_BUILD_LIBCXX} " ]] ; then
1246
+ PRODUCTS=(" ${PRODUCTS[@]} " libcxx)
1247
+ fi
1233
1248
if [[ ! " ${SKIP_BUILD_LIBICU} " ]] ; then
1234
1249
PRODUCTS=(" ${PRODUCTS[@]} " libicu)
1235
1250
fi
@@ -1575,6 +1590,10 @@ function build_directory_bin() {
1575
1590
llvm)
1576
1591
echo " ${root} /${LLVM_BUILD_TYPE} /bin"
1577
1592
;;
1593
+ libcxx)
1594
+ # Reuse LLVM's build type.
1595
+ echo " ${root} /${LLVM_BUILD_TYPE} /bin"
1596
+ ;;
1578
1597
swift)
1579
1598
echo " ${root} /${SWIFT_BUILD_TYPE} /bin"
1580
1599
;;
@@ -1722,6 +1741,10 @@ function cmake_config_opt() {
1722
1741
llvm)
1723
1742
echo " --config ${LLVM_BUILD_TYPE} "
1724
1743
;;
1744
+ libcxx)
1745
+ # Reuse LLVM's build type.
1746
+ echo " --config ${LLVM_BUILD_TYPE} "
1747
+ ;;
1725
1748
swift)
1726
1749
echo " --config ${SWIFT_BUILD_TYPE} "
1727
1750
;;
@@ -2165,6 +2188,12 @@ for host in "${ALL_HOSTS[@]}"; do
2165
2188
" ${llvm_cmake_options[@]} "
2166
2189
)
2167
2190
2191
+ if [[ ! -z " ${CLANG_TOOLS_EXTRA_SOURCE_DIR} " ]] ; then
2192
+ cmake_options+=(
2193
+ -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=" ${CLANG_TOOLS_EXTRA_SOURCE_DIR} "
2194
+ )
2195
+ fi
2196
+
2168
2197
if [[ " ${BUILD_TOOLCHAIN_ONLY} " ]]; then
2169
2198
cmake_options+=(
2170
2199
-DLLVM_BUILD_TOOLS=NO
@@ -2204,6 +2233,22 @@ for host in "${ALL_HOSTS[@]}"; do
2204
2233
2205
2234
;;
2206
2235
2236
+ libcxx)
2237
+ build_targets=(cxx-headers)
2238
+ cmake_options=(
2239
+ " ${cmake_options[@]} "
2240
+ -DCMAKE_C_FLAGS=" $( llvm_c_flags ${host} ) "
2241
+ -DCMAKE_CXX_FLAGS=" $( llvm_c_flags ${host} ) "
2242
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO=" -O2 -DNDEBUG"
2243
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=" -O2 -DNDEBUG"
2244
+ -DCMAKE_BUILD_TYPE:STRING=" ${LLVM_BUILD_TYPE} "
2245
+ -DLLVM_INCLUDE_DOCS:BOOL=TRUE
2246
+ -DLLVM_CONFIG_PATH=" $( build_directory " ${LOCAL_HOST} " llvm) /bin/llvm-config"
2247
+ " ${llvm_cmake_options[@]} "
2248
+ )
2249
+
2250
+ ;;
2251
+
2207
2252
swift)
2208
2253
2209
2254
if [[ ! " ${SKIP_BUILD_ANDROID} " ]]; then
@@ -2980,6 +3025,9 @@ for host in "${ALL_HOSTS[@]}"; do
2980
3025
llvm)
2981
3026
continue # We don't test LLVM
2982
3027
;;
3028
+ libcxx)
3029
+ continue # We don't test libc++
3030
+ ;;
2983
3031
swift)
2984
3032
executable_target=
2985
3033
results_targets=
@@ -3476,6 +3524,9 @@ for host in "${ALL_HOSTS[@]}"; do
3476
3524
fi
3477
3525
INSTALL_TARGETS=install-$( echo ${LLVM_INSTALL_COMPONENTS} | sed -E ' s/;/ install-/g' )
3478
3526
;;
3527
+ libcxx)
3528
+ INSTALL_TARGETS=install-cxx-headers
3529
+ ;;
3479
3530
swift)
3480
3531
if [[ -z " ${INSTALL_SWIFT} " ]] ; then
3481
3532
continue
0 commit comments