Skip to content

[android] Update to NDK 23 #39045

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ set(CLANG_COMPILER_VERSION "" CACHE STRING
# build environment.
if(LLVM_USE_LINKER)
set(SWIFT_USE_LINKER_default "${LLVM_USE_LINKER}")
elseif(${SWIFT_HOST_VARIANT_SDK} STREQUAL ANDROID)
set(SWIFT_USE_LINKER_default "lld")
elseif(CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
set(SWIFT_USE_LINKER_default "lld")
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
Expand Down Expand Up @@ -306,8 +308,8 @@ set(SWIFT_ANDROID_API_LEVEL "" CACHE STRING

set(SWIFT_ANDROID_NDK_PATH "" CACHE STRING
"Path to the directory that contains the Android NDK tools that are executable on the build machine")
set(SWIFT_ANDROID_NDK_GCC_VERSION "" CACHE STRING
"The GCC version to use when building for Android. Currently only 4.9 is supported.")
set(SWIFT_ANDROID_NDK_CLANG_VERSION "12.0.5" CACHE STRING
"The Clang version to use when building for Android.")
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll need to update this every year when a new LTS NDK comes out.

set(SWIFT_ANDROID_DEPLOY_DEVICE_PATH "" CACHE STRING
"Path on an Android device where build products will be pushed. These are used when running the test suite against the device")

Expand Down
14 changes: 3 additions & 11 deletions cmake/modules/AddSwift.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -145,12 +145,9 @@ function(_add_host_variant_c_compile_link_flags name)
endif()

if(SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID)
# lld can handle targeting the android build. However, if lld is not
# enabled, then fallback to the linker included in the android NDK.
if(NOT SWIFT_USE_LINKER STREQUAL "lld")
swift_android_tools_path(${SWIFT_HOST_VARIANT_ARCH} tools_path)
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-B${tools_path}>)
endif()
# Make sure the Android NDK lld is used.
swift_android_tools_path(${SWIFT_HOST_VARIANT_ARCH} tools_path)
target_compile_options(${name} PRIVATE $<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-B${tools_path}>)
endif()

if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS)
Expand Down Expand Up @@ -384,11 +381,6 @@ function(_add_host_variant_link_flags target)
cxx_link_libraries)
target_link_libraries(${target} PRIVATE
${cxx_link_libraries})

swift_android_libgcc_for_arch_cross_compile(${SWIFT_HOST_VARIANT_ARCH}
${SWIFT_HOST_VARIANT_ARCH}_LIB)
target_link_directories(${target} PRIVATE
${${SWIFT_HOST_VARIANT_ARCH}_LIB})
else()
# If lto is enabled, we need to add the object path flag so that the LTO code
# generator leaves the intermediate object file in a place where it will not
Expand Down
3 changes: 0 additions & 3 deletions cmake/modules/AddSwiftUnittests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ function(add_swift_unittest test_dirname)
COMMAND "${SWIFT_SOURCE_DIR}/utils/swift-rpathize.py"
"$<TARGET_FILE:${test_dirname}>")
elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android")
swift_android_libgcc_for_arch_cross_compile(${SWIFT_HOST_VARIANT_ARCH} android_system_libs)
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES
"${android_system_libs}")
set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES "log")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
Expand Down
40 changes: 4 additions & 36 deletions cmake/modules/SwiftAndroidSupport.cmake
Original file line number Diff line number Diff line change
@@ -1,28 +1,7 @@
function(swift_android_prebuilt_host_name prebuilt_var_name)
# Get the prebuilt suffix to create the correct toolchain path when using the NDK
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
set(${prebuilt_var_name} darwin-x86_64 PARENT_SCOPE)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
set(${prebuilt_var_name} linux-x86_64 PARENT_SCOPE)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
set(${prebuilt_var_name} Windows-x86_64 PARENT_SCOPE)
else()
message(SEND_ERROR "cannot cross-compile to android from ${CMAKE_HOST_SYSTEM_NAME}")
endif()
endfunction()

