From b08a01ffa7690c37c8796de01d0a65440e36168b Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 16 Aug 2019 11:11:01 -0700 Subject: [PATCH 1/3] build-script-impl: Use build_directory_bin for any build products These can be config-specific when building using Xcode. I probably still missed a few, but this is enough to build and test Swift, at least. Should be no change for Ninja users. --- utils/build-script-impl | 48 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/utils/build-script-impl b/utils/build-script-impl index 26b0243bd2259..4dd0f2b4b11cf 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -1968,8 +1968,8 @@ for host in "${ALL_HOSTS[@]}"; do # Optionally use the freshly-built host copy of clang to build # for foreign hosts. common_cmake_options_host+=( - -DCMAKE_C_COMPILER="$(build_directory ${LOCAL_HOST} llvm)/bin/clang" - -DCMAKE_CXX_COMPILER="$(build_directory ${LOCAL_HOST} llvm)/bin/clang++" + -DCMAKE_C_COMPILER="$(build_directory_bin ${LOCAL_HOST} llvm)/clang" + -DCMAKE_CXX_COMPILER="$(build_directory_bin ${LOCAL_HOST} llvm)/clang++" ) fi @@ -2180,8 +2180,8 @@ for host in "${ALL_HOSTS[@]}"; do if [[ $(is_cross_tools_host ${host}) ]] ; then cmake_options=( "${cmake_options[@]}" - -DLLVM_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/llvm-tblgen - -DCLANG_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/clang-tblgen + -DLLVM_TABLEGEN=$(build_directory_bin "${LOCAL_HOST}" llvm)/llvm-tblgen + -DCLANG_TABLEGEN=$(build_directory_bin "${LOCAL_HOST}" llvm)/clang-tblgen -DLLVM_NATIVE_BUILD=$(build_directory "${LOCAL_HOST}" llvm) ) fi @@ -2198,7 +2198,7 @@ for host in "${ALL_HOSTS[@]}"; do -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O2 -DNDEBUG" -DCMAKE_BUILD_TYPE:STRING="${LLVM_BUILD_TYPE}" -DLLVM_INCLUDE_DOCS:BOOL=TRUE - -DLLVM_CONFIG_PATH="$(build_directory "${LOCAL_HOST}" llvm)/bin/llvm-config" + -DLLVM_CONFIG_PATH="$(build_directory_bin "${LOCAL_HOST}" llvm)/llvm-config" "${llvm_cmake_options[@]}" ) @@ -2244,9 +2244,9 @@ for host in "${ALL_HOSTS[@]}"; do build_external_perf_testsuite_this_time=false build_tests_this_time=false - native_llvm_tools_path="$(build_directory "${LOCAL_HOST}" llvm)/bin" - native_clang_tools_path="$(build_directory "${LOCAL_HOST}" llvm)/bin" - native_swift_tools_path="$(build_directory "${LOCAL_HOST}" swift)/bin" + native_llvm_tools_path="$(build_directory_bin "${LOCAL_HOST}" llvm)" + native_clang_tools_path="$(build_directory_bin "${LOCAL_HOST}" llvm)" + native_swift_tools_path="$(build_directory_bin "${LOCAL_HOST}" swift)" else # FIXME: Why is the next line not using false_true? build_perf_testsuite_this_time=$(true_false "$(not ${SKIP_BUILD_BENCHMARKS})") @@ -2257,7 +2257,7 @@ for host in "${ALL_HOSTS[@]}"; do if [[ $(is_cross_tools_host ${host}) ]] ; then cmake_options=( "${cmake_options[@]}" - -DLLVM_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/llvm-tblgen + -DLLVM_TABLEGEN=$(build_directory_bin "${LOCAL_HOST}" llvm)/llvm-tblgen ) fi @@ -2509,8 +2509,8 @@ for host in "${ALL_HOSTS[@]}"; do "${cmake_options[@]}" -C${LLDB_SOURCE_DIR}/cmake/caches/${cmake_cache} -DCMAKE_BUILD_TYPE:STRING="${LLDB_BUILD_TYPE}" - -DLLDB_SWIFTC:PATH="$(build_directory ${LOCAL_HOST} swift)/bin/swiftc" - -DLLDB_SWIFT_LIBS:PATH="$(build_directory ${LOCAL_HOST} swift)/lib/swift" + -DLLDB_SWIFTC:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/swiftc" + -DLLDB_SWIFT_LIBS:PATH="$(build_directory_bin ${LOCAL_HOST} swift)/../lib/swift" -DCMAKE_INSTALL_PREFIX:PATH="$(get_host_install_prefix ${host})" -DLLDB_FRAMEWORK_INSTALL_DIR="$(get_host_install_prefix ${host})../System/Library/PrivateFrameworks" -DLLVM_DIR:PATH=${llvm_build_dir}/lib/cmake/llvm @@ -2669,7 +2669,7 @@ for host in "${ALL_HOSTS[@]}"; do if [[ ! "${SKIP_BUILD_LIBICU}" ]] ; then ICU_ROOT=$(build_directory ${host} libicu)/tmp_install - ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_LIBDIR="$(build_directory_bin ${host} swift)/../lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" LIBICU_BUILD_ARGS=( -DICU_ROOT:PATH=${ICU_ROOT} -DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include @@ -2770,10 +2770,10 @@ for host in "${ALL_HOSTS[@]}"; do ;; libicu) - SWIFT_BUILD_PATH=$(build_directory ${host} swift) + SWIFT_BUILD_LIB_PATH=$(build_directory_bin ${host} swift)/../lib LIBICU_BUILD_DIR=$(build_directory ${host} ${product}) ICU_TMPINSTALL=$LIBICU_BUILD_DIR/tmp_install - ICU_TMPLIBDIR="${SWIFT_BUILD_PATH}/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_TMPLIBDIR="${SWIFT_BUILD_LIB_PATH}/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" if [[ "${RECONFIGURE}" || ! -f "${LIBICU_BUILD_DIR}"/config.status ]]; then echo "Reconfiguring libicu" if [[ "$LIBICU_BUILD_TYPE" != "Release" ]] ; then @@ -2804,9 +2804,9 @@ for host in "${ALL_HOSTS[@]}"; do fi with_pushd "${LIBICU_BUILD_DIR}" \ call make -j ${BUILD_JOBS} install - ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" - ICU_LIBDIR_STATIC="$(build_directory ${host} swift)/lib/swift_static/${SWIFT_HOST_VARIANT}" - ICU_LIBDIR_STATIC_ARCH="$(build_directory ${host} swift)/lib/swift_static/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_LIBDIR="$(build_directory_bin ${host} swift)/../lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_LIBDIR_STATIC="$(build_directory_bin ${host} swift)/../lib/swift_static/${SWIFT_HOST_VARIANT}" + ICU_LIBDIR_STATIC_ARCH="$(build_directory_bin ${host} swift)/../lib/swift_static/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" # Add in the ICU renaming config into uconfig.h call sed -e "/^#define __UCONFIG_H__/ r ${LIBICU_BUILD_DIR}/uconfig.h.prepend" -i ${ICU_TMPINSTALL}/include/unicode/uconfig.h @@ -2831,7 +2831,7 @@ for host in "${ALL_HOSTS[@]}"; do fi SWIFTC_BIN="$(build_directory_bin ${host} swift)/swiftc" - SWIFT_LIB_DIR="$(build_directory ${host} swift)"/lib/swift/ + SWIFT_LIB_DIR="$(build_directory_bin ${host} swift)"/../lib/swift/ set -x pushd "${PLAYGROUNDSUPPORT_SOURCE_DIR}" @@ -3058,7 +3058,7 @@ for host in "${ALL_HOSTS[@]}"; do with_pushd ${lldb_build_dir} \ call ${NINJA_BIN} -j ${BUILD_JOBS} lldb-test-deps with_pushd ${results_dir} \ - call "${llvm_build_dir}/bin/llvm-lit" \ + call "$(build_directory_bin ${host} llvm)/llvm-lit" \ "${lldb_build_dir}/lit" \ ${LLVM_LIT_ARGS} @@ -3067,7 +3067,7 @@ for host in "${ALL_HOSTS[@]}"; do "${LLDB_TEST_SWIFT_COMPATIBILITY}" DOTEST_ARGS="-G swift-history --swift-compiler \"${LLDB_TEST_SWIFT_COMPATIBILITY}\"" with_pushd ${results_dir} \ - call "${llvm_build_dir}/bin/llvm-lit" \ + call "$(build_directory_bin $LOCAL_HOST llvm)/llvm-lit" \ "${lldb_build_dir}/lit" \ ${LLVM_LIT_ARGS} \ --param dotest-args="${DOTEST_ARGS}" \ @@ -3177,7 +3177,7 @@ for host in "${ALL_HOSTS[@]}"; do if [[ ! "${SKIP_BUILD_LIBICU}" ]] ; then ICU_ROOT=$(build_directory ${host} libicu)/tmp_install - ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_LIBDIR="$(build_directory_bin ${host} swift)/../lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" LIBICU_BUILD_ARGS=( -DICU_ROOT:PATH=${ICU_ROOT} -DICU_INCLUDE_DIR:PATH=${ICU_ROOT}/include @@ -3287,7 +3287,7 @@ for host in "${ALL_HOSTS[@]}"; do PLAYGROUNDSUPPORT_BUILD_DIR=$(build_directory ${host} ${product}) SWIFTC_BIN="$(build_directory_bin ${host} swift)/swiftc" - SWIFT_LIB_DIR="$(build_directory ${host} swift)"/lib/swift/ + SWIFT_LIB_DIR="$(build_directory_bin ${host} swift)"/../lib/swift/ set -x with_pushd "${PLAYGROUNDSUPPORT_SOURCE_DIR}" \ @@ -3457,7 +3457,7 @@ for host in "${ALL_HOSTS[@]}"; do # Create the install dir if it doesn't exist call mkdir -p "${INSTALL_DESTDIR}" # Install libParser is necessary - rsync -a "$(build_directory ${host} swift)/lib/lib_InternalSwiftSyntaxParser.dylib" "${INSTALL_DESTDIR}" + rsync -a "$(build_directory_bin ${host} swift)/../lib/lib_InternalSwiftSyntaxParser.dylib" "${INSTALL_DESTDIR}" # Install module map of libParser so client can import SwiftSyntax rsync -a "${SWIFT_SOURCE_DIR}/include/swift-c/SyntaxParser" "${INSTALL_DESTDIR}" else @@ -3588,7 +3588,7 @@ for host in "${ALL_HOSTS[@]}"; do echo "--- Installing ${product} ---" ICU_BUILD_DIR=$(build_directory ${host} ${product}) ICU_INSTALL_DIR="$(get_host_install_destdir ${host})$(get_host_install_prefix ${host})" - ICU_LIBDIR="$(build_directory ${host} swift)/lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" + ICU_LIBDIR="$(build_directory_bin ${host} swift)/../lib/swift/${SWIFT_HOST_VARIANT}/${SWIFT_HOST_VARIANT_ARCH}" LIBICU_DEST_DIR="${ICU_INSTALL_DIR}lib/swift/${SWIFT_HOST_VARIANT}" call mkdir -p ${LIBICU_DEST_DIR} From bbfda2e409a2c04254aee7787d5ea461a15250f2 Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 16 Aug 2019 11:12:23 -0700 Subject: [PATCH 2/3] [CMake] Force the output dir of the fake-for-testing libBlocksRuntime LLVM was setting config-specific paths that overrode the ones provided here. We don't actually care about configuration for this dummy, testing-only library, so just force it back to a flat layout based on target platform. No functionality change for Ninja users. --- test/CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 15d41e08d4af9..e3197f9386ccd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -219,6 +219,7 @@ _Block_release(void) { }\n") NOSWIFTRT ARCHITECTURE ${ARCH} SDK ${SDK} + TARGET_LIBRARY INSTALL_IN_COMPONENT dev ${test_bin_dir}/BlocksRuntime.c) set_target_properties(BlocksRuntimeStub${VARIANT_SUFFIX} PROPERTIES @@ -226,6 +227,22 @@ _Block_release(void) { }\n") LIBRARY_OUTPUT_DIRECTORY ${test_bin_dir} RUNTIME_OUTPUT_DIRECTORY ${test_bin_dir} OUTPUT_NAME BlocksRuntime) + + # Hack around LLVM's "helpful" config-specific output directories (they're + # not needed). + # + # This is only relevant for build systems that support multiple + # configurations, like Xcode. + if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") + foreach(config ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER "${config}" config) + set_target_properties(BlocksRuntimeStub${VARIANT_SUFFIX} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY_${config} "${test_bin_dir}" + LIBRARY_OUTPUT_DIRECTORY_${config} "${test_bin_dir}" + RUNTIME_OUTPUT_DIRECTORY_${config} "${test_bin_dir}") + endforeach() + endif() + list(APPEND test_dependencies BlocksRuntimeStub${VARIANT_SUFFIX}) if(SWIFT_BUILD_STDLIB AND SWIFT_INCLUDE_TESTS) From 2c069c47105c078b45e060e7cc84d25bf9938eb3 Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 16 Aug 2019 11:53:33 -0700 Subject: [PATCH 3/3] build-presets: Update/simplify incremental Xcode preset This is our /only/ standard Xcode preset, and it's been disabled for a long time. Since only a limited configuration is supported for building with Xcode (pretty much just LLVM and Swift, with only a macOS standard library), it doesn't make sense to base it on the regular incremental preset. Pare it down to what's most important to keep working in hopes of turning the bot back on. --- utils/build-presets.ini | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index 0a810e8974a1d..cd24fd5f3657b 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -346,12 +346,18 @@ install-llbuild install-swiftpm install-libcxx + [preset: buildbot_incremental,tools=RA,stdlib=RA,xcode] -mixin-preset=buildbot_incremental,tools=RA,stdlib=RA -build-subdir=buildbot_incremental_xcode +mixin-preset=buildbot_incremental_base +build-subdir=buildbot_incremental_xcode xcode -dash-dash +libcxx + +# Build Release without debug info, because it is faster to build. +release +assertions + # We do not support building cross compiled stdlibs on OS X with Xcode. So only # build the OS X SDK. skip-build-ios @@ -363,12 +369,12 @@ skip-test-watchos stdlib-deployment-targets=macosx-x86_64 swift-primary-variant-sdk=OSX swift-primary-variant-arch=x86_64 -skip-build-llbuild -skip-test-llbuild -skip-build-swiftpm -skip-test-swiftpm -skip-build-playgroundsupport -skip-test-playgroundsupport + +# CMark's tests aren't set up to handle the config-specific build directories +# that CMake uses for Xcode. Rather than change CMark (which is 99% the same +# as upstream), we'll just skip testing it. +skip-test-cmark + # This preset is used by CI to test swift-corelibs-xctest. [preset: buildbot_incremental,tools=RA,stdlib=RA,XCTest]