diff --git a/disabled-packages/swift/build.sh b/disabled-packages/swift/build.sh deleted file mode 100644 index ac3e00260..000000000 --- a/disabled-packages/swift/build.sh +++ /dev/null @@ -1,100 +0,0 @@ -TERMUX_PKG_HOMEPAGE=https://www.swift.org/ -TERMUX_PKG_DESCRIPTION="Swift is a high-performance system programming language" -TERMUX_PKG_LICENSE="Apache-2.0, NCSA" -TERMUX_PKG_VERSION=5.1.4 -TERMUX_PKG_SHA256=46765a6a604be0b11cb4660bf5adbef8a95d2b74b03aa46860ef81a5ba92d5e8 -TERMUX_PKG_SRCURL=https://github.com/apple/swift/archive/swift-$TERMUX_PKG_VERSION-RELEASE.tar.gz -TERMUX_PKG_DEPENDS="binutils-gold, libc++, ndk-sysroot, libandroid-spawn, libcurl, libicu, libsqlite, libuuid, libxml2, llbuild" -TERMUX_PKG_BLACKLISTED_ARCHES="arm, i686, x86_64" -TERMUX_PKG_NO_STATICSPLIT=true - -SWIFT_BUILD_PACKAGES="cmake, ninja, perl, pkg-config, python2, rsync" -SWIFT_COMPONENTS="autolink-driver;compiler;clang-builtin-headers;stdlib;swift-remote-mirror;sdk-overlay;parser-lib;toolchain-tools;license;sourcekit-inproc" -SWIFT_BUILD_FLAGS="-R --no-assertions --llvm-targets-to-build='X86;ARM;AArch64' - --xctest -b -p -j $TERMUX_MAKE_PROCESSES --build-subdir=. --install-destdir=/ - --install-prefix=$TERMUX_PREFIX --swift-install-components='$SWIFT_COMPONENTS'" - -termux_step_post_extract_package() { - if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then - termux_error_exit "Package '$TERMUX_PKG_NAME' is not ready for off-device builds." - else - echo "Stop and install these required build packages if you haven't already:" - printf "$SWIFT_BUILD_PACKAGES\n\n" - fi - - # The Swift build-script requires a particular organization of source directories, - # which the following sets up. - mkdir TEMP - mv [a-zA-S]* TEMP/ - mv TEMP swift - - declare -A library_checksums - library_checksums[swift-cmark]=dc02253fdc5ef4027551e5ab5cb8eef22abd7a5bb2df6a2baf02e17afdeeb5cd - library_checksums[llvm-project]=0b3606be7b542aff28210c96639ad19a4b982e999fb3e86748198d8150f5f3d3 - library_checksums[swift-corelibs-libdispatch]=079cff5dd5b05381e9cf3094d445652fa9990a7d3a46e122f1e1dcdb2c54ddc1 - library_checksums[swift-corelibs-foundation]=f6e09efb3998d0a3d449f92ea809c86346c66e3b2d83ed19f3335bcb29401416 - library_checksums[swift-corelibs-xctest]=5996eb4384c8f095d912424439c5a1b7fc9ff57529f9ac5ecbc04e82d22ebca2 - library_checksums[swift-llbuild]=537683d7f1a73b48017d7cd7cd587c4b75c55cc5584e206cc0f8f92f6f4dd3ea - library_checksums[swift-package-manager]=b421e7e171b94521e364b6ea21ddd6300fe28bce3a0fcbc9f5ed6db496f148a6 - - for library in "${!library_checksums[@]}"; do \ - termux_download \ - https://github.com/apple/$library/archive/swift-$TERMUX_PKG_VERSION-RELEASE.tar.gz \ - $TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz \ - ${library_checksums[$library]} - tar xf $TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz - mv $library-swift-${TERMUX_PKG_VERSION}-RELEASE $library - done - - mv swift-cmark cmark - - ln -s $PWD/llvm-project/llvm - ln -s $PWD/llvm-project/compiler-rt - ln -s $PWD/llvm-project/clang - - mv swift-llbuild llbuild - mv swift-package-manager swiftpm -} - -termux_step_pre_configure() { - cd llbuild - # The bare minimum patches needed from the existing llbuild package - patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/CMakeLists.txt.patch - patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/include-llvm-Config-config.h.patch - patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/lib-llvm-Support-CmakeLists.txt.patch -} - -termux_step_configure() { - if [ "$(dpkg-query -W -f '${db:Status-Status}\n' libdispatch 2>/dev/null)" == "installed" ]; then - echo "This script will overwrite shared libraries provided by the libdispatch package." - echo "Uninstall libdispatch first with 'pkg uninstall libdispatch'." - termux_error_exit "Package '$TERMUX_PKG_NAME' overwrites 'libdispatch', so uninstall it." - fi - - local PYTHON2_PATH=$(which python2) - if [ -z "$PYTHON2_PATH" ]; then - echo "Python 2 couldn't be found. Install these required build packages first:" - echo "$SWIFT_BUILD_PACKAGES" - termux_error_exit "Package '$TERMUX_PKG_NAME' requires Python 2 to build." - else - ln -s $PYTHON2_PATH python - export PATH=$TERMUX_PKG_BUILDDIR:$PATH - fi -} - -termux_step_make() { - SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \ - $SWIFT_BUILD_FLAGS -} - -termux_step_make_install() { - SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \ - $SWIFT_BUILD_FLAGS --install-swift --install-libdispatch --install-foundation \ - --install-xctest --install-swiftpm --llvm-install-components=IndexStore - - # A hack to remove libdispatch libraries installed by the above build-script, which would - # overwrite the libdispatch package if installed. - rm $TERMUX_PREFIX/lib/libdispatch.so $TERMUX_PREFIX/lib/libBlocksRuntime.so - mkdir -p $TERMUX_PREFIX/lib/swift/pm/llbuild - cp llbuild-android-aarch64/lib/libllbuildSwift.so $TERMUX_PREFIX/lib/swift/pm/llbuild -} diff --git a/disabled-packages/swift/llbuild-cmake-modules-Utility.cmake.patch b/disabled-packages/swift/llbuild-cmake-modules-Utility.cmake.patch deleted file mode 100644 index 4f9c6cd2b..000000000 --- a/disabled-packages/swift/llbuild-cmake-modules-Utility.cmake.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/llbuild/cmake/modules/Utility.cmake b/llbuild/cmake/modules/Utility.cmake -index b287975..6a1859e 100644 ---- a/llbuild/cmake/modules/Utility.cmake -+++ b/llbuild/cmake/modules/Utility.cmake -@@ -208,7 +208,7 @@ function(add_swift_module target name deps sources additional_args) - list(APPEND DYLYB_ARGS -Xlinker -rpath -Xlinker @loader_path) - list(APPEND DYLYB_ARGS -Xlinker -install_name -Xlinker @rpath/${target}.${DYLIB_EXT}) - else() -- list(APPEND DYLYB_ARGS -Xlinker "-rpath=\\$$ORIGIN") -+ #list(APPEND DYLYB_ARGS -Xlinker "-rpath=\\$$ORIGIN") - endif() - - # Runpath for finding Swift core libraries in the toolchain. -@@ -216,7 +216,7 @@ function(add_swift_module target name deps sources additional_args) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - list(APPEND DYLYB_ARGS -Xlinker -rpath -Xlinker @loader_path/../../macosx) - else() -- list(APPEND DYLYB_ARGS -Xlinker "-rpath=\\$$ORIGIN/../../linux") -+ list(APPEND DYLYB_ARGS -Xlinker "-rpath=\\$$ORIGIN/../../android") - endif() - - list(APPEND DYLYB_ARGS -L ${LLBUILD_LIBRARY_OUTPUT_INTDIR}) diff --git a/disabled-packages/swift/llbuild-products-llbuildSwift-BuildSystemBindings.swift.patch b/disabled-packages/swift/llbuild-products-llbuildSwift-BuildSystemBindings.swift.patch deleted file mode 100644 index 54a202368..000000000 --- a/disabled-packages/swift/llbuild-products-llbuildSwift-BuildSystemBindings.swift.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/llbuild/products/llbuildSwift/BuildSystemBindings.swift b/llbuild/products/llbuildSwift/BuildSystemBindings.swift -index 33b3e88..1236069 100644 ---- a/llbuild/products/llbuildSwift/BuildSystemBindings.swift -+++ b/llbuild/products/llbuildSwift/BuildSystemBindings.swift -@@ -8,7 +8,7 @@ - - // This file contains Swift bindings for the llbuild C API. - --#if os(Linux) -+#if canImport(Glibc) - import Glibc - #elseif os(Windows) - import MSVCRT diff --git a/disabled-packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch b/disabled-packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch deleted file mode 100644 index f2ed3757b..000000000 --- a/disabled-packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch +++ /dev/null @@ -1,73 +0,0 @@ ---- a/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp.orig 2019-12-21 22:30:03.676720096 +0000 -+++ b/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp 2019-12-21 22:34:42.941719383 +0000 -@@ -316,6 +316,41 @@ - - const std::string OSLibDir = getOSLibDir(Triple, Args); - const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot); -+ bool NativeBuild = true; -+ -+ if(IsAndroid) { -+ if (Triple == llvm::Triple(llvm::sys::getDefaultTargetTriple())) -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/lib", Paths); -+ else -+ NativeBuild = false; -+ -+ if (Arch == llvm::Triple::aarch64) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/aarch64-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib64", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/aarch64-linux-android/lib"); -+ } -+ else if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/arm-linux-androideabi/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/arm-linux-androideabi/lib"); -+ } -+ else if (Arch == llvm::Triple::x86_64) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/x86_64-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib64", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/x86_64-linux-android/lib"); -+ } -+ else if (Arch == llvm::Triple::x86) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/i686-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/i686-linux-android/lib"); -+ } -+ -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/lib"); -+ } - - // Add the multilib suffixed paths where they are available. - if (GCCInstallation.isValid()) { -@@ -656,8 +691,27 @@ - return; - - if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) -+ if (getTriple().isAndroid()) { -+ switch (getTriple().getArch()) { -+ case llvm::Triple::x86_64: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/x86_64-linux-android"); -+ break; -+ case llvm::Triple::x86: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/i686-linux-android"); -+ break; -+ case llvm::Triple::aarch64: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/aarch64-linux-android"); -+ break; -+ case llvm::Triple::arm: -+ case llvm::Triple::thumb: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/arm-linux-androideabi"); -+ break; -+ default: -+ break; -+ } -+ - addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include"); -- -+ } - if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { - SmallString<128> P(D.ResourceDir); - llvm::sys::path::append(P, "include"); diff --git a/disabled-packages/swift/swift-build-script.patch b/disabled-packages/swift/swift-build-script.patch deleted file mode 100644 index abaf59fee..000000000 --- a/disabled-packages/swift/swift-build-script.patch +++ /dev/null @@ -1,95 +0,0 @@ -diff --git a/swift/utils/build-script b/swift/utils/build-script -index 05fd5f6b0f5..06fc0251719 100755 ---- a/swift/utils/build-script -+++ b/swift/utils/build-script -@@ -325,7 +325,11 @@ class BuildScriptInvocation(object): - android_tgts = [tgt for tgt in args.stdlib_deployment_targets - if StdlibDeploymentTarget.Android.contains(tgt)] - if not args.android and len(android_tgts) > 0: -- args.android = True -+ # If building natively on an Android host, avoid the NDK -+ # cross-compilation configuration. -+ if not StdlibDeploymentTarget.Android.contains( \ -+ StdlibDeploymentTarget.host_target().name): -+ args.android = True - args.build_android = False - - # Include the Darwin supported architectures in the CMake options. -@@ -767,6 +771,10 @@ class BuildScriptInvocation(object): - "--android-icu-i18n-include", args.android_icu_i18n_include, - "--android-icu-data", args.android_icu_data, - ] -+ # If building natively on an Android host, only pass the API level. -+ if StdlibDeploymentTarget.Android.contains( \ -+ StdlibDeploymentTarget.host_target().name): -+ impl_args += ["--android-api-level", args.android_api_level] - if args.android_deploy_device_path: - impl_args += [ - "--android-deploy-device-path", -diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl -index 68d7f5ddd88..5f6bfc2c57b 100755 ---- a/swift/utils/build-script-impl -+++ b/swift/utils/build-script-impl -@@ -449,6 +449,16 @@ function set_build_options_for_host() { - SWIFT_HOST_VARIANT_SDK="HAIKU" - SWIFT_HOST_VARIANT_ARCH="x86_64" - ;; -+ android-aarch64) -+ SWIFT_HOST_VARIANT="android" -+ SWIFT_HOST_VARIANT_SDK="ANDROID" -+ SWIFT_HOST_VARIANT_ARCH="aarch64" -+ SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android" -+ llvm_target_arch="AArch64" -+ swift_cmake_options=( -+ -DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}" -+ ) -+ ;; - linux-*) - SWIFT_HOST_VARIANT="linux" - SWIFT_HOST_VARIANT_SDK="LINUX" -@@ -716,6 +726,8 @@ - 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})" -+ -DC_INCLUDE_DIRS:STRING="@TERMUX_PREFIX@/include" -+ -DCOMPILER_RT_INCLUDE_TESTS:BOOL="OFF" - ) - - # If we are asked to not generate test targets for LLVM and or Swift, -@@ -2895,7 +2907,7 @@ - elif [[ "$(uname -s)" == "Haiku" ]] ; then - HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++" - else # Linux -- HOST_CXX_HEADERS_DIR="/usr/include/c++" -+ HOST_CXX_HEADERS_DIR="@TERMUX_PREFIX@/include/c++" - fi - - # Find the path in which the local clang build is expecting to find -@@ -3654,7 +3666,7 @@ for host in "${ALL_HOSTS[@]}"; do - fi - - case ${host} in -- linux-*|freebsd-*|cygwin-*|haiku-*) ;; -+ linux-*|freebsd-*|cygwin-*|haiku-*|android-*) ;; - *) - echo "error: --install-xctest is not supported on this platform" - exit 1 -diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py -index 7fae08ca57b..89637be0ee5 100644 ---- a/swift/utils/swift_build_support/swift_build_support/targets.py -+++ b/swift/utils/swift_build_support/swift_build_support/targets.py -@@ -159,6 +159,14 @@ class StdlibDeploymentTarget(object): - machine = platform.machine() - - if system == 'Linux': -+ if 'ANDROID_DATA' in os.environ: -+ if machine.startswith('armv7'): -+ return StdlibDeploymentTarget.Android.armv7 -+ elif machine == 'aarch64': -+ return StdlibDeploymentTarget.Android.aarch64 -+ raise NotImplementedError('Android System with architecture "%s"' -+ ' is not supported' % machine) -+ - if machine == 'x86_64': - return StdlibDeploymentTarget.Linux.x86_64 - elif machine == 'i686': diff --git a/disabled-packages/swift/swift-cmake.patch b/disabled-packages/swift/swift-cmake.patch deleted file mode 100644 index d34a86f3d..000000000 --- a/disabled-packages/swift/swift-cmake.patch +++ /dev/null @@ -1,343 +0,0 @@ -diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt -index 41768247e5..e67bf868ad 100644 ---- a/swift/CMakeLists.txt -+++ b/swift/CMakeLists.txt -@@ -439,7 +439,7 @@ precondition(CMAKE_SYSTEM_NAME) - if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(SWIFT_BUILD_SYNTAXPARSERLIB_default TRUE) - set(SWIFT_BUILD_SOURCEKIT_default TRUE) --elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") -+elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL Android) - if(EXISTS ${SWIFT_PATH_TO_LIBDISPATCH_SOURCE}) - set(SWIFT_BUILD_SYNTAXPARSERLIB_default TRUE) - set(SWIFT_BUILD_SOURCEKIT_default TRUE) -@@ -621,6 +621,8 @@ else() - set(SWIFT_HOST_VARIANT_SDK_default "WINDOWS") - elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku") - set(SWIFT_HOST_VARIANT_SDK_default "HAIKU") -+ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") -+ set(SWIFT_HOST_VARIANT_SDK_default "ANDROID") - elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(SWIFT_HOST_VARIANT_SDK_default "OSX") - else() -@@ -745,6 +747,22 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "HAIKU") - set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") - set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}") - -+elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID") -+ -+ set(SWIFT_HOST_VARIANT "android" CACHE STRING -+ "Deployment OS for Swift host tools (the compiler) [android]") -+ -+ set(SWIFT_ANDROID_NATIVE_SYSROOT "/data/data/com.termux/files" CACHE STRING -+ "Path to Android sysroot, default initialized to the Termux app's layout") -+ -+ if("${SWIFT_SDK_ANDROID_ARCHITECTURES}" STREQUAL "") -+ set(SWIFT_SDK_ANDROID_ARCHITECTURES ${SWIFT_HOST_VARIANT_ARCH}) -+ endif() -+ -+ configure_sdk_unix("Android" "${SWIFT_SDK_ANDROID_ARCHITECTURES}") -+ set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") -+ set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}") -+ - elseif("${SWIFT_HOST_VARIANT_SDK}" MATCHES "(OSX|IOS*|TVOS*|WATCHOS*)") - - set(SWIFT_HOST_VARIANT "macosx" CACHE STRING -diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake -index cbf613b4fc..47f926b4b8 100644 ---- a/swift/cmake/modules/AddSwift.cmake -+++ b/swift/cmake/modules/AddSwift.cmake -@@ -140,7 +140,8 @@ function(_add_variant_c_compile_link_flags) - # lld can handle targeting the android build. However, if lld is not - # enabled, then fallback to the linker included in the android NDK. - if(NOT SWIFT_ENABLE_LLD_LINKER) -- list(APPEND result "-B" "${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_TRIPLE}/bin") -+ swift_android_tools_path(${CFLAGS_ARCH} tools_path) -+ list(APPEND result "-B" "${tools_path}") - endif() - endif() - -@@ -434,19 +435,12 @@ function(_add_variant_link_flags) - list(APPEND link_libraries "bsd" "atomic") - list(APPEND result "-Wl,-Bsymbolic") - elseif("${LFLAGS_SDK}" STREQUAL "ANDROID") -- list(APPEND link_libraries "dl" "log" "atomic" "icudataswift" "icui18nswift" "icuucswift") -+ list(APPEND link_libraries "dl" "log" "atomic" "icudata" "icui18n" "icuuc") - # We provide our own C++ below, so we ask the linker not to do it. However, - # we need to add the math library, which is linked implicitly by libc++. - list(APPEND result "-nostdlib++" "-lm") -- if("${LFLAGS_ARCH}" MATCHES armv7) -- set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a") -- elseif("${LFLAGS_ARCH}" MATCHES aarch64) -- set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a") -- else() -- message(SEND_ERROR "unknown architecture (${LFLAGS_ARCH}) for android") -- endif() -- list(APPEND link_libraries "${android_libcxx_path}/libc++abi.a") -- list(APPEND link_libraries "${android_libcxx_path}/libc++_shared.so") -+ swift_android_cxx_libraries_for_arch(${LFLAGS_ARCH} cxx_link_libraries) -+ list(APPEND link_libraries ${cxx_link_libraries}) - swift_android_lib_for_arch(${LFLAGS_ARCH} ${LFLAGS_ARCH}_LIB) - foreach(path IN LISTS ${LFLAGS_ARCH}_LIB) - list(APPEND library_search_directories ${path}) -@@ -1053,7 +1047,7 @@ function(_add_swift_library_single target name) - set_target_properties("${target}" - PROPERTIES - INSTALL_NAME_DIR "${install_name_dir}") -- elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX" AND NOT "${SWIFTLIB_SINGLE_SDK}" STREQUAL "ANDROID") -+ elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX") - set_target_properties("${target}" - PROPERTIES - INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux") -@@ -1061,6 +1061,10 @@ function(_add_swift_library_single target name) - set_target_properties("${target}" - PROPERTIES - INSTALL_RPATH "$ORIGIN:/usr/lib/swift/cygwin") -+ elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "ANDROID") -+ set_target_properties("${target}" -+ PROPERTIES -+ INSTALL_RPATH "$ORIGIN") - endif() - - set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES) -diff --git a/swift/cmake/modules/AddSwiftUnittests.cmake b/swift/cmake/modules/AddSwiftUnittests.cmake -index 52dcbabab5..635253a448 100644 ---- a/swift/cmake/modules/AddSwiftUnittests.cmake -+++ b/swift/cmake/modules/AddSwiftUnittests.cmake -@@ -42,9 +42,14 @@ function(add_swift_unittest test_dirname) - if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY - LINK_FLAGS " -Xlinker -rpath -Xlinker ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx") -+ elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android") -+ swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs) -+ set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES -+ "${android_system_libs}") -+ set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES "log") - elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") -- set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY -- LINK_FLAGS " -latomic") -+ set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES -+ "atomic") - endif() - - find_program(LDLLD_PATH "ld.lld") -diff --git a/swift/cmake/modules/SwiftAndroidSupport.cmake b/swift/cmake/modules/SwiftAndroidSupport.cmake -index c6dcc783c6..9379031947 100644 ---- a/swift/cmake/modules/SwiftAndroidSupport.cmake -+++ b/swift/cmake/modules/SwiftAndroidSupport.cmake -@@ -1,16 +1,32 @@ - function(swift_android_libcxx_include_paths var) -- set(${var} -- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include" -- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include" -- PARENT_SCOPE) -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ set(${var} -+ "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include" -+ "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include" -+ PARENT_SCOPE) -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ set(${var} -+ "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/c++/v1" -+ PARENT_SCOPE) -+ else() -+ message(SEND_ERROR "Couldn't set libc++ include paths for Android") -+ endif() - endfunction() - - function(swift_android_include_for_arch arch var) - set(paths) -- list(APPEND paths -- "${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include" -- "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" -- "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ list(APPEND paths -+ "${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include" -+ "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" -+ "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ list(APPEND paths -+ "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" -+ "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") -+ else() -+ message(SEND_ERROR "Couldn't set ${arch} include paths for Android") -+ endif() - set(${var} ${paths} PARENT_SCOPE) - endfunction() - -@@ -19,14 +35,68 @@ function(swift_android_lib_for_arch arch var) - set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") - - set(paths) -- if(arch STREQUAL armv7) -- list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a") -- elseif(arch STREQUAL aarch64) -- list(APPEND paths "${_prebuilt}/${_host}/lib64") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ if(arch STREQUAL armv7) -+ list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a") -+ elseif(arch STREQUAL aarch64) -+ list(APPEND paths "${_prebuilt}/${_host}/lib64") -+ elseif(arch STREQUAL i686) -+ list(APPEND paths "${_prebuilt}/${_host}/lib") -+ elseif(arch STREQUAL x86_64) -+ list(APPEND paths "${_prebuilt}/${_host}/lib64") -+ else() -+ message(SEND_ERROR "unknown architecture (${arch}) for android") -+ endif() -+ list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x") -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ list(APPEND paths "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib") -+ if("${arch}" MATCHES armv7) -+ list(APPEND paths "/system/lib") -+ elseif("${arch}" MATCHES aarch64) -+ list(APPEND paths "/system/lib64") -+ else() -+ message(SEND_ERROR "unknown architecture (${arch}) when compiling for Android host") -+ endif() - else() -- message(SEND_ERROR "unknown architecture (${arch}) for android") -+ message(SEND_ERROR "Couldn't set ${arch} library paths for Android") - endif() -- list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x") - - set(${var} ${paths} PARENT_SCOPE) - endfunction() -+ -+function(swift_android_tools_path arch path_var_name) -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ set(${path_var_name} "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE) -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ set(${path_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/bin" PARENT_SCOPE) -+ else() -+ message(SEND_ERROR "Couldn't set ${arch} tools path for Android") -+ endif() -+endfunction () -+ -+function(swift_android_cxx_libraries_for_arch arch libraries_var_name) -+ set(link_libraries) -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ if("${arch}" MATCHES armv7) -+ set(cxx_arch armeabi-v7a) -+ elseif("${arch}" MATCHES aarch64) -+ set(cxx_arch arm64-v8a) -+ elseif("${arch}" MATCHES i686) -+ set(cxx_arch x86) -+ elseif("${arch}" MATCHES x86_64) -+ set(cxx_arch x86_64) -+ else() -+ message(SEND_ERROR "unknown architecture (${arch}) when cross-compiling for Android") -+ endif() -+ -+ set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${cxx_arch}") -+ list(APPEND link_libraries ${android_libcxx_path}/libc++abi.a -+ ${android_libcxx_path}/libc++_shared.so) -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ list(APPEND link_libraries "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib/libc++_shared.so") -+ else() -+ message(SEND_ERROR "Couldn't set ${arch} libc++ libraries needed for Android") -+ endif() -+ -+ set(${libraries_var_name} ${link_libraries} PARENT_SCOPE) -+endfunction() -diff --git a/swift/cmake/modules/SwiftConfigureSDK.cmake b/swift/cmake/modules/SwiftConfigureSDK.cmake -index cb9c7e9ace..a745aa440f 100644 ---- a/swift/cmake/modules/SwiftConfigureSDK.cmake -+++ b/swift/cmake/modules/SwiftConfigureSDK.cmake -@@ -28,7 +28,12 @@ function(_report_sdk prefix) - message(STATUS " ${arch} LIB: ${${arch}_LIB}") - endforeach() - elseif("${prefix}" STREQUAL "ANDROID") -- message(STATUS " NDK Dir: $ENV{SWIFT_ANDROID_NDK_PATH}") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ message(STATUS " NDK: $ENV{SWIFT_ANDROID_NDK_PATH}") -+ endif() -+ if(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ message(STATUS " Sysroot: ${SWIFT_ANDROID_NATIVE_SYSROOT}") -+ endif() - foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES}) - swift_android_include_for_arch(${arch} ${arch}_INCLUDE) - swift_android_lib_for_arch(${arch} ${arch}_LIB) -@@ -203,12 +208,24 @@ macro(configure_sdk_unix name architectures) - if("${arch}" STREQUAL "armv7") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "arm-linux-androideabi") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "arm") -- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm") -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}") -+ else() -+ message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_armv7_PATH") -+ endif() - set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "armv7-none-linux-androideabi") - elseif("${arch}" STREQUAL "aarch64") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "aarch64-linux-android") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "aarch64") -- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64") -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}") -+ else() -+ message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_aarch64_PATH") -+ endif() - set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "aarch64-unknown-linux-android") - else() - message(FATAL_ERROR "unknown arch for android SDK: ${arch}") -diff --git a/swift/stdlib/public/Platform/CMakeLists.txt b/swift/stdlib/public/Platform/CMakeLists.txt -index daf497b7e9..457743dc25 100644 ---- a/swift/stdlib/public/Platform/CMakeLists.txt -+++ b/swift/stdlib/public/Platform/CMakeLists.txt -@@ -63,8 +63,15 @@ foreach(sdk ${SWIFT_SDKS}) - set(GLIBC_ARCH_INCLUDE_PATH "/system/develop/headers/posix") - set(GLIBC_SYSROOT_RELATIVE_ARCH_INCLUDE_PATH "/system/develop/headers/") - elseif("${sdk}" STREQUAL "ANDROID") -- set(GLIBC_SYSROOT_RELATIVE_INCLUDE_PATH "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include") -- set(GLIBC_SYSROOT_RELATIVE_ARCH_INCLUDE_PATH "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include") -+ if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") -+ set(GLIBC_SYSROOT_RELATIVE_INCLUDE_PATH "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include") -+ set(GLIBC_SYSROOT_RELATIVE_ARCH_INCLUDE_PATH "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include") -+ elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") -+ set(GLIBC_SYSROOT_RELATIVE_INCLUDE_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include") -+ set(GLIBC_SYSROOT_RELATIVE_ARCH_INCLUDE_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include") -+ else() -+ message(SEND_ERROR "Couldn't find GLIBC_SYSROOT_PATH for Android") -+ endif() - else() - # Determine the location of glibc headers based on the target. - set(GLIBC_SYSROOT_RELATIVE_INCLUDE_PATH "/usr/include") -diff --git a/swift/test/CMakeLists.txt b/swift/test/CMakeLists.txt -index 18396dd873..706f59193c 100644 ---- a/swift/test/CMakeLists.txt -+++ b/swift/test/CMakeLists.txt -@@ -211,7 +211,9 @@ foreach(SDK ${SWIFT_SDKS}) - if("${SDK}" STREQUAL "IOS" OR "${SDK}" STREQUAL "TVOS" OR "${SDK}" STREQUAL "WATCHOS") - # These are supported testing SDKs, but their implementation of - # `command_upload_stdlib` is hidden. -- elseif("${SDK}" STREQUAL "ANDROID") -+ elseif("${SDK}" STREQUAL "ANDROID" AND NOT "${SWIFT_HOST_VARIANT}" STREQUAL "android") -+ # This adb setup is only needed when cross-compiling for Android, so the -+ # second check above makes sure we don't bother when the host is Android. - if("${SWIFT_ANDROID_DEPLOY_DEVICE_PATH}" STREQUAL "") - message(FATAL_ERROR - "When running Android host tests, you must specify the directory on the device " -diff --git a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -index a544e07e8a..38e017fe7e 100644 ---- a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -+++ b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -@@ -181,6 +181,13 @@ macro(add_sourcekit_library name) - endif() - endif() - -+ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") -+ if(SOURCEKITLIB_SHARED) -+ set_target_properties(${name} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) -+ set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/swift/android") -+ endif() -+ endif() -+ - if("${SOURCEKITLIB_INSTALL_IN_COMPONENT}" STREQUAL "") - if(SOURCEKITLIB_SHARED) - set(SOURCEKITLIB_INSTALL_IN_COMPONENT tools) diff --git a/disabled-packages/swift/swift-corelibs-foundation-CMakeLists.txt.patch b/disabled-packages/swift/swift-corelibs-foundation-CMakeLists.txt.patch deleted file mode 100644 index e2586df22..000000000 --- a/disabled-packages/swift/swift-corelibs-foundation-CMakeLists.txt.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/swift-corelibs-foundation/CMakeLists.txt b/swift-corelibs-foundation/CMakeLists.txt -index bf434b69..e6e2f3f0 100644 ---- a/swift-corelibs-foundation/CMakeLists.txt -+++ b/swift-corelibs-foundation/CMakeLists.txt -@@ -92,7 +92,7 @@ set(libdispatch_ldflags) - if(FOUNDATION_ENABLE_LIBDISPATCH) - set(libdispatch_cflags -I;${FOUNDATION_PATH_TO_LIBDISPATCH_SOURCE};-I;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src/swift;-Xcc;-fblocks) - set(libdispatch_ldflags -L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD};-L;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src;-ldispatch;-lswiftDispatch) -- if(CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD) -+ if(CMAKE_SYSTEM_NAME STREQUAL Linux OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD) - file(TO_CMAKE_PATH "${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}" FOUNDATION_PATH_TO_LIBDISPATCH_BUILD) - list(APPEND libdispatch_ldflags -Xlinker;-rpath;-Xlinker;${FOUNDATION_PATH_TO_LIBDISPATCH_BUILD}/src) - endif() diff --git a/disabled-packages/swift/swift-corelibs-libdispatch-src-CMakeLists.txt.patch b/disabled-packages/swift/swift-corelibs-libdispatch-src-CMakeLists.txt.patch deleted file mode 100644 index 021048ab1..000000000 --- a/disabled-packages/swift/swift-corelibs-libdispatch-src-CMakeLists.txt.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/swift-corelibs-libdispatch/src/CMakeLists.txt b/swift-corelibs-libdispatch/src/CMakeLists.txt -index f71b68f..81c4ade 100644 ---- a/swift-corelibs-libdispatch/src/CMakeLists.txt -+++ b/swift-corelibs-libdispatch/src/CMakeLists.txt -@@ -144,6 +144,7 @@ if(ENABLE_SWIFT) - -lBlocksRuntime - -L $ - -ldispatch -+ -Xlinker -rpath -Xlinker "\\\$\$ORIGIN" - $<$,$>:-lmsvcrtd> - $<$,$>>:-lmsvcrt> - MODULE_NAME -@@ -260,6 +261,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - "-Xlinker -dead_strip" - "-Xlinker -alias_list -Xlinker ${PROJECT_SOURCE_DIR}/xcodeconfig/libdispatch.aliases") - endif() -+ -+set_target_properties(dispatch PROPERTIES INSTALL_RPATH "$ORIGIN") -+set_target_properties(dispatch PROPERTIES BUILD_WITH_INSTALL_RPATH YES) -+ - dispatch_set_linker(dispatch) - - install(TARGETS diff --git a/disabled-packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch b/disabled-packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch deleted file mode 100644 index f88ea46f2..000000000 --- a/disabled-packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/swift-corelibs-xctest/CMakeLists.txt b/swift-corelibs-xctest/CMakeLists.txt -index 8c9800f..a29a514 100644 ---- a/swift-corelibs-xctest/CMakeLists.txt -+++ b/swift-corelibs-xctest/CMakeLists.txt -@@ -55,6 +55,7 @@ add_swift_library(XCTest - - # compatibility with Foundation build_script.py - -L${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation -+ -Xlinker -rpath -Xlinker "\\\$\$ORIGIN" - - ${WORKAROUND_SR9138} - ${WORKAROUND_SR9995} diff --git a/disabled-packages/swift/swift-lib-Driver-ToolChains.cpp.patch b/disabled-packages/swift/swift-lib-Driver-ToolChains.cpp.patch deleted file mode 100644 index b94141e57..000000000 --- a/disabled-packages/swift/swift-lib-Driver-ToolChains.cpp.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/swift/lib/Driver/ToolChains.cpp b/swift/lib/Driver/ToolChains.cpp -index cb86ce837f..aebc688fe1 100644 ---- a/swift/lib/Driver/ToolChains.cpp -+++ b/swift/lib/Driver/ToolChains.cpp -@@ -1137,7 +1137,7 @@ void ToolChain::getRuntimeLibraryPaths(SmallVectorImpl &runtimeLibP - if (!SDKPath.empty()) { - scratchPath = SDKPath; - llvm::sys::path::append(scratchPath, "usr", "lib", "swift"); -- runtimeLibPaths.push_back(scratchPath.str()); -+ //runtimeLibPaths.push_back(scratchPath.str()); - } - } - diff --git a/disabled-packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch b/disabled-packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch deleted file mode 100644 index a117f5c09..000000000 --- a/disabled-packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/swift/lib/Driver/UnixToolChains.cpp b/swift/lib/Driver/UnixToolChains.cpp -index bdc63d1ca72..971e5ded1e2 100644 ---- a/swift/lib/Driver/UnixToolChains.cpp -+++ b/swift/lib/Driver/UnixToolChains.cpp -@@ -42,7 +42,8 @@ std::string - toolchains::GenericUnix::sanitizerRuntimeLibName(StringRef Sanitizer, - bool shared) const { - return (Twine("libclang_rt.") + Sanitizer + "-" + -- this->getTriple().getArchName() + ".a") -+ this->getTriple().getArchName() + -+ (this->getTriple().isAndroid() ? "-android" : "") + ".a") - .str(); - } - -@@ -356,7 +357,13 @@ std::string toolchains::Android::getTargetForLinker() const { - return T.str(); - } - --bool toolchains::Android::shouldProvideRPathToLinker() const { return false; } -+bool toolchains::Android::shouldProvideRPathToLinker() const { -+#if defined(__ANDROID__) -+ return true; -+#else -+ return false; -+#endif -+} - - std::string toolchains::Cygwin::getDefaultLinker() const { - // Cygwin uses the default BFD linker, even on ARM. diff --git a/disabled-packages/swift/swift-stdlib-private-SwiftPrivateLibcExtras-Subprocess.swift.patch b/disabled-packages/swift/swift-stdlib-private-SwiftPrivateLibcExtras-Subprocess.swift.patch deleted file mode 100644 index 805dd6c63..000000000 --- a/disabled-packages/swift/swift-stdlib-private-SwiftPrivateLibcExtras-Subprocess.swift.patch +++ /dev/null @@ -1,83 +0,0 @@ -commit 7d0b78d00f6ad5278e9273a10415cf36fe349129 -Author: Daniel Rodríguez Troitiño -Date: Mon May 6 11:06:51 2019 -0700 - - [android] Stop leaking FDs in parent test process. - - In the Android paths of the spawnChild function, the parent was creating - a pipe that was never closed, which led to FD starvation. In some tests - with a lots of expected crashes, the childs will not spawn anymore since - the linker would not have enough descriptors to open the shared - libraries, while in other tests which closed the child descriptors as - part of the last test, the parent process will hang waiting those - descriptors to be closed, which will never had happened. - - The solution is implement the missing parts of the code, which tried to - read from the pipe in the parent side (using select and read, taking - pieces from other parts of the code). This should match the fork/execv - path used by Android and Haiku to the spawn code used by the rest of the - platforms. - - This change fixes StdlibUnittest/Stdin.swift, - stdlib/InputStream.swift.gyb, - stdlib/Collection/FlattenCollection.swift.gyb and - stdlib/Collection/LazyFilterCollection.swift.gyb, which were the last 4 - tests failing in Android AArch64. - -diff --git a/swift/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift b/swift/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift -index e31b3993e6..e95e07e142 100644 ---- a/swift/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift -+++ b/swift/stdlib/private/SwiftPrivateLibcExtras/Subprocess.swift -@@ -217,6 +217,10 @@ public func spawnChild(_ args: [String]) - if pid == 0 { - // pid of 0 means we are now in the child process. - // Capture the output before executing the program. -+ close(childStdout.readFD) -+ close(childStdin.writeFD) -+ close(childStderr.readFD) -+ close(childToParentPipe.readFD) - dup2(childStdout.writeFD, STDOUT_FILENO) - dup2(childStdin.readFD, STDIN_FILENO) - dup2(childStderr.writeFD, STDERR_FILENO) -@@ -261,6 +265,41 @@ public func spawnChild(_ args: [String]) - - // Close the pipe when we're done writing the error. - close(childToParentPipe.writeFD) -+ } else { -+ close(childToParentPipe.writeFD) -+ -+ // Figure out if the child’s call to execve was successful or not. -+ var readfds = _stdlib_fd_set() -+ readfds.set(childToParentPipe.readFD) -+ var writefds = _stdlib_fd_set() -+ var errorfds = _stdlib_fd_set() -+ errorfds.set(childToParentPipe.readFD) -+ -+ var ret: CInt -+ repeat { -+ ret = _stdlib_select(&readfds, &writefds, &errorfds, nil) -+ } while ret == -1 && errno == EINTR -+ if ret <= 0 { -+ fatalError("select() returned an error: \(errno)") -+ } -+ -+ if readfds.isset(childToParentPipe.readFD) || errorfds.isset(childToParentPipe.readFD) { -+ var childErrno: CInt = 0 -+ let readResult: ssize_t = withUnsafeMutablePointer(to: &childErrno) { -+ return read(childToParentPipe.readFD, $0, MemoryLayout.size(ofValue: $0.pointee)) -+ } -+ if readResult == 0 { -+ // We read an EOF indicating that the child's call to execve was successful. -+ } else if readResult < 0 { -+ fatalError("read() returned error: \(errno)") -+ } else { -+ // We read an error from the child. -+ print(String(cString: strerror(childErrno))) -+ preconditionFailure("execve() failed") -+ } -+ } -+ -+ close(childToParentPipe.readFD) - } - #else - var fileActions = _make_posix_spawn_file_actions_t() diff --git a/disabled-packages/swift/swift-stdlib-public-Platform-glibc.modulemap.gyb.patch b/disabled-packages/swift/swift-stdlib-public-Platform-glibc.modulemap.gyb.patch deleted file mode 100644 index 6c3b8276e..000000000 --- a/disabled-packages/swift/swift-stdlib-public-Platform-glibc.modulemap.gyb.patch +++ /dev/null @@ -1,141 +0,0 @@ -diff --git a/swift/stdlib/public/Platform/glibc.modulemap.gyb b/swift/stdlib/public/Platform/glibc.modulemap.gyb -index b024b92f7f..a460615e46 100644 ---- a/swift/stdlib/public/Platform/glibc.modulemap.gyb -+++ b/swift/stdlib/public/Platform/glibc.modulemap.gyb -@@ -47,13 +47,13 @@ module SwiftGlibc [system] { - export * - } - % end --% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN", "HAIKU"]: -+% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN", "HAIKU", "ANDROID"]: - module complex { - header "${GLIBC_INCLUDE_PATH}/complex.h" - export * - } - % end --% if CMAKE_SDK in ["LINUX", "CYGWIN"]: -+% if CMAKE_SDK in ["LINUX", "CYGWIN", "ANDROID"]: - module pty { - header "${GLIBC_INCLUDE_PATH}/pty.h" - export * -@@ -181,7 +181,7 @@ module SwiftGlibc [system] { - - // POSIX - module POSIX { --% if CMAKE_SDK in ["LINUX", "CYGWIN"]: -+% if CMAKE_SDK in ["LINUX", "CYGWIN", "ANDROID"]: - module wait { - header "${GLIBC_INCLUDE_PATH}/wait.h" - export * -@@ -210,8 +210,26 @@ module SwiftGlibc [system] { - export * - } - % end -+% if CMAKE_SDK == "ANDROID": -+ module cpio { -+ header "${GLIBC_INCLUDE_PATH}/cpio.h" -+ export * -+ } -+ module nl_types { -+ header "${GLIBC_INCLUDE_PATH}/nl_types.h" -+ export * -+ } -+ module bits { -+ export * - --% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN"]: -+ module fcntl { -+ header "${GLIBC_INCLUDE_PATH}/bits/fcntl.h" -+ export * -+ } -+ } -+% end -+ -+% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN", "ANDROID"]: - module ftw { - header "${GLIBC_INCLUDE_PATH}/ftw.h" - export * -@@ -228,10 +246,12 @@ module SwiftGlibc [system] { - header "${GLIBC_INCLUDE_PATH}/langinfo.h" - export * - } -+% if CMAKE_SDK != "ANDROID": - module monetary { - header "${GLIBC_INCLUDE_PATH}/monetary.h" - export * - } -+% end - module netdb { - header "${GLIBC_INCLUDE_PATH}/netdb.h" - export * -@@ -256,6 +276,7 @@ module SwiftGlibc [system] { - header "${GLIBC_INCLUDE_PATH}/tar.h" - export * - } -+% if CMAKE_SDK != "ANDROID": - module utmpx { - header "${GLIBC_INCLUDE_PATH}/utmpx.h" - export * -@@ -265,6 +286,7 @@ module SwiftGlibc [system] { - export * - } - % end -+% end - - % if CMAKE_SDK == "HAIKU": - module ftw { -@@ -393,11 +415,16 @@ module SwiftGlibc [system] { - module sys { - export * - --% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN", "HAIKU"]: -+% if CMAKE_SDK in ["LINUX", "FREEBSD", "CYGWIN", "HAIKU", "ANDROID"]: -+ module cdefs { -+ header "${GLIBC_ARCH_INCLUDE_PATH}/sys/cdefs.h" -+ export * -+ } - module file { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/file.h" - export * - } -+% if CMAKE_SDK != "ANDROID": - module sem { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/sem.h" - export * -@@ -407,6 +434,7 @@ module SwiftGlibc [system] { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/shm.h" - export * - } -+% end - % end - module statvfs { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/statvfs.h" -@@ -474,7 +502,7 @@ module SwiftGlibc [system] { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/un.h" - export * - } --% if CMAKE_SDK in ["LINUX"]: -+% if CMAKE_SDK in ["LINUX", "ANDROID"]: - module user { - header "${GLIBC_ARCH_INCLUDE_PATH}/sys/user.h" - export * -@@ -489,7 +517,7 @@ module SwiftGlibc [system] { - export * - } - } --% if CMAKE_SDK in ["LINUX", "FREEBSD"]: -+% if CMAKE_SDK in ["LINUX", "FREEBSD", "ANDROID"]: - module sysexits { - header "${GLIBC_INCLUDE_PATH}/sysexits.h" - export * -@@ -510,8 +538,10 @@ module SwiftGlibc [system] { - } - } - -+% if CMAKE_SDK != "ANDROID": - module CUUID [system] { - header "${GLIBC_INCLUDE_PATH}/uuid/uuid.h" - link "uuid" - export * - } -+% end diff --git a/disabled-packages/swift/swift-tools-SourceKit-cmake-modules-AddSwiftSourceKit.cmake.patch b/disabled-packages/swift/swift-tools-SourceKit-cmake-modules-AddSwiftSourceKit.cmake.patch deleted file mode 100644 index ee7490dd0..000000000 --- a/disabled-packages/swift/swift-tools-SourceKit-cmake-modules-AddSwiftSourceKit.cmake.patch +++ /dev/null @@ -1,35 +0,0 @@ -commit 799eb632c86f0171300f9b30f0f8d6586bdc3310 -Author: Alex Langford -Date: Tue Apr 2 12:04:19 2019 -0700 - - [CMake] Make SourceKit respect link_libraries and library_search_directories - - add_sourcekit_default_compiler_flags was invoking - _add_variant_link_flags and getting link flags but not actually using - the link_libraries or library_search_directories. In android builds, - this means that the correct libc++ is not being linked against. - -diff --git a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -index c1535aa2d3..1f7eebe40f 100644 ---- a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -+++ b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake -@@ -66,7 +66,9 @@ function(add_sourcekit_default_compiler_flags target) - ENABLE_LTO "${SWIFT_TOOLS_ENABLE_LTO}" - LTO_OBJECT_NAME "${target}-${sdk}-${arch}" - ANALYZE_CODE_COVERAGE "${analyze_code_coverage}" -- RESULT_VAR_NAME link_flags) -+ RESULT_VAR_NAME link_flags -+ LINK_LIBRARIES_VAR_NAME link_libraries -+ LIBRARY_SEARCH_DIRECTORIES_VAR_NAME library_search_directories) - - # Convert variables to space-separated strings. - _list_escape_for_shell("${c_compile_flags}" c_compile_flags) -@@ -77,6 +79,8 @@ function(add_sourcekit_default_compiler_flags target) - COMPILE_FLAGS " ${c_compile_flags} -fblocks") - set_property(TARGET "${target}" APPEND_STRING PROPERTY - LINK_FLAGS " ${link_flags}") -+ set_property(TARGET "${target}" APPEND PROPERTY LINK_LIBRARIES ${link_libraries}) -+ swift_target_link_search_directories("${target}" "${library_search_directories}") - endfunction() - - # Add a new SourceKit library. diff --git a/disabled-packages/swift/swiftpm-android.patch b/disabled-packages/swift/swiftpm-android.patch deleted file mode 100644 index 5d7c5f573..000000000 --- a/disabled-packages/swift/swiftpm-android.patch +++ /dev/null @@ -1,511 +0,0 @@ -diff --git a/swiftpm/Sources/Basic/Process.swift b/swiftpm/Sources/Basic/Process.swift -index f388c769..573e2e3c 100644 ---- a/swiftpm/Sources/Basic/Process.swift -+++ b/swiftpm/Sources/Basic/Process.swift -@@ -268,7 +268,7 @@ public final class Process: ObjectIdentifierProtocol { - } - - // Initialize the spawn attributes. -- #if canImport(Darwin) -+ #if canImport(Darwin) || os(Android) - var attributes: posix_spawnattr_t? = nil - #else - var attributes = posix_spawnattr_t() -@@ -313,7 +313,7 @@ public final class Process: ObjectIdentifierProtocol { - posix_spawnattr_setflags(&attributes, Int16(flags)) - - // Setup the file actions. -- #if canImport(Darwin) -+ #if canImport(Darwin) || os(Android) - var fileActions: posix_spawn_file_actions_t? = nil - #else - var fileActions = posix_spawn_file_actions_t() -diff --git a/swiftpm/Sources/Build/BuildPlan.swift b/swiftpm/Sources/Build/BuildPlan.swift -index 8ad4bdf9..29c8e9b9 100644 ---- a/swiftpm/Sources/Build/BuildPlan.swift -+++ b/swiftpm/Sources/Build/BuildPlan.swift -@@ -214,6 +214,8 @@ public struct BuildParameters { - var currentPlatform: PackageModel.Platform { - if self.triple.isDarwin() { - return .macOS -+ } else if self.triple.isAndroid() { -+ return .android - } else { - return .linux - } -diff --git a/swiftpm/Sources/Build/Triple.swift b/swiftpm/Sources/Build/Triple.swift -index 1a0e3095..54bc179e 100644 ---- a/swiftpm/Sources/Build/Triple.swift -+++ b/swiftpm/Sources/Build/Triple.swift -@@ -61,7 +61,7 @@ public struct Triple { - - public enum ABI: String { - case unknown -- case android = "androideabi" -+ case android - } - - public init(_ string: String) throws { -@@ -81,8 +81,7 @@ public struct Triple { - throw Error.unknownOS - } - -- let abiString = components.count > 3 ? components[3] : nil -- let abi = abiString.flatMap(ABI.init) -+ let abi = components.count > 3 ? Triple.parseABI(components[3]) : nil - - self.tripleString = string - self.arch = arch -@@ -101,6 +100,17 @@ public struct Triple { - return nil - } - -+ fileprivate static func parseABI(_ string: String) -> ABI? { -+ if string.hasPrefix(ABI.android.rawValue) { -+ return ABI.android -+ } -+ return nil -+ } -+ -+ public func isAndroid() -> Bool { -+ return os == .linux && abi == .android -+ } -+ - public func isDarwin() -> Bool { - return vendor == .apple || os == .macOS || os == .darwin - } -@@ -128,7 +132,10 @@ public struct Triple { - public static let s390xLinux = try! Triple("s390x-unknown-linux") - public static let arm64Linux = try! Triple("aarch64-unknown-linux") - public static let armLinux = try! Triple("armv7-unknown-linux-gnueabihf") -- public static let android = try! Triple("armv7-unknown-linux-androideabi") -+ public static let armAndroid = try! Triple("armv7a-unknown-linux-androideabi") -+ public static let arm64Android = try! Triple("aarch64-unknown-linux-android") -+ public static let x86_64Android = try! Triple("x86_64-unknown-linux-android") -+ public static let i686Android = try! Triple("i686-unknown-linux-android") - public static let windows = try! Triple("x86_64-unknown-windows-msvc") - - #if os(macOS) -@@ -149,6 +156,16 @@ public struct Triple { - #elseif arch(arm) - public static let hostTriple: Triple = .armLinux - #endif -+ #elseif os(Android) -+ #if arch(arm) -+ public static let hostTriple: Triple = .armAndroid -+ #elseif arch(arm64) -+ public static let hostTriple: Triple = .arm64Android -+ #elseif arch(x86_64) -+ public static let hostTriple: Triple = .x86_64Android -+ #elseif arch(i386) -+ public static let hostTriple: Triple = .i686Android -+ #endif - #endif - } - -diff --git a/swiftpm/Sources/Commands/SwiftTool.swift b/swiftpm/Sources/Commands/SwiftTool.swift -index 69865506..16374704 100644 ---- a/swiftpm/Sources/Commands/SwiftTool.swift -+++ b/swiftpm/Sources/Commands/SwiftTool.swift -@@ -402,6 +402,12 @@ public class SwiftTool { - action.__sigaction_u.__sa_handler = SIG_DFL - sigaction(SIGINT, &action, nil) - kill(getpid(), SIGINT) -+ #elseif os(Android) -+ // Install the default signal handler. -+ var action = sigaction() -+ action.sa_handler = SIG_DFL -+ sigaction(SIGINT, &action, nil) -+ kill(getpid(), SIGINT) - #else - var action = sigaction() - action.__sigaction_handler = unsafeBitCast( -diff --git a/swiftpm/Sources/PackageDescription4/Package.swift b/swiftpm/Sources/PackageDescription4/Package.swift -index 51463e92..ce29b49c 100644 ---- a/swiftpm/Sources/PackageDescription4/Package.swift -+++ b/swiftpm/Sources/PackageDescription4/Package.swift -@@ -8,7 +8,7 @@ - See http://swift.org/CONTRIBUTORS.txt for Swift project authors - */ - --#if os(Linux) -+#if canImport(Glibc) - import Glibc - #elseif os(iOS) || os(macOS) || os(tvOS) || os(watchOS) - import Darwin.C -diff --git a/swiftpm/Sources/PackageDescription4/SupportedPlatforms.swift b/swiftpm/Sources/PackageDescription4/SupportedPlatforms.swift -index 9e8398dd..34c62c62 100644 ---- a/swiftpm/Sources/PackageDescription4/SupportedPlatforms.swift -+++ b/swiftpm/Sources/PackageDescription4/SupportedPlatforms.swift -@@ -25,6 +25,7 @@ public struct Platform: Encodable { - public static let tvOS: Platform = Platform(name: "tvos") - public static let watchOS: Platform = Platform(name: "watchos") - public static let linux: Platform = Platform(name: "linux") -+ public static let android: Platform = Platform(name: "android") - } - - /// A platform that the Swift package supports. -diff --git a/swiftpm/Sources/PackageLoading/ManifestLoader.swift b/swiftpm/Sources/PackageLoading/ManifestLoader.swift -index 824db1cb..079560a8 100644 ---- a/swiftpm/Sources/PackageLoading/ManifestLoader.swift -+++ b/swiftpm/Sources/PackageLoading/ManifestLoader.swift -@@ -479,7 +479,7 @@ public final class ManifestLoader: ManifestLoaderProtocol { - - /// Returns the extra manifest args required during SwiftPM's own bootstrap. - private func bootstrapArgs() -> [String] { -- #if !os(Linux) -+ #if !os(Linux) && !os(Android) - return [] - #else - // The Linux bots require extra arguments in order to locate the corelibs. -@@ -494,8 +494,8 @@ public final class ManifestLoader: ManifestLoaderProtocol { - } - - // Construct the required search paths relative to the build directory. -- let libdir = buildPath.appending(RelativePath(".bootstrap/lib/swift/linux")) -- let incdir = libdir.appending(component: "x86_64") -+ let libdir = buildPath.appending(RelativePath(".bootstrap/lib/swift/android")) -+ let incdir = libdir.appending(component: "aarch64") - let dispatchIncdir = incdir.appending(component: "dispatch") - - return [ -diff --git a/swiftpm/Sources/PackageModel/Platform.swift b/swiftpm/Sources/PackageModel/Platform.swift -index 3f56355a..66d14321 100644 ---- a/swiftpm/Sources/PackageModel/Platform.swift -+++ b/swiftpm/Sources/PackageModel/Platform.swift -@@ -29,7 +29,7 @@ public final class PlatformRegistry { - - /// The static list of known platforms. - private static var _knownPlatforms: [Platform] { -- return [.macOS, .iOS, .tvOS, .watchOS, .linux] -+ return [.macOS, .iOS, .tvOS, .watchOS, .linux, .android] - } - } - -@@ -55,6 +55,7 @@ public struct Platform: Equatable, Hashable { - public static let tvOS: Platform = Platform(name: "tvos", oldestSupportedVersion: "9.0") - public static let watchOS: Platform = Platform(name: "watchos", oldestSupportedVersion: "2.0") - public static let linux: Platform = Platform(name: "linux", oldestSupportedVersion: .unknown) -+ public static let android: Platform = Platform(name: "android", oldestSupportedVersion: .unknown) - } - - /// Represents a platform version. -diff --git a/swiftpm/Sources/SPMLibc/libc.swift b/swiftpm/Sources/SPMLibc/libc.swift -index 4f32b5a4..e346b728 100644 ---- a/swiftpm/Sources/SPMLibc/libc.swift -+++ b/swiftpm/Sources/SPMLibc/libc.swift -@@ -8,7 +8,7 @@ - See http://swift.org/CONTRIBUTORS.txt for Swift project authors - */ - --#if os(Linux) -+#if canImport(Glibc) - @_exported import Glibc - #else - @_exported import Darwin.C -diff --git a/swiftpm/Sources/SPMUtility/FSWatch.swift b/swiftpm/Sources/SPMUtility/FSWatch.swift -index 70b12765..98b95cc0 100644 ---- a/swiftpm/Sources/SPMUtility/FSWatch.swift -+++ b/swiftpm/Sources/SPMUtility/FSWatch.swift -@@ -428,55 +428,76 @@ public final class Inotify { - // FIXME: Swift should provide shims for FD_ macros - - private func FD_ZERO(_ set: inout fd_set) { -+ #if os(Android) -+ set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -+ #else - set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -+ #endif - } - - private func FD_SET(_ fd: Int32, _ set: inout fd_set) { - let intOffset = Int(fd / 16) - let bitOffset = Int(fd % 16) -+ #if os(Android) -+ var fd_bits = set.fds_bits -+ let mask: UInt = 1 << bitOffset -+ #else -+ var fd_bits = set.__fds_bits - let mask = 1 << bitOffset -+ #endif - switch intOffset { -- case 0: set.__fds_bits.0 = set.__fds_bits.0 | mask -- case 1: set.__fds_bits.1 = set.__fds_bits.1 | mask -- case 2: set.__fds_bits.2 = set.__fds_bits.2 | mask -- case 3: set.__fds_bits.3 = set.__fds_bits.3 | mask -- case 4: set.__fds_bits.4 = set.__fds_bits.4 | mask -- case 5: set.__fds_bits.5 = set.__fds_bits.5 | mask -- case 6: set.__fds_bits.6 = set.__fds_bits.6 | mask -- case 7: set.__fds_bits.7 = set.__fds_bits.7 | mask -- case 8: set.__fds_bits.8 = set.__fds_bits.8 | mask -- case 9: set.__fds_bits.9 = set.__fds_bits.9 | mask -- case 10: set.__fds_bits.10 = set.__fds_bits.10 | mask -- case 11: set.__fds_bits.11 = set.__fds_bits.11 | mask -- case 12: set.__fds_bits.12 = set.__fds_bits.12 | mask -- case 13: set.__fds_bits.13 = set.__fds_bits.13 | mask -- case 14: set.__fds_bits.14 = set.__fds_bits.14 | mask -- case 15: set.__fds_bits.15 = set.__fds_bits.15 | mask -+ case 0: fd_bits.0 = fd_bits.0 | mask -+ case 1: fd_bits.1 = fd_bits.1 | mask -+ case 2: fd_bits.2 = fd_bits.2 | mask -+ case 3: fd_bits.3 = fd_bits.3 | mask -+ case 4: fd_bits.4 = fd_bits.4 | mask -+ case 5: fd_bits.5 = fd_bits.5 | mask -+ case 6: fd_bits.6 = fd_bits.6 | mask -+ case 7: fd_bits.7 = fd_bits.7 | mask -+ case 8: fd_bits.8 = fd_bits.8 | mask -+ case 9: fd_bits.9 = fd_bits.9 | mask -+ case 10: fd_bits.10 = fd_bits.10 | mask -+ case 11: fd_bits.11 = fd_bits.11 | mask -+ case 12: fd_bits.12 = fd_bits.12 | mask -+ case 13: fd_bits.13 = fd_bits.13 | mask -+ case 14: fd_bits.14 = fd_bits.14 | mask -+ case 15: fd_bits.15 = fd_bits.15 | mask - default: break - } -+ #if os(Android) -+ set.fds_bits = fd_bits -+ #else -+ set.__fds_bits = fd_bits -+ #endif - } - - private func FD_ISSET(_ fd: Int32, _ set: inout fd_set) -> Bool { - let intOffset = Int(fd / 32) - let bitOffset = Int(fd % 32) -+ #if os(Android) -+ let fd_bits = set.fds_bits -+ let mask: UInt = 1 << bitOffset -+ #else -+ let fd_bits = set.__fds_bits - let mask = 1 << bitOffset -+ #endif - switch intOffset { -- case 0: return set.__fds_bits.0 & mask != 0 -- case 1: return set.__fds_bits.1 & mask != 0 -- case 2: return set.__fds_bits.2 & mask != 0 -- case 3: return set.__fds_bits.3 & mask != 0 -- case 4: return set.__fds_bits.4 & mask != 0 -- case 5: return set.__fds_bits.5 & mask != 0 -- case 6: return set.__fds_bits.6 & mask != 0 -- case 7: return set.__fds_bits.7 & mask != 0 -- case 8: return set.__fds_bits.8 & mask != 0 -- case 9: return set.__fds_bits.9 & mask != 0 -- case 10: return set.__fds_bits.10 & mask != 0 -- case 11: return set.__fds_bits.11 & mask != 0 -- case 12: return set.__fds_bits.12 & mask != 0 -- case 13: return set.__fds_bits.13 & mask != 0 -- case 14: return set.__fds_bits.14 & mask != 0 -- case 15: return set.__fds_bits.15 & mask != 0 -+ case 0: return fd_bits.0 & mask != 0 -+ case 1: return fd_bits.1 & mask != 0 -+ case 2: return fd_bits.2 & mask != 0 -+ case 3: return fd_bits.3 & mask != 0 -+ case 4: return fd_bits.4 & mask != 0 -+ case 5: return fd_bits.5 & mask != 0 -+ case 6: return fd_bits.6 & mask != 0 -+ case 7: return fd_bits.7 & mask != 0 -+ case 8: return fd_bits.8 & mask != 0 -+ case 9: return fd_bits.9 & mask != 0 -+ case 10: return fd_bits.10 & mask != 0 -+ case 11: return fd_bits.11 & mask != 0 -+ case 12: return fd_bits.12 & mask != 0 -+ case 13: return fd_bits.13 & mask != 0 -+ case 14: return fd_bits.14 & mask != 0 -+ case 15: return fd_bits.15 & mask != 0 - default: return false - } - } -diff --git a/swiftpm/Sources/SPMUtility/IndexStore.swift b/swiftpm/Sources/SPMUtility/IndexStore.swift -index 99814fba..ad99f692 100644 ---- a/swiftpm/Sources/SPMUtility/IndexStore.swift -+++ b/swiftpm/Sources/SPMUtility/IndexStore.swift -@@ -191,7 +191,11 @@ public final class IndexStoreAPI { - - public init(dylib path: AbsolutePath) throws { - self.path = path -+ #if os(Android) -+ self.dylib = try dlopen(path.pathString, mode: [.lazy, .local, .first]) -+ #else - self.dylib = try dlopen(path.pathString, mode: [.lazy, .local, .first, .deepBind]) -+ #endif - - func dlsym_required(_ handle: DLHandle, symbol: String) throws -> T { - guard let sym: T = dlsym(handle, symbol: symbol) else { -diff --git a/swiftpm/Sources/SPMUtility/InterruptHandler.swift b/swiftpm/Sources/SPMUtility/InterruptHandler.swift -index 3eb32a29..2d477d78 100644 ---- a/swiftpm/Sources/SPMUtility/InterruptHandler.swift -+++ b/swiftpm/Sources/SPMUtility/InterruptHandler.swift -@@ -39,6 +39,8 @@ public final class InterruptHandler { - var action = sigaction() - #if canImport(Darwin) - action.__sigaction_u.__sa_handler = signalHandler -+ #elseif os(Android) -+ action.sa_handler = signalHandler - #else - action.__sigaction_handler = unsafeBitCast( - signalHandler, -diff --git a/swiftpm/Sources/SPMUtility/Platform.swift b/swiftpm/Sources/SPMUtility/Platform.swift -index 29db029b..15907ff6 100644 ---- a/swiftpm/Sources/SPMUtility/Platform.swift -+++ b/swiftpm/Sources/SPMUtility/Platform.swift -@@ -13,6 +13,7 @@ import Foundation - - /// Recognized Platform types. - public enum Platform { -+ case android - case darwin - case linux(LinuxFlavor) - -@@ -33,6 +34,10 @@ public enum Platform { - if localFileSystem.isFile(AbsolutePath("/etc/debian_version")) { - return .linux(.debian) - } -+ if localFileSystem.isFile(AbsolutePath("/system/bin/toolbox")) || -+ localFileSystem.isFile(AbsolutePath("/system/bin/toybox")) { -+ return .android -+ } - default: - return nil - } -@@ -60,6 +65,7 @@ public enum Platform { - /// Returns the value of given path variable using `getconf` utility. - /// - /// - Note: This method returns `nil` if the value is an invalid path. -+ #if os(macOS) - private static func getConfstr(_ name: Int32) -> AbsolutePath? { - let len = confstr(name, nil, 0) - let tmp = UnsafeMutableBufferPointer(start: UnsafeMutablePointer.allocate(capacity: len), count:len) -@@ -69,4 +75,5 @@ public enum Platform { - guard value.hasSuffix(AbsolutePath.root.pathString) else { return nil } - return resolveSymlinks(AbsolutePath(value)) - } -+ #endif - } -diff --git a/swiftpm/Sources/SPMUtility/dlopen.swift b/swiftpm/Sources/SPMUtility/dlopen.swift -index a36b0052..f73da65d 100644 ---- a/swiftpm/Sources/SPMUtility/dlopen.swift -+++ b/swiftpm/Sources/SPMUtility/dlopen.swift -@@ -60,8 +60,10 @@ public struct DLOpenFlags: RawRepresentable, OptionSet { - public static let deepBind: DLOpenFlags = DLOpenFlags(rawValue: 0) - #else - public static let first: DLOpenFlags = DLOpenFlags(rawValue: 0) -+ #if !os(Android) - public static let deepBind: DLOpenFlags = DLOpenFlags(rawValue: RTLD_DEEPBIND) - #endif -+ #endif - #endif - - public var rawValue: Int32 -diff --git a/swiftpm/Sources/PackageLoading/Target+PkgConfig.swift b/swiftpm/Sources/PackageLoading/Target+PkgConfig.swift -index c0918cc6..aaabfa89 100644 ---- a/swiftpm/Sources/PackageLoading/Target+PkgConfig.swift -+++ b/swiftpm/Sources/PackageLoading/Target+PkgConfig.swift -@@ -118,6 +118,9 @@ extension SystemPackageProviderDescription { - if case .linux(.debian) = platform { - return true - } -+ if case .android = platform { -+ return true -+ } - } - return false - } -diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap -index b6343c3f..92be12c6 100755 ---- a/swiftpm/Utilities/bootstrap -+++ b/swiftpm/Utilities/bootstrap -@@ -273,6 +273,10 @@ class Target(object): - if args.llbuild_link_framework: - other_args.extend(["-F", args.llbuild_build_dir]) - -+ # Don't use GNU strerror_r on Android. -+ if 'ANDROID_DATA' in os.environ: -+ other_args.extend(["-Xcc", "-U_GNU_SOURCE"]) -+ - print(" import-paths: %s" % json.dumps(import_paths), file=output) - print(" other-args: %s" % json.dumps(other_args), - file=output) -@@ -571,7 +575,7 @@ class llbuild(object): - link_command.extend(["-Xlinker", "-l%s" % (lib,)]) - if platform.system() == 'Linux': - link_command.extend( -- ["-Xlinker", "-rpath=$ORIGIN/../lib/swift/linux"]) -+ ["-Xlinker", "-rpath=$ORIGIN/../lib/swift/android", "-Xlinker", "-landroid-spawn"]) - if self.args.foundation_path: - link_command.extend(["-L", self.args.foundation_path]) - if self.args.libdispatch_build_dir: -@@ -675,8 +679,9 @@ def process_runtime_libraries(build, args, lib_path): - cmd = [args.swiftc_path, "-emit-library", "-o", runtime_lib_path, - "-Xlinker", "--whole-archive", - "-Xlinker", input_lib_path, -- "-Xlinker", "--no-whole-archive", "-lswiftGlibc", -- "-Xlinker", "-rpath=$ORIGIN/../../linux"] -+ "-Xlinker", "--no-whole-archive", "-Xlinker", "-L%s" % args.foundation_path, -+ "-lswiftGlibc", "-lFoundation", -+ "-Xlinker", "-rpath=$ORIGIN/../../android"] - - # We need to pass one swift file here to bypass the "no input files" - # error. -@@ -737,8 +742,8 @@ - def get_clang_path(): - try: - if os.getenv("CC"): -- clang_path=os.path.realpath(os.getenv("CC")) -- return clang_path -+ return subprocess.check_output(["which", os.getenv("CC")], -+ universal_newlines=True).strip() - elif platform.system() == 'Darwin': - return subprocess.check_output(["xcrun", "--find", "clang"], - stderr=subprocess.PIPE, universal_newlines=True).strip() -@@ -1030,7 +1035,14 @@ def main(): - if platform.system() == 'Darwin': - build_target = "x86_64-apple-macosx" - elif platform.system() == 'Linux': -- if platform.machine() == 'x86_64': -+ if 'ANDROID_DATA' in os.environ: -+ if platform.machine().startswith("armv7"): -+ build_target = 'armv7-unknown-linux-androideabi' -+ elif platform.machine() == 'aarch64': -+ build_target = 'aarch64-unknown-linux-android' -+ else: -+ raise SystemExit("ERROR: unsupported Android platform:",platform.machine()) -+ elif platform.machine() == 'x86_64': - build_target = "x86_64-unknown-linux" - elif platform.machine() == "i686": - build_target = "i686-unknown-linux" -@@ -1159,8 +1172,8 @@ def main(): - symlink_force(os.path.join(sandbox_path, "lib"), usrdir) - - if args.foundation_path and args.libdispatch_build_dir and args.xctest_path: -- libswiftdir = os.path.join(sandbox_path, "lib", "swift", "linux") -- libincludedir = os.path.join(libswiftdir, "x86_64") -+ libswiftdir = os.path.join(sandbox_path, "lib", "swift", "android") -+ libincludedir = os.path.join(libswiftdir, "aarch64") - mkdir_p(libswiftdir) - mkdir_p(libincludedir) - -@@ -1210,10 +1223,10 @@ def main(): - embed_rpath = args.stdlib_rpath - else: - if platform.system() == 'Linux': -- embed_rpath = "$ORIGIN/../lib/swift/linux" -+ embed_rpath = "$ORIGIN/../lib/swift/android" - else: - embed_rpath = "@executable_path/../lib/swift/macosx" -- build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", embed_rpath]) -+ build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", embed_rpath, "-Xlinker", "-landroid-spawn"]) - if args.verbose: - build_flags.append("-v") - -@@ -1236,6 +1248,10 @@ def main(): - # Add an RPATH, so that the tests can be run directly. - build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", faketoolchain_libdir]) - -+ # Don't use GNU strerror_r on Android. -+ if 'ANDROID_DATA' in os.environ: -+ build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"]) -+ - # Add llbuild import flags. - for import_path in llbuild_import_paths(args): - build_flags.extend(["-Xswiftc", "-I%s" % import_path]) diff --git a/disabled-packages/swift/swiftpm-chmod.patch b/disabled-packages/swift/swiftpm-chmod.patch deleted file mode 100644 index c648f8882..000000000 --- a/disabled-packages/swift/swiftpm-chmod.patch +++ /dev/null @@ -1,160 +0,0 @@ -commit caea53ad329a79fce2ac2b3eadf7c8ba92b903fa -Author: Gwen Mittertreiner -Date: Sun Apr 7 13:23:17 2019 -0700 - - Remove use of fts - - Replace the use of fts with Foundation's Directory Enumerator, which (on - Darwin/Linux), calls fts instead, but is cross platform for Windows. - -diff --git a/swiftpm/Sources/Basic/FileSystem.swift b/swiftpm/Sources/Basic/FileSystem.swift -index 958eaaf4..1b9e01a0 100644 ---- a/swiftpm/Sources/Basic/FileSystem.swift -+++ b/swiftpm/Sources/Basic/FileSystem.swift -@@ -88,16 +88,18 @@ public enum FileMode { - case userUnWritable - case userWritable - case executable -- -- /// File mode as it would be passed to `chmod`. -- public var cliArgument: String { -+ -+ internal var setMode: (Int16) -> Int16 { - switch self { - case .userUnWritable: -- return "u-w" -+ // r-x rwx rwx -+ return {$0 & 0o577} - case .userWritable: -- return "u+w" -+ // -w- --- --- -+ return {$0 | 0o200} - case .executable: -- return "+x" -+ // --x --x --x -+ return {$0 | 0o111} - } - } - } -@@ -375,86 +377,39 @@ private class LocalFileSystem: FileSystem { - } - - func chmod(_ mode: FileMode, path: AbsolutePath, options: Set) throws { -- #if os(macOS) -- // Get the mode we need to set. -- guard let setMode = setmode(mode.cliArgument) else { -- throw FileSystemError(errno: errno) -- } -- defer { setMode.deallocate() } -+ guard exists(path) else { return } -+ func setMode(path: String) throws { -+ // Skip if only files should be changed. -+ if options.contains(.onlyFiles) && isDirectory(AbsolutePath(path)) { -+ return -+ } - -- let recursive = options.contains(.recursive) -- // If we're in recursive mode, do physical walk otherwise logical. -- let ftsOptions = recursive ? FTS_PHYSICAL : FTS_LOGICAL -+ let attrs = try FileManager.default.attributesOfItem(atPath: path) - -- // Get handle to the file hierarchy we want to traverse. -- let paths = CStringArray([path.pathString]) -- guard let ftsp = fts_open(paths.cArray, ftsOptions, nil) else { -- throw FileSystemError(errno: errno) -+ // Compute the new mode for this file. -+ let currentMode = attrs[.posixPermissions] as! Int16 -+ let newMode = mode.setMode(currentMode) -+ guard newMode != currentMode else { return } -+ try FileManager.default.setAttributes([.posixPermissions : newMode], -+ ofItemAtPath: path) - } -- defer { fts_close(ftsp) } -- -- // Start traversing. -- while let p = fts_read(ftsp) { -- -- switch Int32(p.pointee.fts_info) { -- -- // A directory being visited in pre-order. -- case FTS_D: -- // If we're not recursing, skip the contents of the directory. -- if !recursive { -- fts_set(ftsp, p, FTS_SKIP) -- } -- continue -- -- // A directory couldn't be read. -- case FTS_DNR: -- // FIXME: We should warn here. -- break -- -- // There was an error. -- case FTS_ERR: -- fallthrough - -- // No stat(2) information was available. -- case FTS_NS: -- // FIXME: We should warn here. -- continue -+ try setMode(path: path.pathString) -+ guard isDirectory(path) else { return } - -- // A symbolic link. -- case FTS_SL: -- fallthrough -- -- // A symbolic link with a non-existent target. -- case FTS_SLNONE: -- // The only symlinks that end up here are ones that don't point -- // to anything and ones that we found doing a physical walk. -- continue -- -- default: -- break -- } -- -- // Compute the new mode for this file. -- let currentMode = mode_t(p.pointee.fts_statp.pointee.st_mode) -- -- // Skip if only files should be changed. -- if options.contains(.onlyFiles) && (currentMode & S_IFMT) == S_IFDIR { -- continue -- } -+ guard let traverse = FileManager.default.enumerator( -+ at: URL(fileURLWithPath: path.pathString), -+ includingPropertiesForKeys: nil) else { -+ throw FileSystemError.noEntry -+ } - -- // Compute the new mode. -- let newMode = getmode(setMode, currentMode) -- if newMode == currentMode { -- continue -- } -+ if !options.contains(.recursive) { -+ traverse.skipDescendants() -+ } - -- // Update the mode. -- // -- // We ignore the errors for now but we should have a way to report back. -- _ = SPMLibc.chmod(p.pointee.fts_accpath, newMode) -+ while let path = traverse.nextObject() { -+ try setMode(path: (path as! URL).path) - } -- #endif -- // FIXME: We only support macOS right now. - } - } - -diff --git a/swiftpm/Sources/clibc/include/clibc.h b/swiftpm/Sources/clibc/include/clibc.h -index 7cf808c1..8a90bffa 100644 ---- a/swiftpm/Sources/clibc/include/clibc.h -+++ b/swiftpm/Sources/clibc/include/clibc.h -@@ -1,5 +1,3 @@ --#include -- - #if defined(__linux__) - #include - #endif diff --git a/disabled-packages/swift/swiftpm-rpath.patch b/disabled-packages/swift/swiftpm-rpath.patch deleted file mode 100644 index 82869b67a..000000000 --- a/disabled-packages/swift/swiftpm-rpath.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap -index a57ddbed..6ce5d321 100755 ---- a/swiftpm/Utilities/bootstrap -+++ b/swiftpm/Utilities/bootstrap -@@ -843,14 +843,15 @@ def llbuild_lib_path(args): - llbuild_libdir = os.path.join(args.llbuild_build_dir, "lib") - return llbuild_libdir - --def llbuild_link_args(args): -+def llbuild_link_args(args, add_rpath=True): - build_flags = [] - llbuild_libdir = llbuild_lib_path(args) - if args.llbuild_link_framework: - build_flags.extend(["-Xlinker", "-F%s" % llbuild_libdir]) - else: - build_flags.extend(["-Xlinker", "-L%s" % llbuild_libdir]) -- build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", llbuild_libdir]) -+ if add_rpath: -+ build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", llbuild_libdir]) - return build_flags - - def write_self_hosting_script(path, args): -@@ -1246,7 +1247,7 @@ def main(): - build_flags.extend(["-Xlinker", "-L{}".format(faketoolchain_libdir)]) - - # Add an RPATH, so that the tests can be run directly. -- build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", faketoolchain_libdir]) -+ #build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", faketoolchain_libdir]) - - # Don't use GNU strerror_r on Android. - if 'ANDROID_DATA' in os.environ: -@@ -1272,7 +1273,7 @@ def main(): - build_flags.extend(["-Xlinker", "-rpath", "-Xlinker", rpath]) - - # Add llbuild link flags. -- build_flags.extend(llbuild_link_args(args)) -+ build_flags.extend(llbuild_link_args(args, False)) - - # Enable testing in release mode because SwiftPM's tests uses @testable imports. - # diff --git a/packages/swift/build.sh b/packages/swift/build.sh new file mode 100644 index 000000000..64a8e1599 --- /dev/null +++ b/packages/swift/build.sh @@ -0,0 +1,140 @@ +TERMUX_PKG_HOMEPAGE=https://www.swift.org/ +TERMUX_PKG_DESCRIPTION="Swift is a high-performance system programming language" +TERMUX_PKG_LICENSE="Apache-2.0, NCSA" +TERMUX_PKG_VERSION=5.2.1 +SWIFT_RELEASE="RELEASE" +TERMUX_PKG_SHA256=3488e920ad989b1c6a8d25ef241d356a9951184fefcad19e230e3263b6e80f48 +TERMUX_PKG_SRCURL=https://github.com/apple/swift/archive/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE.tar.gz +TERMUX_PKG_HOSTBUILD=true +TERMUX_PKG_DEPENDS="binutils-gold, libc++, ndk-sysroot, libandroid-glob, libandroid-spawn, libcurl, libicu, libsqlite, libuuid, libxml2, libdispatch, llbuild" +TERMUX_PKG_BUILD_DEPENDS="cmake, ninja, perl, pkg-config, python2, rsync" +TERMUX_PKG_BLACKLISTED_ARCHES="arm, i686, x86_64" +TERMUX_PKG_NO_STATICSPLIT=true + +SWIFT_COMPONENTS="autolink-driver;compiler;clang-resource-dir-symlink;swift-remote-mirror;parser-lib;license;sourcekit-inproc" +SWIFT_TOOLCHAIN_FLAGS="-R --no-assertions --llvm-targets-to-build='X86;ARM;AArch64' -j $TERMUX_MAKE_PROCESSES" +SWIFT_PATH_FLAGS="--build-subdir=. --install-destdir=/ --install-prefix=$TERMUX_PREFIX" + +if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then +SWIFT_ANDROID_NDK_FLAGS="--android --android-ndk $TERMUX_STANDALONE_TOOLCHAIN --android-arch $TERMUX_ARCH +--android-api-level $TERMUX_PKG_API_LEVEL --android-icu-uc $TERMUX_PREFIX/lib/libicuuc.so +--android-icu-uc-include $TERMUX_PREFIX/include/ --android-icu-i18n $TERMUX_PREFIX/lib/libicui18n.so +--android-icu-i18n-include $TERMUX_PREFIX/include/ --android-icu-data $TERMUX_PREFIX/lib/libicudata.so" +fi + +termux_step_post_extract_package() { + if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then + # The Swift build-script requires a particular organization of source directories, + # which the following sets up. + mkdir .temp + mv [a-zA-Z]* .temp/ + mv .temp swift + + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + termux_download \ + https://swift.org/builds/swift-$TERMUX_PKG_VERSION-release/ubuntu1804/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE-ubuntu18.04.tar.gz \ + $TERMUX_PKG_CACHEDIR/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE-ubuntu18.04.tar.gz \ + 3f7522163fc6999560ade1ac80ceac8d1f6eb9b050511cb81c53d41e9ac9a180 + fi + + declare -A library_checksums + library_checksums[swift-cmark]=ac18a4a55739af8afb9009f4d8d7643a78fda47a329e1b1f8c782122db88b3b1 + library_checksums[llvm-project]=f21cfa75413ab290991f28a05a975b15af9289140e2f595aa981e630496907e7 + library_checksums[swift-corelibs-libdispatch]=7bab5d4d1e8e0aea0d7fec80b1dbf7f897389d19566e02ef5cd0e7026b968f10 + library_checksums[swift-corelibs-foundation]=5a223f6398d5cedb94019f61beca69eb35473ca2cc65bcbd60d93248342f417d + library_checksums[swift-corelibs-xctest]=d25df8b4caaef8e8339ecb2344fd5cbbe10b2e0f33d9861b1ec8fdebf7364645 + library_checksums[swift-llbuild]=8812862ef27079fb41f13ac3e741a1e488bd321d79c6a57d026ca1c1e25d90c7 + library_checksums[swift-package-manager]=73e12edffce218d1fdfd626c2000a9d9f5805a946175899600b50379e885770e + + for library in "${!library_checksums[@]}"; do \ + termux_download \ + https://github.com/apple/$library/archive/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE.tar.gz \ + $TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz \ + ${library_checksums[$library]} + tar xf $TERMUX_PKG_CACHEDIR/$library-$TERMUX_PKG_VERSION.tar.gz + mv $library-swift-${TERMUX_PKG_VERSION}-$SWIFT_RELEASE $library + done + + mv swift-cmark cmark + mv swift-llbuild llbuild + mv swift-package-manager swiftpm + + # The Swift compiler searches for the clang headers so symlink against them. + local TERMUX_CLANG_VERSION=$(grep ^TERMUX_PKG_VERSION= $TERMUX_PKG_BUILDER_DIR/../libllvm/build.sh | cut -f2 -d=) + sed "s%\@TERMUX_CLANG_VERSION\@%${TERMUX_CLANG_VERSION}%g" $TERMUX_PKG_BUILDER_DIR/swift-stdlib-public-SwiftShims-CMakeLists.txt | \ + patch -p1 + + # The Swift package manager has to be pointed at the Termux prefix. + local TERMUX_APP_PREFIX=$(dirname $TERMUX_PREFIX) + sed "s%\@TERMUX_APP_PREFIX\@%${TERMUX_APP_PREFIX}%g" $TERMUX_PKG_BUILDER_DIR/swiftpm-Sources-Workspace-Destination.swift | \ + patch -p1 + + # The Swift build scripts still depend on Python 2, so make sure it's used. + ln -s $(which python2) $TERMUX_PKG_BUILDDIR/python + export PATH=$TERMUX_PKG_BUILDDIR:$PATH + fi +} + +termux_step_host_build() { + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + tar xf $TERMUX_PKG_CACHEDIR/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE-ubuntu18.04.tar.gz + local SWIFT_BINDIR="$TERMUX_PKG_HOSTBUILD_DIR/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE-ubuntu18.04/usr/bin" + + termux_setup_cmake + termux_setup_ninja + termux_setup_standalone_toolchain + + # Natively compile llvm-tblgen and some other files needed later, and cross-compile + # the Swift stdlib. + SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \ + -R --no-assertions -j $TERMUX_MAKE_PROCESSES $SWIFT_ANDROID_NDK_FLAGS $SWIFT_PATH_FLAGS \ + --build-runtime-with-host-compiler --skip-build-llvm --build-swift-tools=0 \ + --native-swift-tools-path=$SWIFT_BINDIR --native-llvm-tools-path=$SWIFT_BINDIR \ + --native-clang-tools-path=$SWIFT_BINDIR --build-swift-static-stdlib \ + --build-swift-static-sdk-overlay --stdlib-deployment-targets=android-$TERMUX_ARCH \ + --swift-primary-variant-sdk=ANDROID --swift-primary-variant-arch=$TERMUX_ARCH \ + --swift-install-components="stdlib;sdk-overlay" --install-swift \ + --host-cc=/usr/bin/clang-9 --host-cxx=/usr/bin/clang++-9 + fi +} + +termux_step_pre_configure() { + if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then + cd llbuild + # A single patch needed from the existing llbuild package + patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/lib-llvm-Support-CmakeLists.txt.patch + + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + cd .. + # Build patch needed only when cross-compiling the compiler. + sed "s%\@TERMUX_STANDALONE_TOOLCHAIN\@%${TERMUX_STANDALONE_TOOLCHAIN}%g" \ + $TERMUX_PKG_BUILDER_DIR/swift-utils-build-script-impl | \ + sed "s%\@TERMUX_PKG_API_LEVEL\@%${TERMUX_PKG_API_LEVEL}%g" | \ + sed "s%\@TERMUX_ARCH\@%${TERMUX_ARCH}%g" | patch -p1 + fi + fi +} + +termux_step_make() { + if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then + SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \ + $SWIFT_TOOLCHAIN_FLAGS $SWIFT_PATH_FLAGS --xctest -b -p --build-swift-static-stdlib \ + --build-swift-static-sdk-overlay --llvm-install-components=IndexStore \ + --install-swift --swift-install-components="$SWIFT_COMPONENTS;stdlib;sdk-overlay" \ + --install-libdispatch --install-foundation --install-xctest --install-swiftpm + else + SWIFT_BUILD_ROOT=$TERMUX_PKG_BUILDDIR $TERMUX_PKG_SRCDIR/swift/utils/build-script \ + $SWIFT_TOOLCHAIN_FLAGS $SWIFT_ANDROID_NDK_FLAGS $SWIFT_PATH_FLAGS \ + --build-toolchain-only --cross-compile-hosts=android-$TERMUX_ARCH \ + --build-swift-dynamic-stdlib=0 --build-swift-dynamic-sdk-overlay=0 \ + --llvm-install-components=IndexStore --swift-install-components="$SWIFT_COMPONENTS" \ + --install-swift + fi +} + +termux_step_make_install() { + if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then + mkdir -p $TERMUX_PREFIX/lib/swift/pm/llbuild + cp llbuild-android-$TERMUX_ARCH/lib/libllbuildSwift.so $TERMUX_PREFIX/lib/swift/pm/llbuild + fi +} diff --git a/packages/swift/foundation-rpath.patch b/packages/swift/foundation-rpath.patch new file mode 100644 index 000000000..7bc8bb230 --- /dev/null +++ b/packages/swift/foundation-rpath.patch @@ -0,0 +1,49 @@ +diff --git a/swift-corelibs-foundation/Foundation/CMakeLists.txt b/swift-corelibs-foundation/Foundation/CMakeLists.txt +index cf80e7dd..2cf41b62 100644 +--- a/swift-corelibs-foundation/Foundation/CMakeLists.txt ++++ b/swift-corelibs-foundation/Foundation/CMakeLists.txt +@@ -161,7 +161,7 @@ target_link_libraries(Foundation PUBLIC + swiftDispatch) + + # TODO(compnerd) properly propogate `BUILD_RPATH` to the target using CMake +-if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) ++if(NOT CMAKE_SYSTEM_NAME STREQUAL Android AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + target_link_options(Foundation PRIVATE + "SHELL:-Xlinker -rpath -Xlinker $") + endif() +@@ -173,6 +173,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows) + Shell32 + pathcch) + endif() ++target_link_options(Foundation PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(Foundation PROPERTIES + INSTALL_RPATH "$ORIGIN" + Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift +@@ -223,6 +224,7 @@ target_link_libraries(FoundationNetworking PRIVATE + ${ZLIB_LIBRARIES} + Foundation + CFURLSessionInterface) ++target_link_options(FoundationNetworking PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(FoundationNetworking PROPERTIES + INSTALL_RPATH "$ORIGIN" + Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift +@@ -248,6 +250,7 @@ target_link_libraries(FoundationXML PRIVATE + ${LIBXML2_LIBRARIES} + Foundation + CFXMLInterface) ++target_link_options(FoundationXML PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(FoundationXML PROPERTIES + INSTALL_RPATH "$ORIGIN" + Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift +diff --git a/swift-corelibs-foundation/Tools/plutil/CMakeLists.txt b/swift-corelibs-foundation/Tools/plutil/CMakeLists.txt +index bb746639..ff1b74e6 100644 +--- a/swift-corelibs-foundation/Tools/plutil/CMakeLists.txt ++++ b/swift-corelibs-foundation/Tools/plutil/CMakeLists.txt +@@ -3,6 +3,7 @@ add_executable(plutil + main.swift) + target_link_libraries(plutil PRIVATE + Foundation) ++target_link_options(plutil PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(plutil PROPERTIES + INSTALL_RPATH "$ORIGIN/../lib/swift/$") + diff --git a/packages/swift/libdispatch-rpath.patch b/packages/swift/libdispatch-rpath.patch new file mode 100644 index 000000000..d23435612 --- /dev/null +++ b/packages/swift/libdispatch-rpath.patch @@ -0,0 +1,25 @@ +diff --git a/swift-corelibs-libdispatch/src/CMakeLists.txt b/swift-corelibs-libdispatch/src/CMakeLists.txt +index c88b430..ac2e82c 100644 +--- a/swift-corelibs-libdispatch/src/CMakeLists.txt ++++ b/swift-corelibs-libdispatch/src/CMakeLists.txt +@@ -95,6 +95,8 @@ endif() + set_target_properties(dispatch PROPERTIES + POSITION_INDEPENDENT_CODE YES) + ++set_target_properties(dispatch PROPERTIES INSTALL_RPATH "$ORIGIN") ++ + target_include_directories(dispatch PUBLIC + ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR} +diff --git a/swift-corelibs-libdispatch/src/swift/CMakeLists.txt b/swift-corelibs-libdispatch/src/swift/CMakeLists.txt +index ba987e7..1c864fd 100644 +--- a/swift-corelibs-libdispatch/src/swift/CMakeLists.txt ++++ b/swift-corelibs-libdispatch/src/swift/CMakeLists.txt +@@ -59,4 +59,7 @@ if(NOT BUILD_SHARED_LIBS) + install(TARGETS DispatchStubs + EXPORT dispatchExports + DESTINATION ${INSTALL_TARGET_DIR}) ++else() ++ target_link_options(swiftDispatch PRIVATE "SHELL:-no-toolchain-stdlib-rpath") ++ set_target_properties(swiftDispatch PROPERTIES INSTALL_RPATH "$ORIGIN") + endif() diff --git a/packages/swift/llbuild-Package.swift.patch b/packages/swift/llbuild-Package.swift.patch new file mode 100644 index 000000000..072566fad --- /dev/null +++ b/packages/swift/llbuild-Package.swift.patch @@ -0,0 +1,19 @@ +diff --git a/llbuild/Package.swift b/llbuild/Package.swift +index 6141342..5e86282 100644 +--- a/llbuild/Package.swift ++++ b/llbuild/Package.swift +@@ -1,4 +1,4 @@ +-// swift-tools-version:5.0 ++// swift-tools-version:5.2 + + // This file defines Swift package manager support for llbuild. See: + // https://github.com/apple/swift-package-manager/tree/master/Documentation +@@ -150,7 +150,7 @@ let package = Package( + name: "llvmSupport", + dependencies: ["llvmDemangle"], + path: "lib/llvm/Support", +- linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS]))] ++ linkerSettings: [.linkedLibrary("ncurses", .when(platforms: [.linux, .macOS, .android]))] + ), + ], + cxxLanguageStandard: .cxx14 diff --git a/packages/swift/llbuild-products-llbuildSwift-CMakeLists.txt.patch b/packages/swift/llbuild-products-llbuildSwift-CMakeLists.txt.patch new file mode 100644 index 000000000..e5050ce4d --- /dev/null +++ b/packages/swift/llbuild-products-llbuildSwift-CMakeLists.txt.patch @@ -0,0 +1,15 @@ +diff --git a/llbuild/products/llbuildSwift/CMakeLists.txt b/llbuild/products/llbuildSwift/CMakeLists.txt +index 1e6dad1..d5cc02f 100644 +--- a/llbuild/products/llbuildSwift/CMakeLists.txt ++++ b/llbuild/products/llbuildSwift/CMakeLists.txt +@@ -57,8 +57,9 @@ else() + swiftDispatch + Foundation) + if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) ++ target_link_options(llbuildSwift PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(llbuildSwift PROPERTIES +- INSTALL_RPATH "$ORIGIN:$ORIGIN/../../$") ++ INSTALL_RPATH "$ORIGIN/../../$") + endif() + endif() + set_target_properties(llbuildSwift PROPERTIES diff --git a/disabled-packages/swift/llvm-project-clang-lib-Driver-ToolChain.cpp.patch b/packages/swift/llvm-project-clang-lib-Driver-ToolChain.cpp.patch similarity index 100% rename from disabled-packages/swift/llvm-project-clang-lib-Driver-ToolChain.cpp.patch rename to packages/swift/llvm-project-clang-lib-Driver-ToolChain.cpp.patch diff --git a/packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch b/packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch new file mode 100644 index 000000000..94ddf5706 --- /dev/null +++ b/packages/swift/llvm-project-clang-lib-Driver-ToolChains-Linux.cpp.patch @@ -0,0 +1,30 @@ +diff --git a/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp b/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp +index bff1ab1009be..6b127b5c11aa 100644 +--- a/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/llvm-project/clang/lib/Driver/ToolChains/Linux.cpp +@@ -403,7 +403,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + if (Triple.getVendor() == llvm::Triple::OpenEmbedded && + Triple.isArch64Bit()) + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir, Paths); +- else ++ else if (!IsAndroid) + addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); + if (IsRISCV) { + StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple); +@@ -451,7 +451,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, D.Dir + "/../lib", Paths); + + addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ bool nativeBuild = Triple == llvm::Triple(llvm::sys::getDefaultTargetTriple()); ++ if (nativeBuild || !IsAndroid) ++ addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ ++ if (IsAndroid) { ++ addPathIfExists(D, SysRoot + "/usr/" + MultiarchTriple + "/lib", Paths); ++ addPathIfExists(D, "/system/" + OSLibDir, Paths); ++ ExtraOpts.push_back("-rpath=" + SysRoot + "/usr/lib"); ++ } + } + + ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const { diff --git a/disabled-packages/swift/llvm-project-clang-tools-IndexStore-CMakeLists.txt.patch b/packages/swift/llvm-project-clang-tools-IndexStore-CMakeLists.txt.patch similarity index 100% rename from disabled-packages/swift/llvm-project-clang-tools-IndexStore-CMakeLists.txt.patch rename to packages/swift/llvm-project-clang-tools-IndexStore-CMakeLists.txt.patch diff --git a/packages/swift/llvm-project-llvm-include-llvm-ADT-Triple.h.patch b/packages/swift/llvm-project-llvm-include-llvm-ADT-Triple.h.patch new file mode 100644 index 000000000..ddbc4c19a --- /dev/null +++ b/packages/swift/llvm-project-llvm-include-llvm-ADT-Triple.h.patch @@ -0,0 +1,15 @@ +diff --git a/llvm-project/llvm/include/llvm/ADT/Triple.h b/llvm-project/llvm/include/llvm/ADT/Triple.h +index 926039ca5982..0e4b55733f5e 100644 +--- a/llvm-project/llvm/include/llvm/ADT/Triple.h ++++ b/llvm-project/llvm/include/llvm/ADT/Triple.h +@@ -666,6 +666,10 @@ public: + unsigned Env[3]; + getEnvironmentVersion(Env[0], Env[1], Env[2]); + ++ // If not specified, set a default Android API. ++ if (Env[0] == 0) ++ Env[0] = __ANDROID_API__; ++ + // 64-bit targets did not exist before API level 21 (Lollipop). + if (isArch64Bit() && Env[0] < 21) + Env[0] = 21; diff --git a/packages/swift/swift-build-script.patch b/packages/swift/swift-build-script.patch new file mode 100644 index 000000000..25a37efa3 --- /dev/null +++ b/packages/swift/swift-build-script.patch @@ -0,0 +1,193 @@ +diff --git a/swift/utils/build-script b/swift/utils/build-script +index b1d060328bc..218c9215260 100755 +--- a/swift/utils/build-script ++++ b/swift/utils/build-script +@@ -221,7 +221,11 @@ class BuildScriptInvocation(object): + android_tgts = [tgt for tgt in args.stdlib_deployment_targets + if StdlibDeploymentTarget.Android.contains(tgt)] + if not args.android and len(android_tgts) > 0: +- args.android = True ++ # If building natively on an Android host, avoid the NDK ++ # cross-compilation configuration. ++ if not StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget ++ .host_target().name): ++ args.android = True + args.build_android = False + + # Include the Darwin supported architectures in the CMake options. +@@ -572,6 +576,10 @@ class BuildScriptInvocation(object): + "--android-icu-i18n-include", args.android_icu_i18n_include, + "--android-icu-data", args.android_icu_data, + ] ++ # If building natively on an Android host, only pass the API level. ++ if StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget ++ .host_target().name): ++ impl_args += ["--android-api-level", args.android_api_level] + if args.android_deploy_device_path: + impl_args += [ + "--android-deploy-device-path", +diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl +index 7f39ff97459..9e5a646b668 100755 +--- a/swift/utils/build-script-impl ++++ b/swift/utils/build-script-impl +@@ -690,6 +690,8 @@ function set_build_options_for_host() { + ;; + android-aarch64) + SWIFT_HOST_VARIANT_ARCH="aarch64" ++ SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android" ++ llvm_target_arch="AArch64" + ;; + esac + ;; +@@ -703,6 +705,8 @@ 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})" ++ -DDEFAULT_SYSROOT:STRING="$(dirname @TERMUX_PREFIX@)" ++ -DCOMPILER_RT_INCLUDE_TESTS:BOOL="OFF" + ) + + # If we are asked to not generate test targets for LLVM and or Swift, +@@ -1028,7 +1032,7 @@ function make_relative_symlink() { + CROSS_COMPILE_HOSTS=($CROSS_COMPILE_HOSTS) + for t in "${CROSS_COMPILE_HOSTS[@]}"; do + case ${t} in +- iphone* | appletv* | watch* | linux-armv6 | linux-armv7 ) ++ iphone* | appletv* | watch* | linux-armv6 | linux-armv7 | android-aarch64 ) + ;; + *) + echo "Unknown host to cross-compile for: ${t}" +@@ -1060,7 +1064,7 @@ function get_host_install_destdir() { + # If this is one of the hosts we should lipo, install in to a temporary subdirectory. + local host_install_destdir="${BUILD_DIR}/intermediate-install/${host}" + else +- local host_install_destdir="${INSTALL_DESTDIR}/${host}" ++ local host_install_destdir="${INSTALL_DESTDIR}" + fi + else + local host_install_destdir="${INSTALL_DESTDIR}" +@@ -1645,6 +1645,13 @@ + -DCMAKE_BUILD_TYPE:STRING="${CMARK_BUILD_TYPE}" + "${cmark_cmake_options[@]}" + ) ++ if [[ $(is_cross_tools_host ${host}) ]] ; then ++ cmake_options=( ++ "${cmake_options[@]}" ++ -DCMAKE_C_FLAGS="$(cmark_c_flags ${host}) --target=$CCTERMUX_HOST_PLATFORM" ++ -DCMAKE_CXX_FLAGS="$(cmark_c_flags ${host}) --target=$CCTERMUX_HOST_PLATFORM" ++ ) ++ fi + skip_build=${SKIP_BUILD_CMARK} + build_targets=(all) + ;; +@@ -1665,6 +1669,10 @@ for host in "${ALL_HOSTS[@]}"; do + fi + fi + ++ if [[ ("${CROSS_COMPILE_HOSTS}" && "${host}" == "${LOCAL_HOST}") ]] ; then ++ skip_build=true ++ fi ++ + if [ "${HOST_LIBTOOL}" ] ; then + cmake_options=( + "${cmake_options[@]}" +@@ -1768,12 +1777,18 @@ for host in "${ALL_HOSTS[@]}"; do + + swift) + ++ if [[ "${ANDROID_API_LEVEL}" ]]; then ++ cmake_options=( ++ "${cmake_options[@]}" ++ -DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}" ++ ) ++ fi ++ + if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then + cmake_options=( + "${cmake_options[@]}" + -DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}" + -DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}" +- -DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}" + -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC:STRING="${ANDROID_ICU_UC}" + -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}" + -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_I18N:STRING="${ANDROID_ICU_I18N}" +@@ -1973,7 +1997,11 @@ for host in "${ALL_HOSTS[@]}"; do + ) + fi + ++ if [[ $(is_cross_tools_host ${host}) ]] ; then ++ build_targets=(all) ++ else + build_targets=(all "${SWIFT_STDLIB_TARGETS[@]}") ++ fi + if [[ $(true_false "${build_perf_testsuite_this_time}") == "TRUE" ]]; then + native_swift_tools_path="$(build_directory_bin ${LOCAL_HOST} swift)" + cmake_options=( +@@ -1984,6 +1999,9 @@ for host in "${ALL_HOSTS[@]}"; do + "${SWIFT_BENCHMARK_TARGETS[@]}") + fi + skip_build=${SKIP_BUILD_SWIFT} ++ if [[ "${CROSS_COMPILE_HOSTS}" && "${host}" == "${LOCAL_HOST}" ]] ; then ++ skip_build=true ++ fi + ;; + lldb) + if [ ! -d "${LLDB_SOURCE_DIR}" ]; then +@@ -2446,6 +2456,8 @@ for host in "${ALL_HOSTS[@]}"; do + HOST_CXX_HEADERS_DIR="$HOST_CXX_DIR/../../usr/include/c++" + elif [[ "$(uname -s)" == "Haiku" ]] ; then + HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++" ++ elif [[ "${ANDROID_DATA}" ]] ; then ++ HOST_CXX_HEADERS_DIR="$PREFIX/include/c++" + else # Linux + HOST_CXX_HEADERS_DIR="/usr/include/c++" + fi +@@ -2934,8 +2941,12 @@ + if [[ "${LLVM_INSTALL_COMPONENTS}" == "all" ]]; then + INSTALL_TARGETS=install + else ++ if [[ ("${CROSS_COMPILE_HOSTS}" && "${host}" == "${LOCAL_HOST}") ]] ; then ++ continue ++ else + INSTALL_TARGETS=install-$(echo ${LLVM_INSTALL_COMPONENTS} | sed -E 's/;/ install-/g') + fi ++ fi + ;; + libcxx) + if [[ -z "${INSTALL_LIBCXX}" ]] ; then +@@ -2941,7 +2954,11 @@ for host in "${ALL_HOSTS[@]}"; do + if [[ -z "${INSTALL_SWIFT}" ]] ; then + continue + fi ++ if [[ ("${CROSS_COMPILE_HOSTS}" && "${host}" == "${LOCAL_HOST}") ]] ; then ++ continue ++ else + INSTALL_TARGETS=install-swift-components ++ fi + ;; + llbuild) + if [[ -z "${INSTALL_LLBUILD}" ]] ; then +diff --git a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py +index 475483618f1..2bea230012b 100644 +--- a/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py ++++ b/swift/utils/swift_build_support/swift_build_support/products/swiftpm.py +@@ -32,7 +32,7 @@ class SwiftPM(product.Product): + script_path = os.path.join( + self.source_dir, 'Utilities', 'new-bootstrap') + toolchain_path = self.install_toolchain_path() +- swiftc = os.path.join(toolchain_path, "usr", "bin", "swiftc") ++ swiftc = os.path.join(toolchain_path, "bin", "swiftc") + + # FIXME: We require llbuild build directory in order to build. Is + # there a better way to get this? +diff --git a/swift/utils/swift_build_support/swift_build_support/targets.py b/swift/utils/swift_build_support/swift_build_support/targets.py +index 5e4f30ef194..16ef23f40da 100644 +--- a/swift/utils/swift_build_support/swift_build_support/targets.py ++++ b/swift/utils/swift_build_support/swift_build_support/targets.py +@@ -280,4 +280,6 @@ def toolchain_path(install_destdir, install_prefix): + if platform.system() == 'Darwin': + # The prefix is an absolute path, so concatenate without os.path. + built_toolchain_path += darwin_toolchain_prefix(install_prefix) ++ else: ++ built_toolchain_path += install_prefix + return built_toolchain_path diff --git a/packages/swift/swift-build-script.patch.beforehostbuild b/packages/swift/swift-build-script.patch.beforehostbuild new file mode 100644 index 000000000..403e0170d --- /dev/null +++ b/packages/swift/swift-build-script.patch.beforehostbuild @@ -0,0 +1,17 @@ +diff --git a/swift/utils/gen-static-stdlib-link-args b/swift/utils/gen-static-stdlib-link-args +index 0fa009d67d3..abd98c2493f 100755 +--- a/swift/utils/gen-static-stdlib-link-args ++++ b/swift/utils/gen-static-stdlib-link-args +@@ -60,11 +60,8 @@ function write_linkfile { + fi + cat >$OUTPUTFILE < + $ + DESTINATION ${SOURCEKIT_RUNTIME_DIR} + COMPONENT sourcekit-inproc) ++ endif() + if(SWIFT_HOST_VARIANT_SDK STREQUAL WINDOWS) + swift_install_in_component(FILES + $ +diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake +index b40bd4d881e..8c51c6b6857 100644 +--- a/swift/cmake/modules/AddSwift.cmake ++++ b/swift/cmake/modules/AddSwift.cmake +@@ -123,6 +123,10 @@ function(_add_variant_c_compile_link_flags) + endif() + endif() + ++ if("${CFLAGS_SDK}" STREQUAL "ANDROID") ++ set(DEPLOYMENT_VERSION "${SWIFT_SDK_${CFLAGS_SDK}_DEPLOYMENT_VERSION}") ++ endif() ++ + # MSVC, clang-cl, gcc don't understand -target. + if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND + NOT SWIFT_COMPILER_IS_MSVC_LIKE) +@@ -480,10 +480,10 @@ function(_add_variant_link_flags) + list(APPEND library_search_directories + ${CMAKE_BINARY_DIR}/winsdk_lib_${LFLAGS_ARCH}_symlinks) + elseif("${LFLAGS_SDK}" STREQUAL "HAIKU") +- list(APPEND link_libraries "bsd" "atomic") ++ list(APPEND link_libraries "bsd") + list(APPEND result "-Wl,-Bsymbolic") + elseif("${LFLAGS_SDK}" STREQUAL "ANDROID") +- list(APPEND link_libraries "dl" "log" "atomic") ++ list(APPEND link_libraries "dl" "log") + # We need to add the math library, which is linked implicitly by libc++ + list(APPEND result "-lm") + +@@ -491,11 +491,6 @@ function(_add_variant_link_flags) + swift_android_cxx_libraries_for_arch(${LFLAGS_ARCH} cxx_link_libraries) + list(APPEND link_libraries ${cxx_link_libraries}) + +- # link against the ICU libraries +- list(APPEND link_libraries +- ${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_I18N} +- ${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_UC}) +- + swift_android_lib_for_arch(${LFLAGS_ARCH} ${LFLAGS_ARCH}_LIB) + foreach(path IN LISTS ${LFLAGS_ARCH}_LIB) + list(APPEND library_search_directories ${path}) +@@ -1114,11 +1113,14 @@ function(_add_swift_library_single target name) + endif() + # Only set the install RPATH if cross-compiling the host tools, in which + # case both the NDK and Sysroot paths must be set. +- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "" AND +- NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") ++ if(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set_target_properties("${target}" + PROPERTIES + INSTALL_RPATH "$ORIGIN") ++ else() ++ set_target_properties("${target}" ++ PROPERTIES ++ INSTALL_RPATH "@TERMUX_PREFIX@/lib:$ORIGIN") + endif() + endif() + +@@ -1909,6 +1903,14 @@ function(add_swift_target_library name) + endif() + endif() + ++ set(SWIFTLIB_${sdk}_SOURCES ${SWIFTLIB_SOURCES}) ++ if(name STREQUAL swiftRuntime) ++ if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") ++ list(REMOVE_ITEM SWIFTLIB_${sdk}_SOURCES ImageInspectionELF.cpp) ++ swift_runtime_static_libraries(${sdk}) ++ endif() ++ endif() ++ + set(sdk_supported_archs + ${SWIFT_SDK_${sdk}_ARCHITECTURES} + ${SWIFT_SDK_${sdk}_MODULE_ARCHITECTURES}) +@@ -1937,6 +1931,12 @@ function(add_swift_target_library name) + set(swiftlib_module_dependency_targets) + set(swiftlib_private_link_libraries_targets) + ++ if(name STREQUAL swiftCore) ++ # This initializes swiftlib_private_link_libraries_targets for swiftCore, ++ # so don't move it away from the variable declaration just above. ++ swift_core_private_libraries(${sdk} ${arch} swiftlib_private_link_libraries_targets) ++ endif() ++ + if(NOT BUILD_STANDALONE) + foreach(mod ${swiftlib_module_depends_flattened}) + list(APPEND swiftlib_module_dependency_targets +@@ -1972,7 +1981,7 @@ function(add_swift_target_library name) + ${SWIFTLIB_STATIC_keyword} + ${SWIFTLIB_OBJECT_LIBRARY_keyword} + ${SWIFTLIB_INSTALL_WITH_SHARED_keyword} +- ${SWIFTLIB_SOURCES} ++ ${SWIFTLIB_${sdk}_SOURCES} + TARGET_LIBRARY + MODULE_TARGET ${MODULE_VARIANT_NAME} + SDK ${sdk} +diff --git a/swift/cmake/modules/SwiftAndroidSupport.cmake b/swift/cmake/modules/SwiftAndroidSupport.cmake +index 9379031947d..91cecf46a37 100644 +--- a/swift/cmake/modules/SwiftAndroidSupport.cmake ++++ b/swift/cmake/modules/SwiftAndroidSupport.cmake +@@ -1,8 +1,7 @@ + function(swift_android_libcxx_include_paths var) + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(${var} +- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include" +- "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include" ++ "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/c++/v1" + PARENT_SCOPE) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(${var} +@@ -89,7 +88,7 @@ function(swift_android_cxx_libraries_for_arch arch libraries_var_name) + message(SEND_ERROR "unknown architecture (${arch}) when cross-compiling for Android") + endif() + +- set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${cxx_arch}") ++ set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/lib/aarch64-linux-android") + list(APPEND link_libraries ${android_libcxx_path}/libc++abi.a + ${android_libcxx_path}/libc++_shared.so) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") +diff --git a/swift/cmake/modules/SwiftConfigureSDK.cmake b/swift/cmake/modules/SwiftConfigureSDK.cmake +index 3a87bfcd80b..89e9827db6c 100644 +--- a/swift/cmake/modules/SwiftConfigureSDK.cmake ++++ b/swift/cmake/modules/SwiftConfigureSDK.cmake +@@ -234,7 +234,7 @@ macro(configure_sdk_unix name architectures) + set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "aarch64-linux-android") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "aarch64") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64") ++ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/sysroot") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}") + else() +@@ -275,8 +275,9 @@ macro(configure_sdk_unix name architectures) + "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86_64-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}") + else() + set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH +- "${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}") ++ "${SWIFT_ANDROID_NDK_PATH}") + endif() ++ set(SWIFT_SDK_ANDROID_DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL}) + else() + set(SWIFT_SDK_${prefix}_ARCH_${arch}_PATH "/" CACHE STRING "CMAKE_SYSROOT for ${prefix} ${arch}") + +diff --git a/swift/lib/Driver/CMakeLists.txt b/swift/lib/Driver/CMakeLists.txt +index 448f5044b70..e665dfcfefe 100644 +--- a/swift/lib/Driver/CMakeLists.txt ++++ b/swift/lib/Driver/CMakeLists.txt +@@ -27,42 +27,3 @@ target_link_libraries(swiftDriver PRIVATE + swiftAST + swiftBasic + swiftOption) +- +-# Generate the static-stdlib-args.lnk file used by -static-stdlib option +-# for 'GenericUnix' (eg linux) +-if(SWIFT_BUILD_STATIC_STDLIB) +- set(static_stdlib_lnk_file_list) +- foreach(sdk ${SWIFT_CONFIGURED_SDKS}) +- if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF") +- string(TOLOWER "${sdk}" lowercase_sdk) +- if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB) +- set(ICU_STATICLIB "TRUE") +- else() +- set(ICU_STATICLIB "FALSE") +- find_package(ICU REQUIRED COMPONENTS uc i18n) +- get_filename_component(ICU_UC_LIBDIR "${ICU_UC_LIBRARIES}" DIRECTORY) +- get_filename_component(ICU_I18N_LIBDIR "${ICU_I18N_LIBRARIES}" DIRECTORY) +- endif() +- set(linkfile "${lowercase_sdk}/static-stdlib-args.lnk") +- add_custom_command_target(swift_static_stdlib_${sdk}_args +- COMMAND +- "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args" +- "${sdk}" +- "${SWIFTSTATICLIB_DIR}/${linkfile}" +- "${ICU_STATICLIB}" +- "${ICU_UC_LIBDIR}" +- "${ICU_I18N_LIBDIR}" +- OUTPUT +- "${SWIFTSTATICLIB_DIR}/${linkfile}" +- DEPENDS +- "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args") +- +- list(APPEND static_stdlib_lnk_file_list ${swift_static_stdlib_${sdk}_args}) +- swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" +- DESTINATION "lib/swift_static/${lowercase_sdk}" +- COMPONENT stdlib) +- endif() +- endforeach() +- add_custom_target(swift_static_lnk_args ALL DEPENDS ${static_stdlib_lnk_file_list}) +- add_dependencies(stdlib swift_static_lnk_args) +-endif() +diff --git a/swift/stdlib/CMakeLists.txt b/swift/stdlib/CMakeLists.txt +index 9f3cf240d3d..d2ce14d5f47 100644 +--- a/swift/stdlib/CMakeLists.txt ++++ b/swift/stdlib/CMakeLists.txt +@@ -83,6 +83,43 @@ if(SWIFT_BUILD_STATIC_STDLIB) + else() + list(APPEND SWIFT_STDLIB_LIBRARY_BUILD_TYPES STATIC) + endif() ++ ++ # Generate the static-stdlib-args.lnk file used by -static-stdlib option ++ # for 'GenericUnix' (eg linux) ++ set(static_stdlib_lnk_file_list) ++ foreach(sdk ${SWIFT_SDKS}) ++ if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF") ++ string(TOLOWER "${sdk}" lowercase_sdk) ++ if(SWIFT_${SWIFT_HOST_VARIANT_SDK}_${SWIFT_HOST_VARIANT_ARCH}_ICU_STATICLIB) ++ set(ICU_STATICLIB "TRUE") ++ else() ++ set(ICU_STATICLIB "FALSE") ++ find_package(ICU REQUIRED COMPONENTS uc i18n) ++ get_filename_component(ICU_UC_LIBDIR "${ICU_UC_LIBRARIES}" DIRECTORY) ++ get_filename_component(ICU_I18N_LIBDIR "${ICU_I18N_LIBRARIES}" DIRECTORY) ++ endif() ++ set(linkfile "${lowercase_sdk}/static-stdlib-args.lnk") ++ add_custom_command_target(swift_static_stdlib_${sdk}_args ++ COMMAND ++ "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args" ++ "${sdk}" ++ "${SWIFTSTATICLIB_DIR}/${linkfile}" ++ "${ICU_STATICLIB}" ++ "${ICU_UC_LIBDIR}" ++ "${ICU_I18N_LIBDIR}" ++ OUTPUT ++ "${SWIFTSTATICLIB_DIR}/${linkfile}" ++ DEPENDS ++ "${SWIFT_SOURCE_DIR}/utils/gen-static-stdlib-link-args") ++ ++ list(APPEND static_stdlib_lnk_file_list ${swift_static_stdlib_${sdk}_args}) ++ swift_install_in_component(FILES "${SWIFTSTATICLIB_DIR}/${linkfile}" ++ DESTINATION "lib/swift_static/${lowercase_sdk}" ++ COMPONENT stdlib) ++ endif() ++ endforeach() ++ add_custom_target(swift_static_lnk_args ALL DEPENDS ${static_stdlib_lnk_file_list}) ++ add_dependencies(stdlib swift_static_lnk_args) + endif() + + function(swift_create_stdlib_targets name variant define_all_alias) +diff --git a/swift/stdlib/public/Platform/CMakeLists.txt b/swift/stdlib/public/Platform/CMakeLists.txt +index 90fba95ec1b..48c39a7b9a1 100644 +--- a/swift/stdlib/public/Platform/CMakeLists.txt ++++ b/swift/stdlib/public/Platform/CMakeLists.txt +@@ -86,25 +86,29 @@ foreach(sdk ${SWIFT_SDKS}) + OUTPUT "${glibc_modulemap_out}" + FLAGS + "-DCMAKE_SDK=${sdk}" ++ "-DTERMUX_INCLUDE_PATH=@TERMUX_PREFIX@/include" + "-DGLIBC_INCLUDE_PATH=${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}" + "-DGLIBC_ARCH_INCLUDE_PATH=${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY}") + + list(APPEND glibc_modulemap_target_list ${glibc_modulemap_target}) + +- # If this SDK is a target for a non-native host, create a native modulemap +- # without a sysroot prefix. This is the one we'll install instead. +- if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/") ++ # If this SDK is a target for a non-native host, except if it's for Android ++ # with its own native sysroot, create a native modulemap without a sysroot ++ # prefix. This is the one we'll install instead. ++ if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/" AND ++ NOT (${sdk} STREQUAL ANDROID AND NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")) + set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/glibc.modulemap") + +- string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" +- "" absolute_libc_include_path "${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}") +- string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" +- "" absolute_libc_arch_include_path ${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY}) ++ string(REPLACE "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/usr" ++ "@TERMUX_PREFIX@" absolute_libc_include_path "${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}") ++ string(REPLACE "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}/usr" ++ "@TERMUX_PREFIX@" absolute_libc_arch_include_path ${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY}) + + handle_gyb_source_single(glibc_modulemap_native_target + SOURCE "${glibc_modulemap_source}" + OUTPUT "${glibc_sysroot_relative_modulemap_out}" + FLAGS "-DCMAKE_SDK=${sdk}" ++ "-DTERMUX_INCLUDE_PATH=@TERMUX_PREFIX@/include" + "-DGLIBC_INCLUDE_PATH=${absolute_libc_include_path}" + "-DGLIBC_ARCH_INCLUDE_PATH=${absolute_libc_arch_include_path}") + +diff --git a/swift/stdlib/public/core/CMakeLists.txt b/swift/stdlib/public/core/CMakeLists.txt +index 7ab092655c7..494d4d62aa3 100644 +--- a/swift/stdlib/public/core/CMakeLists.txt ++++ b/swift/stdlib/public/core/CMakeLists.txt +@@ -226,11 +226,9 @@ set(SWIFTLIB_GYB_SOURCES + set(GROUP_INFO_JSON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/GroupInfo.json) + set(swift_core_link_flags "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}") + set(swift_core_framework_depends) +-set(swift_core_private_link_libraries) + set(swift_stdlib_compile_flags "${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}") + if(SWIFT_PRIMARY_VARIANT_SDK IN_LIST SWIFT_APPLE_PLATFORMS) + list(APPEND swift_core_link_flags "-all_load") +- list(APPEND swift_core_private_link_libraries icucore) + else() + # With the GNU linker the equivalent of -all_load is to tell the linker + # --whole-archive before the archive and --no-whole-archive after (without +@@ -243,35 +241,42 @@ else() + # effort has been completed. + #set(LINK_FLAGS + # -Wl,--whole-archive swiftRuntime -Wl,--no-whole-archive) +- if("${SWIFT_PATH_TO_LIBICU_BUILD}" STREQUAL "") +- list(APPEND swift_core_private_link_libraries +- ${SWIFT_${SWIFT_PRIMARY_VARIANT_SDK}_${SWIFT_PRIMARY_VARIANT_ARCH}_ICU_UC} +- ${SWIFT_${SWIFT_PRIMARY_VARIANT_SDK}_${SWIFT_PRIMARY_VARIANT_ARCH}_ICU_I18N}) ++endif() ++ ++function(swift_core_private_libraries sdk arch libraries_var_name) ++ set(private_link_libraries) ++ if(${sdk} IN_LIST SWIFT_APPLE_PLATFORMS) ++ list(APPEND private_link_libraries icucore) + else() +- list(APPEND swift_core_private_link_libraries -licui18nswift -licuucswift -licudataswift) ++ ++ ++ if(${sdk} STREQUAL ${SWIFT_HOST_VARIANT_SDK} AND NOT "${SWIFT_PATH_TO_LIBICU_BUILD}" STREQUAL "") ++ list(APPEND private_link_libraries -licui18nswift -licuucswift -licudataswift) ++ else() ++ list(APPEND private_link_libraries ${SWIFT_${sdk}_${arch}_ICU_UC} ++ ${SWIFT_${sdk}_${arch}_ICU_I18N}) ++ endif() + endif() +-endif() + +-if(SWIFT_PRIMARY_VARIANT_SDK STREQUAL ANDROID) +- # workaround for libatomic needing to be after object files for swiftCore.so +- list(APPEND swift_core_private_link_libraries atomic) +-elseif(SWIFT_PRIMARY_VARIANT_SDK STREQUAL CYGWIN) +- # TODO(compnerd) cache this variable to permit re-configuration +- execute_process(COMMAND "cygpath" "-u" "$ENV{SYSTEMROOT}" OUTPUT_VARIABLE ENV_SYSTEMROOT) +- list(APPEND swift_core_private_link_libraries "${ENV_SYSTEMROOT}/system32/psapi.dll") +-elseif(SWIFT_PRIMARY_VARIANT_SDK STREQUAL FREEBSD) +- find_library(EXECINFO_LIBRARY execinfo) +- list(APPEND swift_core_private_link_libraries ${EXECINFO_LIBRARY}) +- # workaround for libatomic needing to be after object files for swiftCore.so +- list(APPEND swift_core_private_link_libraries +- ${SWIFTLIB_DIR}/clang/lib/freebsd/libclang_rt.builtins-${SWIFT_PRIMARY_VARIANT_ARCH}.a) +-elseif(SWIFT_PRIMARY_VARIANT_SDK STREQUAL LINUX) +- if(SWIFT_BUILD_STATIC_STDLIB) +- list(APPEND swift_core_private_link_libraries swiftImageInspectionShared) ++ if(${sdk} STREQUAL CYGWIN) ++ if(${sdk} STREQUAL ${SWIFT_HOST_VARIANT_SDK}) ++ # TODO(compnerd) cache this variable to permit re-configuration ++ execute_process(COMMAND "cygpath" "-u" "$ENV{SYSTEMROOT}" OUTPUT_VARIABLE ENV_SYSTEMROOT) ++ list(APPEND private_link_libraries "${ENV_SYSTEMROOT}/system32/psapi.dll") ++ else() ++ message(FATAL_ERROR "CYGWIN cross-compilation doesn't know where to find psapi.dll.") ++ endif() ++ elseif(${sdk} STREQUAL FREEBSD) ++ find_library(EXECINFO_LIBRARY execinfo) ++ list(APPEND private_link_libraries ${EXECINFO_LIBRARY}) ++ elseif(${sdk} STREQUAL LINUX AND SWIFT_BUILD_STATIC_STDLIB) ++ list(APPEND private_link_libraries swiftImageInspectionShared) ++ elseif(${sdk} STREQUAL WINDOWS) ++ list(APPEND private_link_libraries shell32;DbgHelp) + endif() +-elseif(SWIFT_PRIMARY_VARIANT_SDK STREQUAL WINDOWS) +- list(APPEND swift_core_private_link_libraries shell32;DbgHelp) +-endif() ++ ++ set(${libraries_var_name} ${private_link_libraries} PARENT_SCOPE) ++endfunction() + + option(SWIFT_CHECK_ESSENTIAL_STDLIB + "Check core standard library layering by linking its essential subset" +@@ -312,8 +317,6 @@ add_swift_target_library(swiftCore + ${swift_stdlib_compile_flags} -Xcc -DswiftCore_EXPORTS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS} + LINK_FLAGS + ${swift_core_link_flags} +- PRIVATE_LINK_LIBRARIES +- ${swift_core_private_link_libraries} + INCORPORATE_OBJECT_LIBRARIES + swiftRuntime swiftStdlibStubs + FRAMEWORK_DEPENDS +diff --git a/swift/stdlib/public/runtime/CMakeLists.txt b/swift/stdlib/public/runtime/CMakeLists.txt +index 001d97d5174..0b51e56f631 100644 +--- a/swift/stdlib/public/runtime/CMakeLists.txt ++++ b/swift/stdlib/public/runtime/CMakeLists.txt +@@ -88,9 +88,7 @@ set(swift_runtime_library_compile_flags ${swift_runtime_compile_flags}) + list(APPEND swift_runtime_library_compile_flags -DswiftCore_EXPORTS) + list(APPEND swift_runtime_library_compile_flags -I${SWIFT_SOURCE_DIR}/include) + +-set(sdk "${SWIFT_HOST_VARIANT_SDK}") +-if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") +- list(REMOVE_ITEM swift_runtime_sources ImageInspectionELF.cpp) ++function(swift_runtime_static_libraries sdk) + set(static_binary_lnk_file_list) + string(TOLOWER "${sdk}" lowercase_sdk) + +@@ -99,6 +97,7 @@ if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") + ImageInspectionELF.cpp + C_COMPILE_FLAGS ${swift_runtime_library_compile_flags} + LINK_FLAGS ${swift_runtime_linker_flags} ++ TARGET_SDKS ${sdk} + SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS} + INSTALL_IN_COMPONENT stdlib) + +@@ -149,7 +148,7 @@ if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") + DESTINATION "lib/swift_static/${lowercase_sdk}" + COMPONENT stdlib) + add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list}) +- foreach(arch IN LISTS SWIFT_SDK_LINUX_ARCHITECTURES) ++ foreach(arch IN LISTS SWIFT_SDK_${sdk}_ARCHITECTURES) + add_dependencies(static_binary_magic ${swift_image_inspection_${arch}_static}) + endforeach() + add_dependencies(static_binary_magic ${swift_image_inspection_static_primary_arch}) +@@ -159,9 +158,10 @@ if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX") + ImageInspectionELF.cpp + C_COMPILE_FLAGS ${swift_runtime_library_compile_flags} + LINK_FLAGS ${swift_runtime_linker_flags} ++ TARGET_SDKS ${sdk} + SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS} + INSTALL_IN_COMPONENT never_install) +-endif() ++endfunction() + + add_swift_target_library(swiftRuntime OBJECT_LIBRARY + ${swift_runtime_sources} +@@ -174,7 +174,7 @@ add_swift_target_library(swiftRuntime OBJECT_LIBRARY + + set(ELFISH_SDKS) + set(COFF_SDKS) +-foreach(sdk ${SWIFT_CONFIGURED_SDKS}) ++foreach(sdk ${SWIFT_SDKS}) + if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF") + list(APPEND ELFISH_SDKS ${sdk}) + elseif("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "COFF") +@@ -201,7 +201,7 @@ add_swift_target_library(swiftImageRegistrationObjectCOFF + SWIFT_COMPILE_FLAGS ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS} + INSTALL_IN_COMPONENT none) + +-foreach(sdk ${SWIFT_CONFIGURED_SDKS}) ++foreach(sdk ${SWIFT_SDKS}) + foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) + set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}") + set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}") +diff --git a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +index 8efd5971030..ab306f47fd8 100644 +--- a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake ++++ b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +@@ -164,7 +164,7 @@ macro(add_sourcekit_library name) + if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + if(SOURCEKITLIB_SHARED) + set_target_properties(${name} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) +- set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/swift/linux:/usr/lib/swift/linux") ++ set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../lib/swift/android") + endif() + endif() + diff --git a/packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch b/packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch new file mode 100644 index 000000000..e304ca65b --- /dev/null +++ b/packages/swift/swift-corelibs-xctest-CMakeLists.txt.patch @@ -0,0 +1,14 @@ +diff --git a/swift-corelibs-xctest/CMakeLists.txt b/swift-corelibs-xctest/CMakeLists.txt +index 289f940..9830bbb 100644 +--- a/swift-corelibs-xctest/CMakeLists.txt ++++ b/swift-corelibs-xctest/CMakeLists.txt +@@ -50,7 +50,9 @@ add_library(XCTest + target_link_libraries(XCTest PRIVATE + dispatch + Foundation) ++target_link_options(XCTest PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(XCTest PROPERTIES ++ INSTALL_RPATH "$ORIGIN" + Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift + INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}/swift) + diff --git a/packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch b/packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch new file mode 100644 index 000000000..f41dbf354 --- /dev/null +++ b/packages/swift/swift-lib-Driver-UnixToolChains.cpp.patch @@ -0,0 +1,29 @@ +diff --git a/swift/lib/Driver/UnixToolChains.cpp b/swift/lib/Driver/UnixToolChains.cpp +index bdc63d1ca72..971e5ded1e2 100644 +--- a/swift/lib/Driver/UnixToolChains.cpp ++++ b/swift/lib/Driver/UnixToolChains.cpp +@@ -209,7 +209,8 @@ toolchains::GenericUnix::constructInvocation(const DynamicLinkJobAction &job, + getRuntimeLibraryPaths(RuntimeLibPaths, context.Args, context.OI.SDKPath, + /*Shared=*/!(staticExecutable || staticStdlib)); + +- if (!(staticExecutable || staticStdlib) && shouldProvideRPathToLinker()) { ++ if (!(staticExecutable || staticStdlib) && shouldProvideRPathToLinker() && ++ !context.Args.hasArg(options::OPT_no_toolchain_stdlib_rpath)) { + // FIXME: We probably shouldn't be adding an rpath here unless we know + // ahead of time the standard library won't be copied. + for (auto path : RuntimeLibPaths) { +@@ -356,7 +357,13 @@ std::string toolchains::Android::getTargetForLinker() const { + } + } + +-bool toolchains::Android::shouldProvideRPathToLinker() const { return false; } ++bool toolchains::Android::shouldProvideRPathToLinker() const { ++#if defined(__ANDROID__) ++ return true; ++#else ++ return false; ++#endif ++} + + std::string toolchains::Cygwin::getDefaultLinker() const { + // Cygwin uses the default BFD linker, even on ARM. diff --git a/packages/swift/swift-stdlib-public-Platform-bionic.modulemap.gyb.patch.beforehostbuild b/packages/swift/swift-stdlib-public-Platform-bionic.modulemap.gyb.patch.beforehostbuild new file mode 100644 index 000000000..ea04c1d17 --- /dev/null +++ b/packages/swift/swift-stdlib-public-Platform-bionic.modulemap.gyb.patch.beforehostbuild @@ -0,0 +1,41 @@ +diff --git a/swift/stdlib/public/Platform/bionic.modulemap.gyb b/swift/stdlib/public/Platform/bionic.modulemap.gyb +index e44f9082653..da77854eb75 100644 +--- a/swift/stdlib/public/Platform/bionic.modulemap.gyb ++++ b/swift/stdlib/public/Platform/bionic.modulemap.gyb +@@ -161,11 +161,11 @@ module SwiftGlibc [system] { + export * + } + module glob { +- header "${GLIBC_INCLUDE_PATH}/glob.h" ++ header "${TERMUX_INCLUDE_PATH}/glob.h" + export * + } + module iconv { +- header "${GLIBC_INCLUDE_PATH}/iconv.h" ++ header "${TERMUX_INCLUDE_PATH}/iconv.h" + export * + } + module langinfo { +@@ -185,7 +185,7 @@ module SwiftGlibc [system] { + export * + } + module spawn { +- header "${GLIBC_INCLUDE_PATH}/spawn.h" ++ header "${TERMUX_INCLUDE_PATH}/spawn.h" + export * + } + module syslog { +@@ -291,11 +291,11 @@ module SwiftGlibc [system] { + export * + } + module sem { +- header "${GLIBC_ARCH_INCLUDE_PATH}/sys/sem.h" ++ header "${GLIBC_ARCH_INCLUDE_PATH}/linux/sem.h" + export * + } + module shm { +- header "${GLIBC_ARCH_INCLUDE_PATH}/sys/shm.h" ++ header "${GLIBC_ARCH_INCLUDE_PATH}/linux/shm.h" + export * + } + module inotify { diff --git a/packages/swift/swift-stdlib-public-SwiftShims-CMakeLists.txt b/packages/swift/swift-stdlib-public-SwiftShims-CMakeLists.txt new file mode 100644 index 000000000..ca78bb948 --- /dev/null +++ b/packages/swift/swift-stdlib-public-SwiftShims-CMakeLists.txt @@ -0,0 +1,13 @@ +diff --git a/swift/stdlib/public/SwiftShims/CMakeLists.txt b/swift/stdlib/public/SwiftShims/CMakeLists.txt +index da408df6bae..73fd1cdfa30 100644 +--- a/swift/stdlib/public/SwiftShims/CMakeLists.txt ++++ b/swift/stdlib/public/SwiftShims/CMakeLists.txt +@@ -121,7 +121,7 @@ swift_install_in_component(clang-builtin-headers + + swift_install_symlink_component(clang-resource-dir-symlink + LINK_NAME clang +- TARGET ../clang/${CLANG_VERSION} ++ TARGET ../clang/@TERMUX_CLANG_VERSION@ + DESTINATION "lib/swift") + + # Possibly install Clang headers under Clang's resource directory in case we diff --git a/packages/swift/swift-utils-build-script-impl b/packages/swift/swift-utils-build-script-impl new file mode 100644 index 000000000..48d5c733e --- /dev/null +++ b/packages/swift/swift-utils-build-script-impl @@ -0,0 +1,27 @@ +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 +@@ -1745,6 +1753,13 @@ for host in "${ALL_HOSTS[@]}"; do + -DLLVM_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/llvm-tblgen + -DCLANG_TABLEGEN=$(build_directory "${LOCAL_HOST}" llvm)/bin/clang-tblgen + -DLLVM_NATIVE_BUILD=$(build_directory "${LOCAL_HOST}" llvm) ++ -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" ++ -DCMAKE_MODULE_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" ++ -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS --target=$CCTERMUX_HOST_PLATFORM" ++ -DCMAKE_SYSTEM_NAME=Android ++ -DCMAKE_SYSTEM_VERSION=@TERMUX_PKG_API_LEVEL@ ++ -DCMAKE_SYSTEM_PROCESSOR=@TERMUX_ARCH@ ++ -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN="@TERMUX_STANDALONE_TOOLCHAIN@" + ) + fi + +@@ -2471,7 +2480,7 @@ for host in "${ALL_HOSTS[@]}"; do + elif [[ "${ANDROID_DATA}" ]] ; then + HOST_CXX_HEADERS_DIR="$PREFIX/include/c++" + else # Linux +- HOST_CXX_HEADERS_DIR="/usr/include/c++" ++ HOST_CXX_HEADERS_DIR="@TERMUX_STANDALONE_TOOLCHAIN@/sysroot/usr/include/c++" + fi + + # Find the path in which the local clang build is expecting to find diff --git a/packages/swift/swiftpm-Sources-Workspace-Destination.swift b/packages/swift/swiftpm-Sources-Workspace-Destination.swift new file mode 100644 index 000000000..dae8975e3 --- /dev/null +++ b/packages/swift/swiftpm-Sources-Workspace-Destination.swift @@ -0,0 +1,13 @@ +diff --git a/swiftpm/Sources/Workspace/Destination.swift b/swiftpm/Sources/Workspace/Destination.swift +index ac03fb84..99048b80 100644 +--- a/swiftpm/Sources/Workspace/Destination.swift ++++ b/swiftpm/Sources/Workspace/Destination.swift +@@ -130,7 +130,7 @@ public struct Destination: Encodable, Equatable { + #else + return Destination( + target: hostTargetTriple, +- sdk: .root, ++ sdk: AbsolutePath("@TERMUX_APP_PREFIX@"), + binDir: binDir, + extraCCFlags: ["-fPIC"], + extraSwiftCFlags: [], diff --git a/packages/swift/swiftpm-rpath.patch b/packages/swift/swiftpm-rpath.patch new file mode 100644 index 000000000..6edd57f13 --- /dev/null +++ b/packages/swift/swiftpm-rpath.patch @@ -0,0 +1,44 @@ +diff --git a/swiftpm/Sources/PackageDescription/CMakeLists.txt b/swiftpm/Sources/PackageDescription/CMakeLists.txt +index b6d925e1..3e546554 100644 +--- a/swiftpm/Sources/PackageDescription/CMakeLists.txt ++++ b/swiftpm/Sources/PackageDescription/CMakeLists.txt +@@ -32,11 +32,13 @@ foreach(PACKAGE_DESCRIPTION_VERSION 4 4_2) + target_link_options(PD${PACKAGE_DESCRIPTION_VERSION} PRIVATE + "SHELL:-Xlinker -install_name -Xlinker @rpath/libPackageDescription.dylib") + endif() +- ++ target_link_options(PD${PACKAGE_DESCRIPTION_VERSION} PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(PD${PACKAGE_DESCRIPTION_VERSION} PROPERTIES + Swift_MODULE_NAME PackageDescription + Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/pm/${PACKAGE_DESCRIPTION_VERSION} ++ BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_NAME_DIR \\@rpath ++ INSTALL_RPATH "$ORIGIN/../../$" + OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/${PACKAGE_DESCRIPTION_VERSION} + OUTPUT_NAME PackageDescription + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pm/${PACKAGE_DESCRIPTION_VERSION} +diff --git a/swiftpm/TSC/Sources/TSCBasic/CMakeLists.txt b/swiftpm/TSC/Sources/TSCBasic/CMakeLists.txt +index 50e1ba60..e47b87e7 100644 +--- a/swiftpm/TSC/Sources/TSCBasic/CMakeLists.txt ++++ b/swiftpm/TSC/Sources/TSCBasic/CMakeLists.txt +@@ -53,7 +53,7 @@ target_link_libraries(TSCBasic PUBLIC + TSCLibc) + if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + target_link_libraries(TSCBasic PUBLIC +- Foundation) ++ Foundation android-spawn) + endif() + # NOTE(compnerd) workaround for CMake not setting up include flags yet + set_target_properties(TSCBasic PROPERTIES +diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap +index f7439427..b3edbbea 100755 +--- a/swiftpm/Utilities/bootstrap ++++ b/swiftpm/Utilities/bootstrap +@@ -574,6 +574,7 @@ def get_swiftpm_flags(args): + if 'ANDROID_DATA' in os.environ: + build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"]) + ++ build_flags.extend(["-Xswiftc", "-no-toolchain-stdlib-rpath", "-Xlinker", "-landroid-spawn"]) + return build_flags + + # ----------------------------------------------------------- diff --git a/scripts/setup-ubuntu.sh b/scripts/setup-ubuntu.sh index 15cb4592c..77d94c873 100755 --- a/scripts/setup-ubuntu.sh +++ b/scripts/setup-ubuntu.sh @@ -102,6 +102,8 @@ PACKAGES+=" llvm-8-tools" # For swift. PACKAGES+=" clang-9" +PACKAGES+=" libtinfo5" +PACKAGES+=" lld" # Needed by gitea. PACKAGES+=" npm"