Skip to content

Commit 3f4109b

Browse files
committed
[android] Get build scripts working natively, fix tests and install
The build scripts assume Android cross-compilation using the NDK, so avoid that configuration if building on an Android host. Fix or disable some tests, and don't install a glibc.modulemap without a native sysroot prefix.
1 parent 37655db commit 3f4109b

File tree

8 files changed

+36
-7
lines changed

8 files changed

+36
-7
lines changed

stdlib/public/Platform/CMakeLists.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,11 @@ foreach(sdk ${SWIFT_SDKS})
9999

100100
list(APPEND glibc_modulemap_target_list ${glibc_modulemap_target})
101101

102-
# If this SDK is a target for a non-native host, create a native modulemap
103-
# without a sysroot prefix. This is the one we'll install instead.
104-
if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/")
102+
# If this SDK is a target for a non-native host, except if it's for Android
103+
# with its own native sysroot, create a native modulemap without a sysroot
104+
# prefix. This is the one we'll install instead.
105+
if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/" AND
106+
NOT (${sdk} STREQUAL ANDROID AND NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL ""))
105107
set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/glibc.modulemap")
106108

107109
string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}"

test/ClangImporter/Dispatch_test.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
// REQUIRES: libdispatch
44
// UNSUPPORTED: OS=linux-gnu
5+
// UNSUPPORTED: OS=linux-android
56

67
import Dispatch
78

test/Sanitizers/asan_recover.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
// FIXME: We need this so we can flush stdout but this won't
3232
// work on other Platforms (e.g. Windows).
33-
#if os(Linux)
33+
#if canImport(Glibc)
3434
import Glibc
3535
#else
3636
import Darwin.C

test/stdlib/Dispatch.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// REQUIRES: executable_test
33
// REQUIRES: libdispatch
44
// UNSUPPORTED: OS=linux-gnu
5+
// UNSUPPORTED: OS=linux-android
56

67
import Dispatch
78
import StdlibUnittest

test/stdlib/DispatchTypes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
// REQUIRES: libdispatch
44
// UNSUPPORTED: OS=linux-gnu
5+
// UNSUPPORTED: OS=linux-android
56

67
import Dispatch
78

utils/build-script

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,11 @@ def apply_default_arguments(toolchain, args):
321321
android_tgts = [tgt for tgt in args.stdlib_deployment_targets
322322
if StdlibDeploymentTarget.Android.contains(tgt)]
323323
if not args.android and len(android_tgts) > 0:
324-
args.android = True
324+
# If building natively on an Android host, avoid the NDK
325+
# cross-compilation configuration.
326+
if not StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget
327+
.host_target().name):
328+
args.android = True
325329
args.build_android = False
326330

327331
# Include the Darwin supported architectures in the CMake options.
@@ -657,6 +661,10 @@ class BuildScriptInvocation(object):
657661
"--android-icu-i18n-include", args.android_icu_i18n_include,
658662
"--android-icu-data", args.android_icu_data,
659663
]
664+
# If building natively on an Android host, only pass the API level.
665+
if StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget
666+
.host_target().name):
667+
impl_args += ["--android-api-level", args.android_api_level]
660668
if args.android_deploy_device_path:
661669
impl_args += [
662670
"--android-deploy-device-path",

utils/build-script-impl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,10 @@ function set_build_options_for_host() {
460460
SWIFT_HOST_VARIANT_ARCH=$architecture
461461

462462
case ${host} in
463+
android-aarch64)
464+
SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android"
465+
llvm_target_arch="AArch64"
466+
;;
463467
linux-armv6)
464468
SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf"
465469
llvm_target_arch="ARM"
@@ -1553,12 +1557,18 @@ for host in "${ALL_HOSTS[@]}"; do
15531557

15541558
swift)
15551559

1560+
if [[ "${ANDROID_API_LEVEL}" ]]; then
1561+
cmake_options=(
1562+
"${cmake_options[@]}"
1563+
-DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}"
1564+
)
1565+
fi
1566+
15561567
if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then
15571568
cmake_options=(
15581569
"${cmake_options[@]}"
15591570
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
15601571
-DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}"
1561-
-DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}"
15621572
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC:STRING="${ANDROID_ICU_UC}"
15631573
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}"
15641574
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_I18N:STRING="${ANDROID_ICU_I18N}"
@@ -2192,6 +2202,8 @@ for host in "${ALL_HOSTS[@]}"; do
21922202
HOST_CXX_HEADERS_DIR="$HOST_CXX_DIR/../../usr/include/c++"
21932203
elif [[ "$(uname -s)" == "Haiku" ]] ; then
21942204
HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++"
2205+
elif [[ "${ANDROID_DATA}" ]] ; then
2206+
HOST_CXX_HEADERS_DIR="$PREFIX/include/c++"
21952207
else # Linux
21962208
HOST_CXX_HEADERS_DIR="/usr/include/c++"
21972209
fi

utils/build_swift/build_swift/driver_arguments.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,11 @@ def _apply_default_arguments(args):
223223
args.test_watchos_simulator = False
224224

225225
if not args.build_android:
226-
args.test_android = False
226+
# If building natively on an Android host, allow running the test suite
227+
# without the NDK config.
228+
if not StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget
229+
.host_target().name):
230+
args.test_android = False
227231
args.test_android_host = False
228232

229233
if not args.test_android:

0 commit comments

Comments
 (0)