Skip to content

Commit 073e44d

Browse files
authored
Merge pull request #29296 from buttaface/droid
[android] Get build scripts working natively, fix tests and install
2 parents fe5c068 + 3f4109b commit 073e44d

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
@@ -33,7 +33,7 @@
3333

3434
// FIXME: We need this so we can flush stdout but this won't
3535
// work on other Platforms (e.g. Windows).
36-
#if os(Linux)
36+
#if canImport(Glibc)
3737
import Glibc
3838
#else
3939
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
@@ -324,7 +324,11 @@ def apply_default_arguments(toolchain, args):
324324
android_tgts = [tgt for tgt in args.stdlib_deployment_targets
325325
if StdlibDeploymentTarget.Android.contains(tgt)]
326326
if not args.android and len(android_tgts) > 0:
327-
args.android = True
327+
# If building natively on an Android host, avoid the NDK
328+
# cross-compilation configuration.
329+
if not StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget
330+
.host_target().name):
331+
args.android = True
328332
args.build_android = False
329333

330334
# Include the Darwin supported architectures in the CMake options.
@@ -659,6 +663,10 @@ class BuildScriptInvocation(object):
659663
"--android-icu-i18n-include", args.android_icu_i18n_include,
660664
"--android-icu-data", args.android_icu_data,
661665
]
666+
# If building natively on an Android host, only pass the API level.
667+
if StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget
668+
.host_target().name):
669+
impl_args += ["--android-api-level", args.android_api_level]
662670
if args.android_deploy_device_path:
663671
impl_args += [
664672
"--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"
@@ -1550,12 +1554,18 @@ for host in "${ALL_HOSTS[@]}"; do
15501554

15511555
swift)
15521556

1557+
if [[ "${ANDROID_API_LEVEL}" ]]; then
1558+
cmake_options=(
1559+
"${cmake_options[@]}"
1560+
-DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}"
1561+
)
1562+
fi
1563+
15531564
if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then
15541565
cmake_options=(
15551566
"${cmake_options[@]}"
15561567
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
15571568
-DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}"
1558-
-DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}"
15591569
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC:STRING="${ANDROID_ICU_UC}"
15601570
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}"
15611571
-DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_I18N:STRING="${ANDROID_ICU_I18N}"
@@ -2168,6 +2178,8 @@ for host in "${ALL_HOSTS[@]}"; do
21682178
HOST_CXX_HEADERS_DIR="$HOST_CXX_DIR/../../usr/include/c++"
21692179
elif [[ "$(uname -s)" == "Haiku" ]] ; then
21702180
HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++"
2181+
elif [[ "${ANDROID_DATA}" ]] ; then
2182+
HOST_CXX_HEADERS_DIR="$PREFIX/include/c++"
21712183
else # Linux
21722184
HOST_CXX_HEADERS_DIR="/usr/include/c++"
21732185
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)