Skip to content

Commit 58a4f0d

Browse files
committed
build: switch swift-corelibs-foundation to CMake
swift-corelibs-foundation has had a CMake based build system for a while now. Switch the official builds over to it.
1 parent 1d326d7 commit 58a4f0d

File tree

1 file changed

+103
-77
lines changed

1 file changed

+103
-77
lines changed

utils/build-script-impl

Lines changed: 103 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1756,8 +1756,7 @@ function set_swiftpm_bootstrap_command() {
17561756
)
17571757

17581758
if [[ ! "${SKIP_BUILD_FOUNDATION}" ]] ; then
1759-
swiftpm_bootstrap_command+=(
1760-
--foundation="${FOUNDATION_BUILD_DIR}/Foundation")
1759+
swiftpm_bootstrap_command+=( --foundation="${FOUNDATION_BUILD_DIR}" )
17611760
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
17621761
swiftpm_bootstrap_command+=(
17631762
$LIBDISPATCH_BUILD_ARGS)
@@ -2496,7 +2495,7 @@ for host in "${ALL_HOSTS[@]}"; do
24962495
call "${XCTEST_SOURCE_DIR}"/build_script.py \
24972496
--swiftc="${SWIFTC_BIN}" \
24982497
--build-dir="${XCTEST_BUILD_DIR}" \
2499-
--foundation-build-dir="${FOUNDATION_BUILD_DIR}/Foundation" \
2498+
--foundation-build-dir="${FOUNDATION_BUILD_DIR}" \
25002499
--swift-build-dir="${SWIFT_BUILD_DIR}" \
25012500
$LIBDISPATCH_BUILD_ARGS \
25022501
$XCTEST_BUILD_ARGS
@@ -2520,11 +2519,11 @@ for host in "${ALL_HOSTS[@]}"; do
25202519
-DCMAKE_INSTALL_LIBDIR:PATH="lib"
25212520

25222521
-DXCTEST_PATH_TO_LIBDISPATCH_SOURCE:PATH=${LIBDISPATCH_SOURCE_DIR}
2523-
-DXCTEST_PATH_TO_LIBDISPATCH_BUILD:PATH=${LIBDISPATCH_BUILD_DIR}
2522+
-DXCTEST_PATH_TO_LIBDISPATCH_BUILD:PATH=$(build_directory ${host} libdispatch)
25242523

25252524
-DXCTEST_PATH_TO_FOUNDATION_BUILD:PATH=${FOUNDATION_BUILD_DIR}
25262525

2527-
-DXCTEST_PATH_TO_COREFOUNDATION_BUILD:PATH=${FOUNDATION_BUILD_DIR}/Foundation/CoreFoundation
2526+
-DXCTEST_PATH_TO_COREFOUNDATION_BUILD:PATH=${FOUNDATION_BUILD_DIR}/CoreFoundation-prefix
25282527

25292528
-DCMAKE_PREFIX_PATH:PATH=$(build_directory ${host} llvm)
25302529

@@ -2539,48 +2538,46 @@ for host in "${ALL_HOSTS[@]}"; do
25392538
# location for building and running the tests. Note that XCTest
25402539
# is not yet built at this point.
25412540
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
2541+
25422542
SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
2543-
SWIFT_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swift"
2544-
SWIFT_BUILD_PATH="$(build_directory ${host} swift)"
25452543
LLVM_BIN="$(build_directory_bin ${LOCAL_HOST} llvm)"
25462544

2545+
if [[ ${host} == "macosx"* ]]; then
2546+
echo "Skipping Foundation on OS X -- use the Xcode project instead"
2547+
continue
2548+
fi
2549+
25472550
# Staging: require opt-in for building with dispatch
25482551
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
25492552
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
2550-
LIBDISPATCH_BUILD_ARGS="-DLIBDISPATCH_SOURCE_DIR=${LIBDISPATCH_SOURCE_DIR} -DLIBDISPATCH_BUILD_DIR=${LIBDISPATCH_BUILD_DIR}"
2551-
fi
2552-
2553-
# FIXME CROSSCOMPILING:
2554-
# Foundation is a target library (like the Swift standard library),
2555-
# so technically we should build it for all stdlib_targets, not just for the host.
2556-
# However, we only have the triple and sysroot for the host.
2557-
# Also, we will need to tell it which linker to use.
2558-
FOUNDATION_BUILD_ARGS=()
2559-
if [[ $(is_cross_tools_host ${host}) ]]; then
2560-
FOUNDATION_BUILD_ARGS+=(
2561-
"--target=${SWIFT_HOST_TRIPLE}"
2553+
LIBDISPATCH_BUILD_ARGS=(
2554+
-DFOUNDATION_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SOURCE_DIR}
2555+
-DFOUNDATION_PATH_TO_LIBDISPATCH_BUILD=${LIBDISPATCH_BUILD_DIR}
25622556
)
2563-
fi
2564-
2565-
# FIXME: Foundation doesn't build from the script on OS X
2566-
if [[ ${host} == "macosx"* ]]; then
2567-
echo "Skipping Foundation on OS X -- use the Xcode project instead"
2568-
continue
2557+
else
2558+
LIBDISPATCH_BUILD_ARGS=( -DFOUNDATION_ENABLE_LIBDISPATCH=NO )
25692559
fi
25702560

