diff --git a/stdlib/public/Platform/CMakeLists.txt b/stdlib/public/Platform/CMakeLists.txt index 841dc6c602d2d..14c347cbd2914 100644 --- a/stdlib/public/Platform/CMakeLists.txt +++ b/stdlib/public/Platform/CMakeLists.txt @@ -99,9 +99,11 @@ foreach(sdk ${SWIFT_SDKS}) list(APPEND glibc_modulemap_target_list ${glibc_modulemap_target}) - # If this SDK is a target for a non-native host, create a native modulemap - # without a sysroot prefix. This is the one we'll install instead. - if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/") + # If this SDK is a target for a non-native host, except if it's for Android + # with its own native sysroot, create a native modulemap without a sysroot + # prefix. This is the one we'll install instead. + if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/" AND + NOT (${sdk} STREQUAL ANDROID AND NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")) set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/glibc.modulemap") string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" diff --git a/test/ClangImporter/Dispatch_test.swift b/test/ClangImporter/Dispatch_test.swift index 3d32ca879c0f4..b3d0cd01dc561 100644 --- a/test/ClangImporter/Dispatch_test.swift +++ b/test/ClangImporter/Dispatch_test.swift @@ -2,6 +2,7 @@ // REQUIRES: libdispatch // UNSUPPORTED: OS=linux-gnu +// UNSUPPORTED: OS=linux-android import Dispatch diff --git a/test/Sanitizers/asan_recover.swift b/test/Sanitizers/asan_recover.swift index b65c977b68aeb..b37530705969e 100644 --- a/test/Sanitizers/asan_recover.swift +++ b/test/Sanitizers/asan_recover.swift @@ -30,7 +30,7 @@ // FIXME: We need this so we can flush stdout but this won't // work on other Platforms (e.g. Windows). -#if os(Linux) +#if canImport(Glibc) import Glibc #else import Darwin.C diff --git a/test/stdlib/Dispatch.swift b/test/stdlib/Dispatch.swift index 18cf07a8653d2..69a1aca39c2c1 100644 --- a/test/stdlib/Dispatch.swift +++ b/test/stdlib/Dispatch.swift @@ -2,6 +2,7 @@ // REQUIRES: executable_test // REQUIRES: libdispatch // UNSUPPORTED: OS=linux-gnu +// UNSUPPORTED: OS=linux-android import Dispatch import StdlibUnittest diff --git a/test/stdlib/DispatchTypes.swift b/test/stdlib/DispatchTypes.swift index f454b97d669ab..ff48adc19a8b8 100644 --- a/test/stdlib/DispatchTypes.swift +++ b/test/stdlib/DispatchTypes.swift @@ -2,6 +2,7 @@ // REQUIRES: libdispatch // UNSUPPORTED: OS=linux-gnu +// UNSUPPORTED: OS=linux-android import Dispatch diff --git a/utils/build-script b/utils/build-script index 1404db6132d4a..4846db6c48095 100755 --- a/utils/build-script +++ b/utils/build-script @@ -321,7 +321,11 @@ def apply_default_arguments(toolchain, args): 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. @@ -657,6 +661,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/utils/build-script-impl b/utils/build-script-impl index 255ac4beb3844..a4242f5626ca4 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -460,6 +460,10 @@ function set_build_options_for_host() { SWIFT_HOST_VARIANT_ARCH=$architecture case ${host} in + android-aarch64) + SWIFT_HOST_TRIPLE="aarch64-unknown-linux-android" + llvm_target_arch="AArch64" + ;; linux-armv6) SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf" llvm_target_arch="ARM" @@ -1553,12 +1557,18 @@ for host in "${ALL_HOSTS[@]}"; do swift) + if [[ "${ANDROID_API_LEVEL}" ]]; then + cmake_options=( + "${cmake_options[@]}" + -DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}" + ) + fi + if [[ ! "${SKIP_BUILD_ANDROID}" ]]; then cmake_options=( "${cmake_options[@]}" -DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}" -DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}" - -DSWIFT_ANDROID_API_LEVEL:STRING="${ANDROID_API_LEVEL}" -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC:STRING="${ANDROID_ICU_UC}" -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_UC_INCLUDE:STRING="${ANDROID_ICU_UC_INCLUDE}" -DSWIFT_ANDROID_${ANDROID_ARCH}_ICU_I18N:STRING="${ANDROID_ICU_I18N}" @@ -2192,6 +2202,8 @@ for host in "${ALL_HOSTS[@]}"; do HOST_CXX_HEADERS_DIR="$HOST_CXX_DIR/../../usr/include/c++" elif [[ "$(uname -s)" == "Haiku" ]] ; then HOST_CXX_HEADERS_DIR="/boot/system/develop/headers/c++" + elif [[ "${ANDROID_DATA}" ]] ; then + HOST_CXX_HEADERS_DIR="$PREFIX/include/c++" else # Linux HOST_CXX_HEADERS_DIR="/usr/include/c++" fi diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index becd8a02db234..cf25be0889199 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -223,7 +223,11 @@ def _apply_default_arguments(args): args.test_watchos_simulator = False if not args.build_android: - args.test_android = False + # If building natively on an Android host, allow running the test suite + # without the NDK config. + if not StdlibDeploymentTarget.Android.contains(StdlibDeploymentTarget + .host_target().name): + args.test_android = False args.test_android_host = False if not args.test_android: