Skip to content

Commit 3be7b4e

Browse files
authored
Merge pull request #19503 from drodriguez/android-aarch64-test-script
[android] Modify test scripts for aarch64 and modern NDKs.
2 parents 0680ce1 + 6d5309a commit 3be7b4e

File tree

4 files changed

+64
-23
lines changed

4 files changed

+64
-23
lines changed

test/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,15 @@ foreach(SDK ${SWIFT_SDKS})
229229
${PYTHON_EXECUTABLE} "${SWIFT_SOURCE_DIR}/utils/android/adb_push_built_products.py"
230230
--ndk "${SWIFT_ANDROID_NDK_PATH}"
231231
--destination "${SWIFT_ANDROID_DEPLOY_DEVICE_PATH}"
232+
--destination-arch "${ARCH}"
232233
# Build products like libswiftCore.so.
233234
"${SWIFTLIB_DIR}/android"
234235
# These two directories may contain the same libraries,
235236
# but upload both to device just in case. Duplicates will be
236237
# overwritten, and uploading doesn't take very long anyway.
237238
"${SWIFT_ANDROID_${ARCH}_ICU_UC}"
238-
"${SWIFT_ANDROID_${ARCH}_ICU_I18N}")
239+
"${SWIFT_ANDROID_${ARCH}_ICU_I18N}"
240+
"${SWIFT_ANDROID_${ARCH}_ICU_DATA}")
239241
endif()
240242
add_custom_target("upload-stdlib${VARIANT_SUFFIX}"
241243
${command_upload_stdlib}

test/lit.cfg

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -934,39 +934,68 @@ elif run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'windows-cygnus', 'wi
934934
"clang++ -target %s %s" %
935935
(config.variant_triple, clang_mcp_opt))
936936
config.target_ld = "ld -L%r" % (make_path(test_resource_dir, config.target_sdk_name))
937-
elif run_os == 'linux-androideabi':
937+
elif run_os == 'linux-androideabi' or run_os == 'linux-android':
938+
def get_architecture_value(**kwargs):
939+
result = kwargs[run_cpu]
940+
if result is None:
941+
if run_cpu == "armv7s" or run_cpu == "armv7k":
942+
result = kwargs["armv7"]
943+
elif run_cpu == "arm64":
944+
result = kwards["aarch64"]
945+
return result
946+
947+
ndk_platform_tuple = get_architecture_value(armv7="armeabi-v7a",
948+
aarch64="arm64-v8a")
949+
ndk_platform_triple = get_architecture_value(armv7="arm-linux-androideabi",
950+
aarch64="aarch64-linux-android")
951+
toolchain_directory_name = "{}-{}".format(ndk_platform_triple, config.android_ndk_gcc_version)
952+
tools_directory = make_path(config.android_ndk_path, "toolchains",
953+
toolchain_directory_name, "prebuilt", "linux-x86_64",
954+
ndk_platform_triple, "bin")
938955
lit_config.note("Testing Android " + config.variant_triple)
939956
config.target_object_format = "elf"
940957
config.target_shared_library_prefix = 'lib'
941958
config.target_shared_library_suffix = ".so"
959+
config.target_swiftmodule_name = get_architecture_value(armv7="arm.swiftmodule",
960+
aarch64="arm64.swiftmodule")
961+
config.target_swiftdoc_name = get_architecture_value(armv7="arm.swiftdoc",
962+
aarch64="arm64.swiftdoc")
942963
config.target_runtime = "native"
943964
config.target_swift_autolink_extract = inferSwiftBinary("swift-autolink-extract")
944965
config.target_sdk_name = "android"
945-
android_linker_opt = "-L {libcxx} -L {libgcc}".format(
966+
android_link_paths_opt = "-L {libcxx} -L {libgcc}".format(
946967
libcxx=make_path(config.android_ndk_path,
947-
"sources", "cxx-stl", "llvm-libc++", "libs",
948-
"armeabi-v7a"),
968+
"sources", "cxx-stl", "llvm-libc++", "libs", ndk_platform_tuple),
949969
libgcc=make_path(config.android_ndk_path,
950-
"toolchains",
951-
"arm-linux-androideabi-{}".format(config.android_ndk_gcc_version),
952-
"prebuilt", "linux-x86_64", "lib", "gcc",
953-
"arm-linux-androideabi",
970+
"toolchains", toolchain_directory_name, "prebuilt",
971+
"linux-x86_64", "lib", "gcc", ndk_platform_triple,
954972
"{}.x".format(config.android_ndk_gcc_version)))
973+
# Since NDK r14 the headers are unified under $NDK_PATH/sysroot, so the -sdk
974+
# switch is not enough. Additionally we have to include both the unified
975+
# sysroot, and the architecture sysroot.
976+
android_include_paths_opt = "-I {sysroot} -I {sysroot_arch}".format(
977+
sysroot=make_path(config.android_ndk_path, "sysroot", "usr", "include"),
978+
sysroot_arch=make_path(config.android_ndk_path, "sysroot", "usr",
979+
"include", ndk_platform_triple))
955980
config.target_build_swift = (
956-
'%s -target %s -sdk %r %s -Xlinker -pie %s %s %s %s %s'
957-
% (config.swiftc, config.variant_triple, config.variant_sdk,
958-
android_linker_opt, resource_dir_opt, mcp_opt,
959-
config.swift_test_options,
981+
'%s -target %s -sdk %r -tools-directory %r %s %s '
982+
'-use-ld=%s %s %s %s %s %s'
983+
% (config.swiftc,
984+
config.variant_triple, config.variant_sdk,
985+
tools_directory, android_include_paths_opt, android_link_paths_opt,
986+
config.android_linker_name,
987+
resource_dir_opt, mcp_opt, config.swift_test_options,
960988
config.swift_driver_test_options, swift_execution_tests_extra_flags))
961989
config.target_codesign = "echo"
962990
config.target_build_swift_dylib = (
963991
"%s -parse-as-library -emit-library -o '\\1'"
964992
% (config.target_build_swift))
965993
config.target_add_rpath = r'-Xlinker -rpath -Xlinker \1'
966994
config.target_swift_frontend = (
967-
'%s -frontend -target %s -sdk %r %s %s %s %s'
995+
'%s -frontend -target %s -sdk %r %s %s %s %s %s %s'
968996
% (config.swift, config.variant_triple, config.variant_sdk,
969-
android_linker_opt, resource_dir_opt, mcp_opt,
997+
android_include_paths_opt, android_link_paths_opt, resource_dir_opt,
998+
mcp_opt, config.swift_test_options,
970999
config.swift_frontend_test_options))
9711000
subst_target_swift_frontend_mock_sdk = config.target_swift_frontend
9721001
subst_target_swift_frontend_mock_sdk_after = ""
@@ -982,19 +1011,18 @@ elif run_os == 'linux-androideabi':
9821011
subst_target_swift_ide_test_mock_sdk = config.target_swift_ide_test
9831012
subst_target_swift_ide_test_mock_sdk_after = ""
9841013
config.target_swiftc_driver = (
985-
"%s -target %s -sdk %r %s %s %s" %
1014+
"%s -target %s -sdk %r -tools-directory %s %s %s %s -use-ld=%s" %
9861015
(config.swiftc, config.variant_triple, config.variant_sdk,
987-
android_linker_opt, resource_dir_opt, mcp_opt))
1016+
tools_directory, android_link_paths_opt, resource_dir_opt, mcp_opt,
1017+
config.android_linker_name))
9881018
config.target_swift_modulewrap = (
9891019
'%s -modulewrap -target %s' %
9901020
(config.swiftc, config.variant_triple))
9911021
config.target_clang = (
992-
"clang++ -target %s %s" %
993-
(config.variant_triple, clang_mcp_opt))
1022+
"clang++ -target %s %s %s" %
1023+
(config.variant_triple, clang_mcp_opt, android_include_paths_opt))
9941024
config.target_ld = "{} -L{}".format(
995-
make_path(config.android_ndk_path, 'toolchains',
996-
'arm-linux-androideabi-{}'.format(config.android_ndk_gcc_version),
997-
'prebuilt', 'linux-x86_64', 'arm-linux-androideabi', 'bin'),
1025+
tools_directory,
9981026
make_path(test_resource_dir, config.target_sdk_name))
9991027
# The Swift interpreter is not available when targeting Android.
10001028
config.available_features.remove('swift_interpreter')