25712561
# FIXME: Always re-build foundation on non-darwin platforms.
25722562
# Remove this when products build in the CMake system.
25732563
echo "Cleaning the Foundation build directory"
25742564
call rm -rf "${build_dir}"
25752565

2576-
with_pushd "${FOUNDATION_SOURCE_DIR}" \
2577-
call env SWIFTC="${SWIFTC_BIN}" CLANG="${LLVM_BIN}"/clang SWIFT="${SWIFT_BIN}" \
2578-
SDKROOT="${SWIFT_BUILD_PATH}" BUILD_DIR="${build_dir}" DSTROOT="$(get_host_install_destdir ${host})" PREFIX="$(get_host_install_prefix ${host})" ./configure "${FOUNDATION_BUILD_TYPE}" ${FOUNDATION_BUILD_ARGS[@]} -DXCTEST_BUILD_DIR=${XCTEST_BUILD_DIR} $LIBDISPATCH_BUILD_ARGS
2579-
with_pushd "${FOUNDATION_SOURCE_DIR}" \
2580-
call ${NINJA_BIN}
2566+
cmake_options=(
2567+
${cmake_options[@]}
2568+
-DCMAKE_BUILD_TYPE:STRING=${FOUNDATION_BUILD_TYPE}
2569+
-DCMAKE_C_COMPILER:PATH=${LLVM_BIN}/clang
2570+
-DCMAKE_CXX_COMPILER:PATH=${LLVM_BIN}/clang++
2571+
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
2572+
-DCMAKE_INSTALL_PREFIX:PATH=$(get_host_install_prefix ${host})
2573+
2574+
${LIBDISPATCH_BUILD_ARGS[@]}
2575+
2576+
# NOTE(compnerd) we disable tests because XCTest is not ready
2577+
# yet, but we will reconfigure when the time comes.
2578+
-DENABLE_TESTING:BOOL=NO
2579+
)
25812580

2582-
# Foundation builds itself and doesn't use cmake
2583-
continue
25842581
;;
25852582
libdispatch)
25862583
LIBDISPATCH_BUILD_DIR=$(build_directory ${host} ${product})
@@ -2960,14 +2957,15 @@ for host in "${ALL_HOSTS[@]}"; do
29602957
else
29612958
# This assumes that there are no spaces in any on these paths.
29622959
FOUNDATION_BUILD_DIR=$(build_directory ${host} foundation)
2963-
DOTEST_EXTRA="-I${FOUNDATION_BUILD_DIR}/Foundation"
2964-
DOTEST_EXTRA="${DOTEST_EXTRA} -I${FOUNDATION_BUILD_DIR}/Foundation/usr/lib/swift"
2960+
DOTEST_EXTRA="-I${FOUNDATION_BUILD_DIR}"
2961+
DOTEST_EXTRA="-F${FOUNDATION_BUILD_DIR}/CoreFoundation-prefix/System/Library/Frameworks"
2962+
DOTEST_EXTRA="${DOTEST_EXTRA} -I${FOUNDATION_BUILD_DIR}/swift"
29652963
DOTEST_EXTRA="${DOTEST_EXTRA} -I${LIBDISPATCH_SOURCE_DIR}"
2966-
DOTEST_EXTRA="${DOTEST_EXTRA} -L${FOUNDATION_BUILD_DIR}/Foundation"
2964+
DOTEST_EXTRA="${DOTEST_EXTRA} -L${FOUNDATION_BUILD_DIR}"
29672965
DOTEST_EXTRA="${DOTEST_EXTRA} -L${LIBDISPATCH_BUILD_DIR}"
29682966
DOTEST_EXTRA="${DOTEST_EXTRA} -L${LIBDISPATCH_BUILD_DIR}/src"
29692967
DOTEST_EXTRA="${DOTEST_EXTRA} -Xlinker -rpath -Xlinker ${LIBDISPATCH_BUILD_DIR}/src"
2970-
DOTEST_EXTRA="${DOTEST_EXTRA} -Xlinker -rpath -Xlinker ${FOUNDATION_BUILD_DIR}/Foundation"
2968+
DOTEST_EXTRA="${DOTEST_EXTRA} -Xlinker -rpath -Xlinker ${FOUNDATION_BUILD_DIR}"
29712969
fi
29722970
call mkdir -p "${results_dir}"
29732971

