termux-packages/disabled-packages/swift/swift-build-script.patch
Leonid Pliushch eab39222c5 move 'swift' to disabled packages
Currently it supports only on-device builds.
https://github.com/termux/termux-packages/pull/4895

How to build:

 cp -a ./disabled-packages/swift ./packages/
 pkg install clang binutils-gold file patch python cmake ninja python2 perl rsync libandroid-spawn libcurl libicu libsqlite libuuid libxml2 llbuild pkg-config
 TERMUX_MAKE_PROCESSES=7 ./build-package.sh swift
2020-02-17 13:47:32 +02:00

96 lines
4.4 KiB
Diff

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':