From 7547e0d9f84e2719dfea2f3540aa2047aea6d7c7 Mon Sep 17 00:00:00 2001 From: Butta Date: Fri, 6 Nov 2020 21:32:29 +0530 Subject: [PATCH] swift: add x86_64 package and refactor with upstreamed and submitted patches --- packages/swift/build.sh | 12 +- packages/swift/swift-armv7.patch | 65 +++ packages/swift/swift-build-script.patch | 30 +- packages/swift/swift-cmake.patch | 88 ---- ...ift-lib-ClangImporter-ImportType.cpp.patch | 13 - packages/swift/swift-native-tools.patch | 85 ++++ packages/swift/swift-ndk.patch | 378 ++++++++++++++++++ packages/swift/swift-runtime-flag.patch | 75 ++++ .../swift/swift-standalone-toolchain.patch | 22 + ...ib-public-runtime-Float16Support.cpp.patch | 13 - .../swift-utils-build-script-impl-build.patch | 2 +- .../swift-utils-build-script-impl-flags.patch | 17 +- packages/swift/swift-x86_64.patch | 65 +++ packages/swift/swiftpm-Utilities-bootstrap | 103 +---- .../swift/swiftpm-no-cmake-bootstrap.patch | 165 ++++++++ packages/swift/swiftpm-rpath.patch | 84 +--- .../swiftpm-swift-tools-support-core.patch | 29 ++ packages/swift/swiftpm-toolchain-stdlib.patch | 35 ++ 18 files changed, 970 insertions(+), 311 deletions(-) create mode 100644 packages/swift/swift-armv7.patch delete mode 100644 packages/swift/swift-lib-ClangImporter-ImportType.cpp.patch create mode 100644 packages/swift/swift-native-tools.patch create mode 100644 packages/swift/swift-ndk.patch create mode 100644 packages/swift/swift-runtime-flag.patch create mode 100644 packages/swift/swift-standalone-toolchain.patch delete mode 100644 packages/swift/swift-stdlib-public-runtime-Float16Support.cpp.patch create mode 100644 packages/swift/swift-x86_64.patch create mode 100644 packages/swift/swiftpm-no-cmake-bootstrap.patch create mode 100644 packages/swift/swiftpm-swift-tools-support-core.patch create mode 100644 packages/swift/swiftpm-toolchain-stdlib.patch diff --git a/packages/swift/build.sh b/packages/swift/build.sh index 64cb77a15..7dd8ce1b6 100644 --- a/packages/swift/build.sh +++ b/packages/swift/build.sh @@ -3,14 +3,14 @@ TERMUX_PKG_DESCRIPTION="Swift is a high-performance system programming language" TERMUX_PKG_LICENSE="Apache-2.0, NCSA" TERMUX_PKG_MAINTAINER="@buttaface" TERMUX_PKG_VERSION=5.3 -TERMUX_PKG_REVISION=2 +TERMUX_PKG_REVISION=3 SWIFT_RELEASE="RELEASE" TERMUX_PKG_SRCURL=https://github.com/apple/swift/archive/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE.tar.gz TERMUX_PKG_SHA256=f9e5bd81441c4ec13dd9ea290e2d7b8fe9b30ef66ad68947481022ea5179f83a TERMUX_PKG_HOSTBUILD=true TERMUX_PKG_DEPENDS="binutils-gold, clang, libc++, ndk-sysroot, libandroid-glob, libandroid-spawn, libcurl, libicu, libicu-static, libsqlite, libuuid, libxml2, libdispatch, llbuild" TERMUX_PKG_BUILD_DEPENDS="cmake, ninja, perl, pkg-config, python2, rsync" -TERMUX_PKG_BLACKLISTED_ARCHES="i686, x86_64" +TERMUX_PKG_BLACKLISTED_ARCHES="aarch64, arm, i686" TERMUX_PKG_NO_STATICSPLIT=true SWIFT_COMPONENTS="autolink-driver;compiler;clang-resource-dir-symlink;swift-remote-mirror;parser-lib;license;sourcekit-inproc;stdlib;sdk-overlay" @@ -121,14 +121,14 @@ termux_step_make() { export TERMUX_SWIFT_FLAGS="$TERMUX_SWIFTPM_FLAGS -resource-dir \ $TERMUX_PKG_BUILDDIR/swift-android-$SWIFT_ARCH/lib/swift" export HOST_SWIFTC="$SWIFT_BINDIR/swiftc" - SWIFT_BUILD_FLAGS="$SWIFT_BUILD_FLAGS --android --android-ndk $TERMUX_STANDALONE_TOOLCHAIN - --android-arch $SWIFT_ARCH --android-api-level $TERMUX_PKG_API_LEVEL - --android-icu-uc $TERMUX_PREFIX/lib/libicuuc.so + SWIFT_BUILD_FLAGS="$SWIFT_BUILD_FLAGS --android + --android-ndk $TERMUX_STANDALONE_TOOLCHAIN --android-arch $SWIFT_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 --build-toolchain-only - --skip-local-build --skip-local-host-install --build-runtime-with-host-compiler + --skip-local-build --skip-local-host-install --cross-compile-hosts=android-$SWIFT_ARCH --cross-compile-deps-path=$TERMUX_PREFIX --native-swift-tools-path=$SWIFT_BINDIR --native-clang-tools-path=$TERMUX_STANDALONE_TOOLCHAIN/bin" diff --git a/packages/swift/swift-armv7.patch b/packages/swift/swift-armv7.patch new file mode 100644 index 000000000..5124270f0 --- /dev/null +++ b/packages/swift/swift-armv7.patch @@ -0,0 +1,65 @@ +commit f7576a7bef5ca33c5598ad6b63a37f6d4c69aa98 +Date: Fri, 2 Oct 2020 14:03:49 +0530 +Subject: [android] Add support for building the toolchain for ARMv7 + +diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake +index ec61d2abb836..0b9ce10842ac 100644 +--- a/swift/cmake/modules/AddSwift.cmake ++++ b/swift/cmake/modules/AddSwift.cmake +@@ -291,6 +291,15 @@ function(_add_host_variant_c_compile_flags target) + endif() + endif() + ++ # The LLVM backend is built with these defines on most 32-bit platforms, ++ # llvm/llvm-project@66395c9, which can cause incompatibilities with the Swift ++ # frontend if not built the same way. ++ if("${CFLAGS_ARCH}" MATCHES "armv6|armv7|i686" AND ++ NOT (CFLAGS_SDK STREQUAL ANDROID AND SWIFT_ANDROID_API_LEVEL LESS 24)) ++ list(APPEND result ++ "-D_LARGEFILE_SOURCE" ++ "-D_FILE_OFFSET_BITS=64") ++ endif() + set("${CFLAGS_RESULT_VAR_NAME}" "${result}" PARENT_SCOPE) + endfunction() + +diff --git a/swift/lib/ClangImporter/ImportType.cpp b/swift/lib/ClangImporter/ImportType.cpp +index f58dbb837e5d..70bd70dff9ac 100644 +--- a/swift/lib/ClangImporter/ImportType.cpp ++++ b/swift/lib/ClangImporter/ImportType.cpp +@@ -556,7 +556,7 @@ namespace { + if (size > 4096) + return Type(); + +- SmallVector elts{size, elementType}; ++ SmallVector elts{static_cast(size), elementType}; + return TupleType::get(elts, elementType->getASTContext()); + } + +diff --git a/swift/stdlib/public/runtime/Float16Support.cpp b/swift/stdlib/public/runtime/Float16Support.cpp +index d7377400ba0b..9d8c4940054d 100644 +--- a/swift/stdlib/public/runtime/Float16Support.cpp ++++ b/swift/stdlib/public/runtime/Float16Support.cpp +@@ -29,7 +29,7 @@ + + // Android NDK 4096) - return Type(); - -- SmallVector elts{size, elementType}; -+ SmallVector elts{static_cast(size), elementType}; - return TupleType::get(elts, elementType->getASTContext()); - } - diff --git a/packages/swift/swift-native-tools.patch b/packages/swift/swift-native-tools.patch new file mode 100644 index 000000000..75664a1ce --- /dev/null +++ b/packages/swift/swift-native-tools.patch @@ -0,0 +1,85 @@ +commit 9ed67668564257c27e49ff7a07fac0b23f27ba85 +Date: Mon, 26 Oct 2020 23:13:22 +0530 +Subject: [build-script] Move --native-{clang,llvm,swift}-tools-path + flags into the Python build-script + +Also, fix two places where the LLVM path was wrongly employed to set up clang, +and use the Swift path in install_toolchain_path(). + +diff --git a/swift/stdlib/CMakeLists.txt b/swift/stdlib/CMakeLists.txt +index 81cad0966a1d..a0e3b138809f 100644 +--- a/swift/stdlib/CMakeLists.txt ++++ b/swift/stdlib/CMakeLists.txt +@@ -102,11 +102,11 @@ else() + # If we use Clang-cl or MSVC, CMake provides default compiler and linker flags that are incompatible + # with the frontend of Clang or Clang++. + if(SWIFT_COMPILER_IS_MSVC_LIKE) +- set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") +- set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang-cl") ++ set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") ++ set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang-cl") + else() +- set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang++") +- set(CMAKE_C_COMPILER "${SWIFT_NATIVE_LLVM_TOOLS_PATH}/clang") ++ set(CMAKE_CXX_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang++") ++ set(CMAKE_C_COMPILER "${SWIFT_NATIVE_CLANG_TOOLS_PATH}/clang") + endif() + + if(CMAKE_C_COMPILER_LAUNCHER MATCHES ".*distcc") +diff --git a/swift/utils/build-script b/swift/utils/build-script +index 639f790fe354..9ccb8ef6e2dc 100755 +--- a/swift/utils/build-script ++++ b/swift/utils/build-script +@@ -704,6 +704,18 @@ class BuildScriptInvocation(object): + impl_args += [ + "--host-libtool", toolchain.libtool, + ] ++ if args.native_clang_tools_path is not None: ++ impl_args += [ ++ "--native-clang-tools-path=%s" % args.native_clang_tools_path ++ ] ++ if args.native_llvm_tools_path is not None: ++ impl_args += [ ++ "--native-llvm-tools-path=%s" % args.native_llvm_tools_path ++ ] ++ if args.native_swift_tools_path is not None: ++ impl_args += [ ++ "--native-swift-tools-path=%s" % args.native_swift_tools_path ++ ] + + # If we have extra_swift_args, combine all of them together and then + # add them as one command. +diff --git a/swift/utils/build_swift/build_swift/driver_arguments.py b/swift/utils/build_swift/build_swift/driver_arguments.py +index cb1c5c0b0e38..73fbd7c95e18 100644 +--- a/swift/utils/build_swift/build_swift/driver_arguments.py ++++ b/swift/utils/build_swift/build_swift/driver_arguments.py +@@ -374,6 +374,15 @@ def create_argument_parser(): + option('--host-cxx', store_path(executable=True), + help='the absolute path to CXX, the "clang++" compiler for the ' + 'host platform. Default is auto detected.') ++ option('--native-swift-tools-path', store_path, ++ help='the path to a directory that contains prebuilt Swift tools ' ++ 'that are executable on the host platform') ++ option('--native-clang-tools-path', store_path, ++ help='the path to a directory that contains prebuilt Clang tools ' ++ 'that are executable on the host platform') ++ option('--native-llvm-tools-path', store_path, ++ help='the path to a directory that contains prebuilt LLVM tools ' ++ 'that are executable on the host platform') + option('--cmake-c-launcher', store_path(executable=True), + default=os.environ.get('C_COMPILER_LAUNCHER', None), + help='the absolute path to set CMAKE_C_COMPILER_LAUNCHER') +diff --git a/swift/utils/swift_build_support/swift_build_support/products/product.py b/swift/utils/swift_build_support/swift_build_support/products/product.py +index ba6f673bb6c9..001e2bf03083 100644 +--- a/swift/utils/swift_build_support/swift_build_support/products/product.py ++++ b/swift/utils/swift_build_support/swift_build_support/products/product.py +@@ -169,6 +169,9 @@ def install_toolchain_path(self, host_target): + Returns the path to the toolchain that is being created as part of this + build. + """ ++ if self.args.native_swift_tools_path is not None: ++ return os.path.split(self.args.native_swift_tools_path)[0] ++ + install_destdir = self.args.install_destdir + if self.args.cross_compile_hosts: + build_root = os.path.dirname(self.build_dir) diff --git a/packages/swift/swift-ndk.patch b/packages/swift/swift-ndk.patch new file mode 100644 index 000000000..0e86ea065 --- /dev/null +++ b/packages/swift/swift-ndk.patch @@ -0,0 +1,378 @@ +commit d42869c1e6fbb5caf87428662825840b2e70a19d +Date: Thu, 29 Oct 2020 20:54:59 +0530 +Subject: [android] Move to the NDK's unified sysroot + +Since the NDK is removing the platforms/ and sysroot/ directories in the next +release, switch to the unified sysroot in toolchains/llvm/ and take advantage +of a bunch of simplification that's now possible. + +diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake +index 0e019d8d30..00e0b794e7 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_ANDROID_API_LEVEL}) ++ endif() ++ + # MSVC, clang-cl, gcc don't understand -target. + if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND + NOT SWIFT_COMPILER_IS_MSVC_LIKE) +@@ -343,16 +343,6 @@ function(_add_host_variant_c_compile_flags) + list(APPEND result -funwind-tables) + endif() + +- if("${CFLAGS_SDK}" STREQUAL "ANDROID") +- list(APPEND result -nostdinc++) +- swift_android_libcxx_include_paths(CFLAGS_CXX_INCLUDES) +- swift_android_include_for_arch("${CFLAGS_ARCH}" "${CFLAGS_ARCH}_INCLUDE") +- foreach(path IN LISTS CFLAGS_CXX_INCLUDES ${CFLAGS_ARCH}_INCLUDE) +- list(APPEND result "SHELL:${CMAKE_INCLUDE_SYSTEM_FLAG_C}${path}") +- endforeach() +- list(APPEND result "-D__ANDROID_API__=${SWIFT_ANDROID_API_LEVEL}") +- endif() +- + if("${CFLAGS_SDK}" STREQUAL "LINUX") + if(${CFLAGS_ARCH} STREQUAL x86_64) + # this is the minimum architecture that supports 16 byte CAS, which is necessary to avoid a dependency to libatomic +@@ -441,11 +431,6 @@ function(_add_host_variant_link_flags) + # link against the custom C++ library + 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}) +- endforeach() + else() + # If lto is enabled, we need to add the object path flag so that the LTO code + # generator leaves the intermediate object file in a place where it will not +diff --git a/swift/cmake/modules/AddSwiftUnittests.cmake b/swift/cmake/modules/AddSwiftUnittests.cmake +index e088997741..daaba3e026 100644 +--- a/swift/cmake/modules/AddSwiftUnittests.cmake ++++ b/swift/cmake/modules/AddSwiftUnittests.cmake +@@ -43,9 +43,6 @@ function(add_swift_unittest test_dirname) + set_target_properties(${test_dirname} PROPERTIES + BUILD_RPATH ${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") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") +diff --git a/swift/cmake/modules/SwiftAndroidSupport.cmake b/swift/cmake/modules/SwiftAndroidSupport.cmake +index 9379031947..a8b0a48c7e 100644 +--- a/swift/cmake/modules/SwiftAndroidSupport.cmake ++++ b/swift/cmake/modules/SwiftAndroidSupport.cmake +@@ -1,72 +1,42 @@ +-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" +- PARENT_SCOPE) +- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") +- set(${var} +- "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/c++/v1" +- PARENT_SCOPE) ++function(swift_android_prebuilt_host_name prebuilt_var_name) ++ # Get the prebuilt suffix to create the correct toolchain path when using the NDK ++ if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) ++ set(${prebuilt_var_name} darwin-x86_64 PARENT_SCOPE) ++ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) ++ set(${prebuilt_var_name} linux-x86_64 PARENT_SCOPE) ++ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) ++ set(${prebuilt_var_name} Windows-x86_64 PARENT_SCOPE) + else() +- message(SEND_ERROR "Couldn't set libc++ include paths for Android") ++ message(SEND_ERROR "cannot cross-compile to android from ${CMAKE_HOST_SYSTEM_NAME}") + endif() + endfunction() + +-function(swift_android_include_for_arch arch var) +- set(paths) ++function(swift_android_sysroot sysroot_var_name) + 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}") ++ swift_android_prebuilt_host_name(prebuilt_build) ++ set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${prebuilt_build}/sysroot" PARENT_SCOPE) + 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}") ++ set(${sysroot_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}" PARENT_SCOPE) + else() +- message(SEND_ERROR "Couldn't set ${arch} include paths for Android") ++ message(SEND_ERROR "Couldn't find Android sysroot") + endif() +- set(${var} ${paths} PARENT_SCOPE) + endfunction() + +-function(swift_android_lib_for_arch arch var) +- set(_prebuilt "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}") +- set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") +- +- set(paths) ++function(swift_android_tools_path arch path_var_name) + 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") ++ swift_android_prebuilt_host_name(prebuilt_build) ++ if("${arch}" STREQUAL "i686") ++ set(ndk_prebuilt_path ++ "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}") ++ elseif("${arch}" STREQUAL "x86_64") ++ set(ndk_prebuilt_path ++ "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86_64-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}") + else() +- message(SEND_ERROR "unknown architecture (${arch}) for android") ++ set(ndk_prebuilt_path ++ "${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}") + 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 "Couldn't set ${arch} library paths for Android") +- endif() +- +- 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) ++ set(${path_var_name} "${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() +@@ -77,19 +49,7 @@ 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}") ++ set(android_libcxx_path "${SWIFT_SDK_ANDROID_ARCH_${arch}_PATH}/usr/lib/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") + 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 b55e6e6b98..a654794467 100644 +--- a/swift/cmake/modules/SwiftConfigureSDK.cmake ++++ b/swift/cmake/modules/SwiftConfigureSDK.cmake +@@ -55,12 +55,6 @@ function(_report_sdk prefix) + 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) +- message(STATUS " ${arch} INCLUDE: ${${arch}_INCLUDE}") +- message(STATUS " ${arch} LIB: ${${arch}_LIB}") +- endforeach() + else() + foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES}) + message(STATUS " ${arch} Path: ${SWIFT_SDK_${prefix}_ARCH_${arch}_PATH}") +@@ -271,76 +265,32 @@ macro(configure_sdk_unix name architectures) + + foreach(arch ${architectures}) + if("${prefix}" STREQUAL "ANDROID") +- if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers") +- elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library headers") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library architecture headers") +- else() +- message(SEND_ERROR "Couldn't find LIBC_INCLUDE_DIRECTORY for Android") +- endif() ++ swift_android_sysroot(android_sysroot) ++ set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${android_sysroot}") ++ set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${android_sysroot}/usr/include" CACHE STRING "Path to C library headers") ++ set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${android_sysroot}/usr/include" CACHE STRING "Path to C library architecture headers") + + if("${arch}" STREQUAL "armv7") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "arm-linux-androideabi") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "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") + # The Android ABI isn't part of the module triple. + set(SWIFT_SDK_ANDROID_ARCH_${arch}_MODULE "armv7-none-linux-android") + elseif("${arch}" STREQUAL "aarch64") + 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") +- 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") + elseif("${arch}" STREQUAL "i686") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "i686-linux-android") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "i686") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-x86") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "i686-unknown-linux-android") + elseif("${arch}" STREQUAL "x86_64") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "x86_64-linux-android") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "x86_64") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-x86_64") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "x86_64-unknown-linux-android") + else() + message(FATAL_ERROR "unknown arch for android SDK: ${arch}") + endif() +- +- # Get the prebuilt suffix to create the correct toolchain path when using the NDK +- if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) +- set(_swift_android_prebuilt_build darwin-x86_64) +- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) +- set(_swift_android_prebuilt_build linux-x86_64) +- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) +- set(_swift_android_prebuilt_build Windows-x86_64) +- elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Android) +- # When building natively on an Android host, there's no NDK or prebuilt suffix. +- else() +- message(SEND_ERROR "cannot cross-compile to android from ${CMAKE_HOST_SYSTEM_NAME}") +- endif() +- if("${arch}" STREQUAL "i686") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH +- "${SWIFT_ANDROID_NDK_PATH}/toolchains/x86-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_build}") +- elseif("${arch}" STREQUAL "x86_64") +- set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH +- "${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}") +- endif() + else() + set(SWIFT_SDK_${prefix}_ARCH_${arch}_PATH "/" CACHE STRING "CMAKE_SYSROOT for ${prefix} ${arch}") + +diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake +index a2f682ece6..d2f6c27890 100644 +--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake ++++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake +@@ -55,6 +55,10 @@ function(_add_target_variant_c_compile_link_flags) + endif() + endif() + ++ if("${CFLAGS_SDK}" STREQUAL "ANDROID") ++ set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL}) ++ endif() ++ + # MSVC, clang-cl, gcc don't understand -target. + if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND + NOT SWIFT_COMPILER_IS_MSVC_LIKE) +@@ -274,16 +278,6 @@ function(_add_target_variant_c_compile_flags) + list(APPEND result -funwind-tables) + endif() + +- if("${CFLAGS_SDK}" STREQUAL "ANDROID") +- list(APPEND result -nostdinc++) +- swift_android_libcxx_include_paths(CFLAGS_CXX_INCLUDES) +- swift_android_include_for_arch("${CFLAGS_ARCH}" "${CFLAGS_ARCH}_INCLUDE") +- foreach(path IN LISTS CFLAGS_CXX_INCLUDES ${CFLAGS_ARCH}_INCLUDE) +- list(APPEND result "SHELL:${CMAKE_INCLUDE_SYSTEM_FLAG_C}${path}") +- endforeach() +- list(APPEND result "-D__ANDROID_API__=${SWIFT_ANDROID_API_LEVEL}") +- endif() +- + if("${CFLAGS_SDK}" STREQUAL "LINUX") + if(${CFLAGS_ARCH} STREQUAL x86_64) + # this is the minimum architecture that supports 16 byte CAS, which is necessary to avoid a dependency to libatomic +@@ -363,11 +357,6 @@ function(_add_target_variant_link_flags) + # link against the custom C++ library + 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}) +- endforeach() + else() + # If lto is enabled, we need to add the object path flag so that the LTO code + # generator leaves the intermediate object file in a place where it will not +diff --git a/swift/stdlib/cmake/modules/SwiftSource.cmake b/swift/stdlib/cmake/modules/SwiftSource.cmake +index 41850e3f54..bb504ee93a 100644 +--- a/swift/stdlib/cmake/modules/SwiftSource.cmake ++++ b/swift/stdlib/cmake/modules/SwiftSource.cmake +@@ -184,9 +184,7 @@ function(_add_target_variant_swift_compile_flags + ${ARGN}) + + # On Windows, we don't set SWIFT_SDK_WINDOWS_PATH_ARCH_{ARCH}_PATH, so don't include it. +- # On Android the sdk is split to two different paths for includes and libs, so these +- # need to be set manually. +- if (NOT "${sdk}" STREQUAL "WINDOWS" AND NOT "${sdk}" STREQUAL "ANDROID") ++ if (NOT "${sdk}" STREQUAL "WINDOWS") + list(APPEND result "-sdk" "${SWIFT_SDK_${sdk}_ARCH_${arch}_PATH}") + endif() + +@@ -206,13 +204,6 @@ function(_add_target_variant_swift_compile_flags + "-target" "${SWIFT_SDK_${sdk}_ARCH_${arch}_TRIPLE}") + endif() + +- if("${sdk}" STREQUAL "ANDROID") +- swift_android_include_for_arch(${arch} ${arch}_swift_include) +- foreach(path IN LISTS ${arch}_swift_include) +- list(APPEND result "\"${CMAKE_INCLUDE_FLAG_C}${path}\"") +- endforeach() +- endif() +- + if(NOT BUILD_STANDALONE) + list(APPEND result "-resource-dir" "${SWIFTLIB_DIR}") + endif() +diff --git a/swift/utils/build-script-impl b/swift/utils/build-script-impl +index cb68af1031..51d031cd39 100755 +--- a/swift/utils/build-script-impl ++++ b/swift/utils/build-script-impl +@@ -470,11 +470,11 @@ function set_build_options_for_host() { + + case ${host} in + android-aarch64) +- SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android" ++ SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android${ANDROID_API_LEVEL}" + llvm_target_arch="AArch64" + ;; + android-armv7) +- SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi" ++ SWIFT_HOST_TRIPLE="armv7-unknown-linux-androideabi${ANDROID_API_LEVEL}" + llvm_target_arch="ARM" + ;; + linux-armv6) diff --git a/packages/swift/swift-runtime-flag.patch b/packages/swift/swift-runtime-flag.patch new file mode 100644 index 000000000..7ee558014 --- /dev/null +++ b/packages/swift/swift-runtime-flag.patch @@ -0,0 +1,75 @@ +commit f84992addb0f7cd54c13762274e898f79d0b0631 +Date: Sun, 8 Nov 2020 13:25:13 +0530 +Subject: [build] Make it possible to actually build the stdlib with a + prebuilt clang + +diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt +index 99937910af2b..2cec8d38a493 100644 +--- a/swift/CMakeLists.txt ++++ b/swift/CMakeLists.txt +@@ -462,10 +462,12 @@ if(SWIFT_PATH_TO_CMARK_BUILD) + endif() + message(STATUS "") + +-if("${SWIFT_NATIVE_LLVM_TOOLS_PATH}" STREQUAL "") +- set(SWIFT_CROSS_COMPILING FALSE) ++# Check if a prebuilt clang path was passed in, as this variable will be ++# assigned if not, in SwiftSharedCMakeConfig. ++if("${SWIFT_NATIVE_CLANG_TOOLS_PATH}" STREQUAL "") ++ set(SWIFT_PREBUILT_CLANG FALSE) + else() +- set(SWIFT_CROSS_COMPILING TRUE) ++ set(SWIFT_PREBUILT_CLANG TRUE) + endif() + + include(SwiftSharedCMakeConfig) +diff --git a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake +index c4c15084fe9..9ee08656589 100644 +--- a/swift/cmake/modules/SwiftSharedCMakeConfig.cmake ++++ b/swift/cmake/modules/SwiftSharedCMakeConfig.cmake +@@ -58,7 +58,7 @@ macro(swift_common_standalone_build_config_llvm product) + fix_imported_targets_for_xcode("${LLVM_EXPORTED_TARGETS}") + endif() + +- if(NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_CROSS_COMPILING) ++ if(NOT CMAKE_CROSSCOMPILING) + set(${product}_NATIVE_LLVM_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}") + endif() + +@@ -159,7 +159,7 @@ endmacro() + macro(swift_common_standalone_build_config_clang product) + find_package(Clang CONFIG REQUIRED NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + +- if (NOT CMAKE_CROSSCOMPILING) ++ if (NOT CMAKE_CROSSCOMPILING AND NOT SWIFT_PREBUILT_CLANG) + set(${product}_NATIVE_CLANG_TOOLS_PATH "${LLVM_TOOLS_BINARY_DIR}") + endif() + +diff --git a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake +index 7a296b5807d5..ace3fb90370f 100644 +--- a/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake ++++ b/swift/stdlib/cmake/modules/AddSwiftStdlib.cmake +@@ -1653,7 +1653,8 @@ function(add_swift_target_library name) + list(APPEND SWIFTLIB_SWIFT_COMPILE_FLAGS "-warn-implicit-overrides") + endif() + +- if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE) ++ if(NOT SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER AND NOT BUILD_STANDALONE AND ++ NOT SWIFT_PREBUILT_CLANG) + list(APPEND SWIFTLIB_DEPENDS clang) + endif() + +diff --git a/swift/stdlib/public/SwiftShims/CMakeLists.txt b/swift/stdlib/public/SwiftShims/CMakeLists.txt +index 33c49a3f8861..8553f4f00b37 100644 +--- a/swift/stdlib/public/SwiftShims/CMakeLists.txt ++++ b/swift/stdlib/public/SwiftShims/CMakeLists.txt +@@ -110,7 +110,8 @@ endif() + # First extract the "version" used for Clang's resource directory. + string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION + "${LLVM_PACKAGE_VERSION}") +-if(NOT SWIFT_INCLUDE_TOOLS AND SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER) ++if(NOT SWIFT_INCLUDE_TOOLS AND ++ (SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER OR SWIFT_PREBUILT_CLANG)) + if(SWIFT_COMPILER_IS_MSVC_LIKE) + execute_process(COMMAND ${CMAKE_C_COMPILER} /clang:-print-resource-dir + OUTPUT_VARIABLE clang_headers_location diff --git a/packages/swift/swift-standalone-toolchain.patch b/packages/swift/swift-standalone-toolchain.patch new file mode 100644 index 000000000..529ebc751 --- /dev/null +++ b/packages/swift/swift-standalone-toolchain.patch @@ -0,0 +1,22 @@ +diff --git a/swift/cmake/modules/SwiftAndroidSupport.cmake b/swift/cmake/modules/SwiftAndroidSupport.cmake +index c8d224c958..9b0b9043af 100644 +--- a/swift/cmake/modules/SwiftAndroidSupport.cmake ++++ b/swift/cmake/modules/SwiftAndroidSupport.cmake +@@ -14,7 +14,7 @@ endfunction() + function(swift_android_sysroot sysroot_var_name) + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + swift_android_prebuilt_host_name(prebuilt_build) +- set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${prebuilt_build}/sysroot" PARENT_SCOPE) ++ set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/sysroot" PARENT_SCOPE) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(${sysroot_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}" PARENT_SCOPE) + else() +@@ -36,7 +36,7 @@ function(swift_android_tools_path arch path_var_name) + "${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}") + endif() + +- set(${path_var_name} "${ndk_prebuilt_path}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE) ++ set(${path_var_name} "${SWIFT_ANDROID_NDK_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() diff --git a/packages/swift/swift-stdlib-public-runtime-Float16Support.cpp.patch b/packages/swift/swift-stdlib-public-runtime-Float16Support.cpp.patch deleted file mode 100644 index 907f1617e..000000000 --- a/packages/swift/swift-stdlib-public-runtime-Float16Support.cpp.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/swift/stdlib/public/runtime/Float16Support.cpp b/swift/stdlib/public/runtime/Float16Support.cpp -index d7377400ba0..9d8c4940054 100644 ---- a/swift/stdlib/public/runtime/Float16Support.cpp -+++ b/swift/stdlib/public/runtime/Float16Support.cpp -@@ -29,7 +29,7 @@ - - // Android NDK ") 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/../../android" - 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/Sources/SPMBuildCore/Triple.swift b/swiftpm/Sources/SPMBuildCore/Triple.swift -index 361dc283..e9091607 100644 ---- a/swiftpm/Sources/SPMBuildCore/Triple.swift -+++ b/swiftpm/Sources/SPMBuildCore/Triple.swift -@@ -40,6 +40,7 @@ public struct Triple: Encodable, Equatable { - case s390x - case aarch64 - case armv7 -+ case armv7a - case arm - case arm64 - case arm64e -diff --git a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt b/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt -index bbc43d98..bc5ee576 100644 ---- a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt -+++ b/swiftpm/swift-tools-support-core/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/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift -index 0658e55b..9221950b 100644 ---- a/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift -+++ b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift -@@ -429,7 +429,11 @@ public final class Inotify { - private func FD_ZERO(_ set: inout fd_set) { - #if os(Android) -+ #if arch(arm) -+ set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 - #else - set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - #endif + if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) diff --git a/packages/swift/swiftpm-swift-tools-support-core.patch b/packages/swift/swiftpm-swift-tools-support-core.patch new file mode 100644 index 000000000..6da62fe60 --- /dev/null +++ b/packages/swift/swiftpm-swift-tools-support-core.patch @@ -0,0 +1,29 @@ +diff --git a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt b/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt +index bbc43d98..bc5ee576 100644 +--- a/swiftpm/swift-tools-support-core/Sources/TSCBasic/CMakeLists.txt ++++ b/swiftpm/swift-tools-support-core/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/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift +index 0658e55b..9221950b 100644 +--- a/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift ++++ b/swiftpm/swift-tools-support-core/Sources/TSCUtility/FSWatch.swift +@@ -429,7 +429,11 @@ public final class Inotify { + + private func FD_ZERO(_ set: inout fd_set) { + #if os(Android) ++ #if arch(arm) ++ set.fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 + #else + set.__fds_bits = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + #endif diff --git a/packages/swift/swiftpm-toolchain-stdlib.patch b/packages/swift/swiftpm-toolchain-stdlib.patch new file mode 100644 index 000000000..d8c27664d --- /dev/null +++ b/packages/swift/swiftpm-toolchain-stdlib.patch @@ -0,0 +1,35 @@ +commit 8189d735d33f91e334725f1824eb9f61de78f138 +Date: Tue Apr 21 05:29:36 2020 +0530 + + On ELF platforms, remove host toolchain rpath from executables and shared libraries + before installing. + +diff --git a/swiftpm/Sources/PackageDescription/CMakeLists.txt b/swiftpm/Sources/PackageDescription/CMakeLists.txt +index ea704129..0119cad7 100644 +--- a/swiftpm/Sources/PackageDescription/CMakeLists.txt ++++ b/swiftpm/Sources/PackageDescription/CMakeLists.txt +@@ -47,6 +47,8 @@ foreach(PACKAGE_DESCRIPTION_VERSION 4 4_2) + if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) + target_link_libraries(PD${PACKAGE_DESCRIPTION_VERSION} PRIVATE + Foundation) ++ target_link_options(PD${PACKAGE_DESCRIPTION_VERSION} PRIVATE ++ "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(PD${PACKAGE_DESCRIPTION_VERSION} PROPERTIES + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH "$ORIGIN/../../$") +diff --git a/swiftpm/Utilities/bootstrap b/swiftpm/Utilities/bootstrap +index ef703dc1..4ee5fff9 100755 +--- a/swiftpm/Utilities/bootstrap ++++ b/swiftpm/Utilities/bootstrap +@@ -678,6 +678,11 @@ def get_swiftpm_flags(args): + if 'ANDROID_DATA' in os.environ: + build_flags.extend(["-Xswiftc", "-Xcc", "-Xswiftc", "-U_GNU_SOURCE"]) + ++ # On ELF platforms, remove the host toolchain's stdlib absolute rpath from ++ # installed executables and shared libraries. ++ if platform.system() != "Darwin" and args.command == 'install': ++ build_flags.extend(["-Xswiftc", "-no-toolchain-stdlib-rpath"]) ++ + build_target = get_build_target(args) + cross_compile_hosts = args.cross_compile_hosts + if build_target == 'x86_64-apple-macosx' and "macosx-arm64" in cross_compile_hosts: