eab39222c5
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
96 lines
4.4 KiB
Diff
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':
|