diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl index b1d060328bc..218c9215260 100755 --- a/swift/utils/build-script-impl +++ b/swift/utils/build-script-impl @@ -703,6 +705,7 @@ function set_build_options_for_host() { llvm_cmake_options+=( -DLLVM_TOOL_COMPILER_RT_BUILD:BOOL="$(false_true ${SKIP_BUILD_COMPILER_RT})" -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL="$(false_true ${SKIP_BUILD_COMPILER_RT})" + -DCOMPILER_RT_INCLUDE_TESTS:BOOL="OFF" ) fi @@ -743,6 +743,7 @@ function set_build_options_for_host() { llvm_cmake_options+=( -DLLVM_LIT_ARGS="${LLVM_LIT_ARGS} -j ${BUILD_JOBS}" + -DDEFAULT_SYSROOT:STRING="$(dirname @TERMUX_PREFIX@)" ) swift_cmake_options+=( -DLLVM_LIT_ARGS="${LLVM_LIT_ARGS} -j ${BUILD_JOBS}" @@ -1028,7 +1032,7 @@ function make_relative_symlink() { CROSS_COMPILE_HOSTS=($CROSS_COMPILE_HOSTS) for t in "${CROSS_COMPILE_HOSTS[@]}"; do case ${t} in - macosx-arm64* | iphone* | appletv* | watch* | linux-armv6 | linux-armv7 ) + macosx-arm64* | iphone* | appletv* | watch* | linux-armv6 | linux-armv7 | android-* ) ;; *) echo "Unknown host to cross-compile for: ${t}" @@ -1060,7 +1064,7 @@ function get_host_install_destdir() { # This assumes that all hosts are merged to the lipo. local host_install_destdir="${INSTALL_DESTDIR}" else - local host_install_destdir="${INSTALL_DESTDIR}/${host}" + local host_install_destdir="${INSTALL_DESTDIR}" fi else local host_install_destdir="${INSTALL_DESTDIR}" @@ -1422,6 +1426,38 @@ function swift_c_flags() { fi } +function common_swift_flags() { + local host=$1 + if [[ $(is_cross_tools_host ${host}) ]] ; then + case $host in + android-*) + echo -n "${TERMUX_SWIFT_FLAGS}" + ;; + *) + echo "error: Swift cross-compilation flags for ${host} have not been set." + exit 1 + ;; + esac + fi +} + +function add_cross_cmake_options() { + local host=$1 + local -n options=$2 + case $host in + android-*) + local NDK_ARCH=$ANDROID_ARCH + test $NDK_ARCH == 'armv7' && NDK_ARCH='armv7-a' + options+=( + -DCMAKE_SYSTEM_NAME=Android + -DCMAKE_SYSTEM_VERSION=${ANDROID_API_LEVEL} + -DCMAKE_SYSTEM_PROCESSOR=${NDK_ARCH} + -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN:PATH=${ANDROID_NDK} + ) + ;; + esac +} + function cmake_config_opt() { product=$1 if [[ "${CMAKE_GENERATOR}" == "Xcode" ]] ; then @@ -1546,6 +1578,10 @@ for host in "${ALL_HOSTS[@]}"; do ) if [[ $(is_cross_tools_host ${host}) ]] ; then add_cross_cmake_options ${host} cmake_options + cmake_options+=( + -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + -DCMAKE_CXX_FLAGS="$CXXFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + ) fi build_targets=(all) ;; @@ -1623,7 +1675,7 @@ for host in "${ALL_HOSTS[@]}"; do -DCLANG_TOOL_ARCMT_TEST_BUILD=NO -DCLANG_TOOL_C_ARCMT_TEST_BUILD=NO -DCLANG_TOOL_C_INDEX_TEST_BUILD=NO - -DCLANG_TOOL_DRIVER_BUILD=$(false_true "${BUILD_RUNTIME_WITH_HOST_COMPILER}") + -DCLANG_TOOL_DRIVER_BUILD=TRUE -DCLANG_TOOL_DIAGTOOL_BUILD=NO -DCLANG_TOOL_SCAN_BUILD_BUILD=NO -DCLANG_TOOL_SCAN_VIEW_BUILD=NO @@ -1652,6 +1688,10 @@ for host in "${ALL_HOSTS[@]}"; do -DLLVM_NATIVE_BUILD=$(build_directory "${LOCAL_HOST}" llvm) ) add_cross_cmake_options ${host} cmake_options + cmake_options+=( + -DCMAKE_CXX_FLAGS="$CXXFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" + ) fi ;; @@ -1768,7 +1812,7 @@ for host in "${ALL_HOSTS[@]}"; do ) fi - if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then + if [[ $(is_cross_tools_host ${host}) ]] ; then cmake_options=( "${cmake_options[@]}" -DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}" @@ -2045,6 +2045,8 @@ for host in "${ALL_HOSTS[@]}"; do cmake_options+=( -DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER + -DCMAKE_CXX_FLAGS="$CXXFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" ) fi @@ -2199,6 +2201,9 @@ for host in "${ALL_HOSTS[@]}"; do cmake_options+=( -DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER + -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" + -DCMAKE_HAVE_LIBC_PTHREAD=True ) fi @@ -2239,6 +2243,14 @@ for host in "${ALL_HOSTS[@]}"; do ) if [[ $(is_cross_tools_host ${host}) ]] ; then add_cross_cmake_options ${host} cmake_options + cmake_options+=( + -DCMAKE_FIND_ROOT_PATH:PATH="${CROSS_COMPILE_DEPS_PATH}" + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY + -DCMAKE_C_FLAGS="$CFLAGS --target=$CCTERMUX_HOST_PLATFORM $CPPFLAGS" + -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" + -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" + ) fi ;; esac @@ -2929,7 +2999,20 @@ for host in "${ALL_HOSTS[@]}"; do if [[ -z "${INSTALL_LLBUILD}" ]] ; then continue fi - INSTALL_TARGETS="install-swift-build-tool install-libllbuildSwift" + INSTALL_TARGETS="install-libllbuildSwift" + # Remove most libdispatch products before building the package manager. + rm -rf @TERMUX_PREFIX@/lib/swift{,_static}/{Block,os} + rm @TERMUX_PREFIX@/lib/swift{,_static}/dispatch/*.h + sed -i -e "s%dispatch\.h%@TERMUX_PREFIX@/include/dispatch/dispatch.h%" \ + -e "s%introspection\.h%@TERMUX_PREFIX@/include/dispatch/introspection.h%" \ + @TERMUX_PREFIX@/lib/swift/dispatch/module.modulemap + sed -i -e "s%dispatch\.h%@TERMUX_PREFIX@/include/dispatch/dispatch.h%" \ + -e "s%introspection\.h%@TERMUX_PREFIX@/include/dispatch/introspection.h%" \ + @TERMUX_PREFIX@/lib/swift_static/dispatch/module.modulemap + if [[ -z "${ANDROID_DATA}" ]] ; then + mv @TERMUX_PREFIX@/lib/swift/${host/-//}/glibc.modulemap @TERMUX_PREFIX@/glibc-native.modulemap + cp $(build_directory ${host} swift)/lib/swift/${host/-//}/glibc.modulemap @TERMUX_PREFIX@/lib/swift/${host/-//}/glibc.modulemap + fi ;; # Products from this here install themselves; they don't fall-through. lldb) if [[ -z "${INSTALL_LLDB}" ]] ; then