function(swift_android_libgcc_for_arch_cross_compile arch var)
set(paths)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
list(APPEND paths "${SWIFT_SDK_ANDROID_ARCH_${arch}_PATH}/../lib/gcc/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x")
endif()
set(${var} ${paths} PARENT_SCOPE)
endfunction()

function(swift_android_sysroot sysroot_var_name)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
swift_android_prebuilt_host_name(prebuilt_build)
set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${prebuilt_build}/sysroot" PARENT_SCOPE)
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} platform)
set(${sysroot_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${platform}-x86_64/sysroot" PARENT_SCOPE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be change shortly when Google releases native NDK for Darwin-arm64. I think the previous function was better in case further changes were needed. The Windows/windows change is fine, but it was probably was working because Windows filesystem is normally case insensitive.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can always change this later if we ever support that mooted arm64 NDK.

elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
set(${sysroot_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}" PARENT_SCOPE)
else()
Expand All @@ -32,19 +11,8 @@ endfunction()

function(swift_android_tools_path arch path_var_name)
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
swift_android_prebuilt_host_name(prebuilt_build)
if("${arch}" STREQUAL "i686")
set(ndk_prebuilt_path
"${SWIFT_ANDROID_NDK_PATH}/toolchains/x86-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
elseif("${arch}" STREQUAL "x86_64")
set(ndk_prebuilt_path
"${SWIFT_ANDROID_NDK_PATH}/toolchains/x86_64-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
else()
set(ndk_prebuilt_path
"${SWIFT_ANDROID_NDK_PATH}/toolchains/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${prebuilt_build}")
endif()

set(${path_var_name} "${ndk_prebuilt_path}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE)
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} platform)
set(${path_var_name} "${SWIFT_ANDROID_NDK_PATH}/toolchains/llvm/prebuilt/${platform}-x86_64/bin" PARENT_SCOPE)
elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "")
set(${path_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/bin" PARENT_SCOPE)
else()
Expand Down
12 changes: 6 additions & 6 deletions docs/Android.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ To follow along with this guide, you'll need:
Ubuntu 18.04 or Ubuntu 16.04. Before attempting to build for Android,
please make sure you are able to build for Linux by following the
instructions in the Swift project README.
2. The latest version of the Android NDK (r21e at the time of this writing,
only r19 or later are supported), available to download here:
2. The latest version of the Android NDK (r23 at the time of this writing),
available to download here:
https://developer.android.com/ndk/downloads/index.html.
3. An Android device with remote debugging enabled or the emulator. We require
remote debugging in order to deploy built stdlib products to the device. You
Expand Down Expand Up @@ -73,7 +73,7 @@ Android NDK, as well as the directories that contain the `libicuucswift.so` and

```
$ ARM_DIR=path/to/libiconv-libicu-android/armeabi-v7a
$ NDK_PATH=path/to/android-ndk-r21e
$ NDK_PATH=path/to/android-ndk-r23
$ utils/build-script \
-R \ # Build in ReleaseAssert mode.
--android \ # Build for Android.
Expand All @@ -99,7 +99,7 @@ Then use the built Swift compiler from the previous step to compile a Swift
source file, targeting Android:

```
$ NDK_PATH="path/to/android-ndk-r21e"
$ NDK_PATH="path/to/android-ndk-r23"
$ build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swiftc \ # The Swift compiler built in the previous step
# The location of the tools used to build Android binaries
-tools-directory ${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/ \
Expand Down Expand Up @@ -153,7 +153,7 @@ adb push /path/to/libicu-android/armeabi-v7a/libicuucswift.so /data/local/tmp
In addition, you'll also need to copy the Android NDK's libc++:

```
$ adb push /path/to/android-ndk-r21e/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so /data/local/tmp
$ adb push /path/to/android-ndk-r23/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so /data/local/tmp
```

Finally, you'll need to copy the `hello` executable you built in the
Expand Down Expand Up @@ -196,7 +196,7 @@ $ utils/build-script \
-R \ # Build in ReleaseAssert mode.
-T \ # Run all tests, including on the Android device (add --host-test to only run Android tests on the linux host).
--android \ # Build for Android.
--android-ndk ~/android-ndk-r21e \ # Path to an Android NDK.
--android-ndk ~/android-ndk-r23 \ # Path to an Android NDK.
--android-arch armv7 \ # Optionally specify Android architecture, alternately aarch64
--android-ndk-version 21 \
--android-icu-uc ~/libicu-android/armeabi-v7a/libicuuc.so \
Expand Down
3 changes: 3 additions & 0 deletions lib/Driver/UnixToolChains.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ ToolChain::InvocationInfo toolchains::GenericUnix::constructInvocation(
}

std::string toolchains::GenericUnix::getDefaultLinker() const {
if (getTriple().isAndroid())
return "lld";

switch (getTriple().getArch()) {
case llvm::Triple::arm:
case llvm::Triple::aarch64:
Expand Down
35 changes: 20 additions & 15 deletions stdlib/cmake/modules/AddSwiftStdlib.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,9 @@ function(_add_target_variant_c_compile_link_flags)
endif()

if("${CFLAGS_SDK}" STREQUAL "ANDROID")
# lld can handle targeting the android build. However, if lld is not
# enabled, then fallback to the linker included in the android NDK.
if(NOT SWIFT_USE_LINKER STREQUAL "lld")
swift_android_tools_path(${CFLAGS_ARCH} tools_path)
list(APPEND result "-B" "${tools_path}")
endif()
# Make sure the Android NDK lld is used.
swift_android_tools_path(${CFLAGS_ARCH} tools_path)
list(APPEND result "-B" "${tools_path}")
Copy link
Member Author

@finagolfin finagolfin Aug 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Brought the NDK tools path back here and tested it by passing the prebuilt clang that comes with the Swift trunk snapshot toolchain, as that's the clang a fresh build would use too, to --native-clang-tools-path when cross-compiling the standalone stdlib, only to hit another problem: it's trying to link against libgcc. I dug into this difference and the NDK clang hardcodes using compiler-rt instead, along with other changes related to libunwind.

We may be better off changing the clang used to link for Android with a freshly-built Swift toolchain to the NDK clang too, let me know what you think.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@drodriguez, just waiting to hear from you about this.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the radio silence. It has been a busy couple of weeks lately.

What I have done:

  • Upgraded the CI machines to Ubuntu 18.04. This was required with the recent drop of support for 16.04, which this machines were using.
  • Checked the rebranch that was supposed to happen soon.
  • NDK r23 was installed on the machines. Not being used, but ready to be used.
  • All the Termux libraries that you required as dependencies are installed in two directories, ready to be used. They are all installed as if they were in Termux, which makes using them a question of adding an include and a library path, which should simplify things (I hope).

What I have not done:

  • Checked the rebranch recently.
  • Checked that this changes work on CI.
  • Checked if Termux ICU can replace the aging ICU libraries that currently CI uses.

I will probably try to find out some time for the rebranch check (because the clock is ticking on that one). I will try to get to the others as soon as I can.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've been getting the stdlib built for Android with the Swift-forked clang and I just noticed that clang 13 switches Android to building with compiler-rt and libunwind, llvm/llvm-project@91f8aacc0, which was upstreamed from the NDK clang. Since the upcoming Swift rebranch has that patch too, I think it will break the community Android CI, unless we switch it to Android NDK 23.

We should probably get this NDK 23 pull in before the rebranch: the good news is that I have the Swift-forked clang building the stdlib for Android now, with the patches in my first link. I've just kicked off a build to make sure the validation suite passes for me locally on linux, just as the Android CI runs with --host-test --skip-test-linux, and will update this pull with those changes once that passes. You can push the work with Termux packages till we get the corelibs built with #38441, as those Android library packages are only really needed for that pull, not this one.

endif()

if("${CFLAGS_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
Expand Down Expand Up @@ -389,8 +386,8 @@ function(_add_target_variant_link_flags)
MACCATALYST_BUILD_FLAVOR "${LFLAGS_MACCATALYST_BUILD_FLAVOR}")
if("${LFLAGS_SDK}" STREQUAL "LINUX")
list(APPEND link_libraries "pthread" "dl")
if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686")
list(APPEND link_libraries PRIVATE "atomic")
if("${LFLAGS_ARCH}" MATCHES "armv6|armv7|i686")
list(APPEND link_libraries "atomic")
endif()
elseif("${LFLAGS_SDK}" STREQUAL "FREEBSD")
list(APPEND link_libraries "pthread")
Expand All @@ -417,8 +414,14 @@ function(_add_target_variant_link_flags)
list(APPEND result "-Wl,-Bsymbolic")
elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
list(APPEND link_libraries "dl" "log")
if("${LFLAGS_ARCH}" STREQUAL "armv7")
list(APPEND link_libraries "atomic")
endif()
# We need to add the math library, which is linked implicitly by libc++
list(APPEND result "-lm")
if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
list(APPEND result "-resource-dir=${SWIFT_SDK_ANDROID_ARCH_${LFLAGS_ARCH}_PATH}/../lib64/clang/${SWIFT_ANDROID_NDK_CLANG_VERSION}")
endif()

# link against the custom C++ library
swift_android_cxx_libraries_for_arch(${LFLAGS_ARCH} cxx_link_libraries)
Expand All @@ -428,11 +431,6 @@ function(_add_target_variant_link_flags)
list(APPEND link_libraries
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_I18N}
${SWIFT_ANDROID_${LFLAGS_ARCH}_ICU_UC})

swift_android_libgcc_for_arch_cross_compile(${LFLAGS_ARCH} ${LFLAGS_ARCH}_LIB)
foreach(path IN LISTS ${LFLAGS_ARCH}_LIB)
list(APPEND library_search_directories ${path})
endforeach()
else()
# If lto is enabled, we need to add the object path flag so that the LTO code
# generator leaves the intermediate object file in a place where it will not
Expand Down Expand Up @@ -460,10 +458,17 @@ function(_add_target_variant_link_flags)
endif()

if(SWIFT_USE_LINKER AND NOT SWIFT_COMPILER_IS_MSVC_LIKE)
# The linker is normally chosen based on the host, but the Android NDK only
# uses lld now.
if("${LFLAGS_SDK}" STREQUAL "ANDROID")
set(linker "lld")
else()
set(linker "${SWIFT_USE_LINKER}")
endif()
if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows)
list(APPEND result "-fuse-ld=${SWIFT_USE_LINKER}.exe")
list(APPEND result "-fuse-ld=${linker}.exe")
else()
list(APPEND result "-fuse-ld=${SWIFT_USE_LINKER}")
list(APPEND result "-fuse-ld=${linker}")
endif()
endif()

Expand Down
2 changes: 1 addition & 1 deletion stdlib/public/runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ foreach(sdk ${SWIFT_SDKS})
endif()
set(libpthread -lpthread)
set(android_libraries)
if(sdk STREQUAL ANDROID)
if(${sdk} STREQUAL ANDROID)
set(android_libraries -llog)
set(libpthread)
endif()
Expand Down
1 change: 1 addition & 0 deletions test/AutoDiff/validation-test/reflection.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// REQUIRES: no_asan
// UNSUPPORTED: OS=linux-android, OS=linux-androideabi
// RUN: %empty-directory(%t)
import _Differentiation

Expand Down
8 changes: 8 additions & 0 deletions test/LinkerSections/function_sections-lld.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// REQUIRES: OS=linux-androideabi || OS=linux-android
// RUN: %empty-directory(%t)
// RUN: %target-build-swift -Xfrontend -function-sections -emit-module -emit-library -static -parse-stdlib %S/Inputs/FunctionSections.swift
// RUN: %target-build-swift -Xlinker --gc-sections -Xlinker -Map=%t/../../FunctionSections.map -I%t/../.. -L%t/../.. -lFunctionSections %S/Inputs/FunctionSectionsUse.swift
// RUN: %FileCheck %s < %t/../../FunctionSections.map

// CHECK-NOT: .text.$s16FunctionSections5func2yyF
// CHECK: .text.$s16FunctionSections5func1yyF
2 changes: 1 addition & 1 deletion test/LinkerSections/function_sections.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// REQUIRES: OS=linux-gnu || OS=linux-androideabi || OS=linux-android || OS=freebsd
// REQUIRES: OS=linux-gnu || OS=freebsd
// RUN: %empty-directory(%t)
// RUN: %target-build-swift -Xfrontend -function-sections -emit-module -emit-library -static -parse-stdlib %S/Inputs/FunctionSections.swift
// RUN: %target-build-swift -Xlinker --gc-sections -Xlinker -Map=%t/../../FunctionSections.map -I%t/../.. -L%t/../.. -lFunctionSections %S/Inputs/FunctionSectionsUse.swift
Expand Down
1 change: 1 addition & 0 deletions test/Reflection/capture_descriptors.sil
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

// SR-12893
// XFAIL: openbsd
// UNSUPPORTED: OS=linux-android, OS=linux-androideabi

// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -emit-module -emit-library -module-name capture_descriptors -o %t/capture_descriptors%{target-shared-library-suffix} -L%t/../../.. -lBlocksRuntime
Expand Down
1 change: 1 addition & 0 deletions test/Reflection/typeref_decoding_imported.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
// RUN: %target-swift-reflection-dump -binary-filename %t/%target-library-name(TypesToReflect) | %FileCheck %s --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-cpu

// UNSUPPORTED: CPU=arm64e
// UNSUPPORTED: OS=linux-android, OS=linux-androideabi

// CHECK-32: FIELDS:
// CHECK-32: =======
Expand Down
17 changes: 5 additions & 12 deletions test/lit.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -440,10 +440,7 @@ differentiable_programming = lit_config.params.get('differentiable_programming',
if differentiable_programming is not None:
config.available_features.add('differentiable_programming')

# On Android, LLVM LTO is only supported when the driver uses lld.
# And skip lto tests when driver uses gold linker.
if not (run_os in ['linux-android', 'linux-androideabi']) or (config.android_linker_name == 'lld'):
config.available_features.add('lld_lto')
config.available_features.add('lld_lto')

test_options = os.environ.get('SWIFT_TEST_OPTIONS')
if test_options:
Expand Down Expand Up @@ -1489,18 +1486,14 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
config.android_ndk_path, "toolchains", "llvm", "prebuilt",
prebuilt_directory)
tools_directory = shell_quote(make_path(
toolchain_directory, ndk_platform_triple, "bin"))
toolchain_directory, "bin"))
lit_config.note("Testing Android " + config.variant_triple)
config.target_object_format = "elf"
config.target_shared_library_prefix = 'lib'
config.target_shared_library_suffix = ".so"
config.target_runtime = "native"
config.target_swift_autolink_extract = inferSwiftBinary("swift-autolink-extract")
config.target_sdk_name = "android"
android_link_paths_opt = "-L {}".format(
shell_quote(make_path(
toolchain_directory, "lib", "gcc", ndk_platform_triple,
"{}.x".format(config.android_ndk_gcc_version))))
config.resource_dir_opt = ("-resource-dir %s" % test_resource_dir)
# Since NDK r19, the headers and libraries are available in a unified
# sysroot at $NDK_PATH/toolchains/llvm/prebuilt/$prebuilt_directory/sysroot,
Expand All @@ -1511,7 +1504,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
'-sdk', config.variant_sdk, '-Xclang-linker',
'--target={}{}'.format(config.variant_triple, config.android_api_level),
'-tools-directory', tools_directory,
android_link_paths_opt, '-use-ld=%s' % config.android_linker_name,
'-use-ld=%s' % config.android_linker_name,
config.resource_dir_opt, mcp_opt, config.swift_test_options,
config.swift_driver_test_options, swift_execution_tests_extra_flags])
config.target_codesign = "echo"
Expand All @@ -1523,7 +1516,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
config.target_swift_frontend = ' '.join([
config.swift_frontend,
'-target', config.variant_triple,
'-sdk', config.variant_sdk, android_link_paths_opt, config.resource_dir_opt,
'-sdk', config.variant_sdk, config.resource_dir_opt,
mcp_opt, config.swift_test_options, config.swift_frontend_test_options])
subst_target_swift_frontend_mock_sdk = config.target_swift_frontend
subst_target_swift_frontend_mock_sdk_after = ""
Expand Down Expand Up @@ -1558,7 +1551,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
'-sdk', config.variant_sdk, '-Xclang-linker',
'--target={}{}'.format(config.variant_triple, config.android_api_level),
'-tools-directory', tools_directory,
android_link_paths_opt, config.resource_dir_opt, mcp_opt,
config.resource_dir_opt, mcp_opt,
'-use-ld=%s' % config.android_linker_name,
config.swift_driver_test_options])
config.target_swift_modulewrap = ' '.join([
Expand Down
8 changes: 1 addition & 7 deletions test/lit.site.cfg.in
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ config.swift_frontend_test_options = "@SWIFT_FRONTEND_TEST_OPTIONS@"
config.darwin_xcrun_toolchain = "@SWIFT_DARWIN_XCRUN_TOOLCHAIN@"

# --- android ---
config.android_linker_name = "lld"
config.android_ndk_path = "@SWIFT_ANDROID_NDK_PATH@"
config.android_ndk_gcc_version = "@SWIFT_ANDROID_NDK_GCC_VERSION@"
config.android_api_level = "@SWIFT_ANDROID_API_LEVEL@"

# --- Windows ---
Expand Down Expand Up @@ -127,12 +127,6 @@ if "@SWIFT_ENABLE_SOURCEKIT_TESTS@" == "TRUE":
if "@SWIFT_HAVE_LIBXML2@" == "TRUE":
config.available_features.add('libxml2')

if "@SWIFT_USE_LINKER@" == "lld":
config.android_linker_name = "lld"
else:
# even if SWIFT_USE_LINKER isn't set, we cannot use BFD for Android
config.android_linker_name = "gold"

if '@SWIFT_INCLUDE_TOOLS@' == 'TRUE':
config.available_features.add('swift_tools_extra')

Expand Down
2 changes: 0 additions & 2 deletions utils/build-script-impl
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ KNOWN_SETTINGS=(
android-icu-uc "" "Path to libicuuc.so"
android-icu-uc-include "" "Path to a directory containing headers for libicuuc"
android-ndk "" "An absolute path to the NDK that will be used as a libc implementation for Android builds"
android-ndk-gcc-version "" "The GCC version to use when building for Android. Currently only 4.9 is supported"

## Darwin Options
darwin-crash-reporter-client "" "whether to enable CrashReporter integration"
Expand Down Expand Up @@ -1892,7 +1891,6 @@ for host in "${ALL_HOSTS[@]}"; do
cmake_options=(
"${cmake_options[@]}"
-DSWIFT_ANDROID_NDK_PATH:STRING="${ANDROID_NDK}"
-DSWIFT_ANDROID_NDK_GCC_VERSION:STRING="${ANDROID_NDK_GCC_VERSION}"
-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}"
Expand Down
Loading