@@ -3058,56 +3056,88 @@ for host in "${ALL_HOSTS[@]}"; do
30583056
if [[ "${SKIP_TEST_XCTEST}" ]]; then
30593057
continue
30603058
fi
3061-
# If libdispatch is being built then XCTest will need access to it
3062-
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
3063-
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
3064-
LIBDISPATCH_BUILD_ARGS="--libdispatch-src-dir=${LIBDISPATCH_SOURCE_DIR} --libdispatch-build-dir=${LIBDISPATCH_BUILD_DIR}"
3065-
fi
30663059

3067-
# Use XCTEST_BUILD_TYPE to build either --debug or --release.
3068-
if [[ "${XCTEST_BUILD_TYPE}" == "Debug" ]] ; then
3069-
XCTEST_BUILD_ARGS="--debug"
3070-
else
3071-
XCTEST_BUILD_ARGS="--release"
3072-
fi
3060+
case ${host} in
3061+
macosx-*)
3062+
# If libdispatch is being built then XCTest will need access to it
3063+
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
3064+
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
3065+
LIBDISPATCH_BUILD_ARGS="--libdispatch-src-dir=${LIBDISPATCH_SOURCE_DIR} --libdispatch-build-dir=${LIBDISPATCH_BUILD_DIR}"
3066+
fi
30733067