test/lit.site.cfg.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ if "@SWIFT_BUILD_SYNTAXPARSERLIB@" == "TRUE":
9191
if "@SWIFT_ENABLE_SOURCEKIT_TESTS@" == "TRUE":
9292
config.available_features.add('sourcekit')
9393

94+
if "@SWIFT_ENABLE_LLD_LINKER@" == "TRUE":
95+
config.android_linker_name = "lld"
96+
else:
97+
# even if SWIFT_ENABLE_GOLD_LINKER isn't set, we cannot use BFD for Android
98+
config.android_linker_name = "gold"
99+
94100
# Let the main config do the real work.
95101
if config.test_exec_root is None:
96102
config.test_exec_root = os.path.dirname(os.path.realpath(__file__))

validation-test/lit.site.cfg.in

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ if "@CMAKE_GENERATOR@" == "Xcode":
8080

8181
config.available_features.add("CMAKE_GENERATOR=@CMAKE_GENERATOR@")
8282

83+
if "@SWIFT_ENABLE_LLD_LINKER@" == "TRUE":
84+
config.android_linker_name = "lld"
85+
else:
86+
# even if SWIFT_ENABLE_GOLD_LINKER isn't set, we cannot use BFD for Android
87+
config.android_linker_name = "gold"
88+
8389
# Let the main config do the real work.
8490
config.test_exec_root = os.path.dirname(os.path.realpath(__file__))
8591
lit_config.load_config(config, "@SWIFT_SOURCE_DIR@/validation-test/lit.cfg")
86-

0 commit comments

Comments
 (0)