3074-
echo "--- Running tests for ${product} ---"
3075-
SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
3076-
FOUNDATION_BUILD_DIR=$(build_directory ${host} foundation)
3077-
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
3078-
call "${XCTEST_SOURCE_DIR}"/build_script.py test \
3079-
--swiftc="${SWIFTC_BIN}" \
3080-
--lit="${LLVM_SOURCE_DIR}/utils/lit/lit.py" \
3081-
--foundation-build-dir="${FOUNDATION_BUILD_DIR}/Foundation" \
3082-
${LIBDISPATCH_BUILD_ARGS} \
3083-
$XCTEST_BUILD_ARGS \
3084-
"${XCTEST_BUILD_DIR}"
3085-
echo "--- Finished tests for ${product} ---"
3086-
continue
3068+
# Use XCTEST_BUILD_TYPE to build either --debug or --release.
3069+
if [[ "${XCTEST_BUILD_TYPE}" == "Debug" ]] ; then
3070+
XCTEST_BUILD_ARGS="--debug"
3071+
else
3072+
XCTEST_BUILD_ARGS="--release"
3073+
fi
3074+
3075+
echo "--- Running tests for ${product} ---"
3076+
SWIFTC_BIN="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc"
3077+
FOUNDATION_BUILD_DIR=$(build_directory ${host} foundation)
3078+
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
3079+
call "${XCTEST_SOURCE_DIR}"/build_script.py test \
3080+
--swiftc="${SWIFTC_BIN}" \
3081+
--lit="${LLVM_SOURCE_DIR}/utils/lit/lit.py" \
3082+
--foundation-build-dir="${FOUNDATION_BUILD_DIR}" \
3083+
${LIBDISPATCH_BUILD_ARGS} \
3084+
$XCTEST_BUILD_ARGS \
3085+
"${XCTEST_BUILD_DIR}"
3086+
echo "--- Finished tests for ${product} ---"
3087+
continue
3088+
;;
3089+
*)
3090+
results_targets=( "check-xctest" )
3091+
executable_target=""
3092+
;;
3093+
esac
30873094
;;
30883095
foundation)
30893096
# FIXME: Foundation doesn't build from the script on OS X
30903097
if [[ ${host} == "macosx"* ]]; then
30913098
echo "Skipping Foundation on OS X -- use the Xcode project instead"
30923099
continue
30933100
fi
3101+
30943102
if [[ "${SKIP_TEST_FOUNDATION}" ]]; then
30953103
continue
30963104
fi
3097-
# If libdispatch is being built, TestFoundation will need access to it
3105+
3106+
if [[ "${SKIP_BUILD_XCTEST}" ]]; then
3107+
continue
3108+
fi
3109+
30983110
if [[ ! "${SKIP_BUILD_LIBDISPATCH}" ]] ; then
3099-
LIBDISPATCH_LIB_DIR=":$(build_directory ${host} libdispatch):$(build_directory ${host} libdispatch)/src"
3111+
LIBDISPATCH_BUILD_DIR="$(build_directory ${host} libdispatch)"
3112+
LIBDISPATCH_BUILD_ARGS=(
3113+
-DFOUNDATION_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SOURCE_DIR}
3114+
-DFOUNDATION_PATH_TO_LIBDISPATCH_BUILD=${LIBDISPATCH_BUILD_DIR}
3115+
)
31003116
else
3101-
LIBDISPATCH_LIB_DIR=""
3117+
LIBDISPATCH_BUILD_ARGS=( -DFOUNDATION_ENABLE_LIBDISPATCH=NO )
31023118
fi
3103-
echo "--- Running tests for ${product} ---"
3104-
build_dir=$(build_directory ${host} ${product})
3105-
XCTEST_BUILD_DIR=$(build_directory ${host} xctest)
3106-
with_pushd "${FOUNDATION_SOURCE_DIR}" \
3107-
call ${NINJA_BIN} TestFoundation
3108-
call env LD_LIBRARY_PATH="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})"/lib/swift/:"${build_dir}/Foundation":"${XCTEST_BUILD_DIR}""${LIBDISPATCH_LIB_DIR}":${LD_LIBRARY_PATH} "${build_dir}"/TestFoundation/TestFoundation
3109-
echo "--- Finished tests for ${product} ---"
3110-
continue
3119+
3120+
cmake_options=(
3121+
${cmake_options[@]}
3122+
-DCMAKE_BUILD_TYPE:STRING=${FOUNDATION_BUILD_TYPE}
3123+
-DCMAKE_C_COMPILER:PATH=${LLVM_BIN}/clang
3124+
-DCMAKE_CXX_COMPILER:PATH=${LLVM_BIN}/clang++
3125+
-DCMAKE_SWIFT_COMPILER:PATH=${SWIFTC_BIN}
3126+
-DCMAKE_INSTALL_PREFIX:PATH=$(get_host_install_prefix ${host})
3127+
3128+
${LIBDISPATCH_BUILD_ARGS[@]}
3129+
3130+
# NOTE(compnerd) the time has come to enable tests now
3131+
-DENABLE_TESTING:BOOL=YES
3132+
-DFOUNDATION_PATH_TO_XCTEST_BUILD:PATH=$(build_directory ${host} xctest)
3133+
)
3134+
3135+
[[ -z "${DISTCC}" ]] || EXTRA_DISTCC_OPTIONS=("DISTCC_HOSTS=localhost,lzo,cpp")
3136+
with_pushd "$(build_directory ${host} foundation)" \
3137+
call env "${EXTRA_DISTCC_OPTIONS[@]}" "${CMAKE}" "${cmake_options[@]}" "${EXTRA_CMAKE_OPTIONS[@]}" "${FOUNDATION_SOURCE_DIR}"
3138+
3139+
results_targets=( "test" )
3140+
executable_target=("TestFoundation")
31113141
;;
31123142
libdispatch)
31133143
if [[ "${SKIP_TEST_LIBDISPATCH}" ]]; then
@@ -3330,20 +3360,16 @@ for host in "${ALL_HOSTS[@]}"; do
33303360
echo "Skipping Foundation on OS X -- use the Xcode project instead"
33313361
continue
33323362
fi
3363+
33333364
if [[ -z "${INSTALL_FOUNDATION}" ]] ; then
33343365
continue
33353366
fi
3367+
33363368
if [[ -z "${INSTALL_DESTDIR}" ]] ; then
33373369
echo "--install-destdir is required to install products."
33383370
exit 1
33393371
fi
3340-
echo "--- Installing ${product} ---"
3341-
build_dir=$(build_directory ${host} ${product})
3342-
with_pushd "${FOUNDATION_SOURCE_DIR}" \
3343-
call ${NINJA_BIN} install
33443372

3345-
# As foundation installation is self-contained, we break early here.
3346-
continue
33473373
;;
33483374
libdispatch)
33493375
if [[ -z "${INSTALL_LIBDISPATCH}" ]] ; then

0 commit comments

Comments
 (0)