Skip to content

Commit 9e9c022

Browse files
Daniel Rodríguez Troitiñodrodriguez
authored andcommitted
[test] Style fixes for "Modify test scripts for aarch64 and modern NDKs"
Some style fixes that @compnerd proposed in PR #19503. - Instead of checking for the two known ARMv7 subarchitectures, check for everything that starts with armv7 and consider it armv7. - Try finding the current platform to select the right prebuilt directory for the NDK tools. - Use -isystem for the system header includes when passing them to clang. - Modify the format strings which started to be very wild into simpler `' '.join([...])` which, IMO, read better. - Hoist some common path parts to not repeat the same long paths in a couple of places. - Add more library search paths (missing for atomic)
1 parent 48d8ed0 commit 9e9c022

File tree

1 file changed

+81
-53
lines changed

1 file changed

+81
-53
lines changed

test/lit.cfg

Lines changed: 81 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
946946
def get_architecture_value(**kwargs):
947947
result = kwargs[run_cpu]
948948
if result is None:
949-
if run_cpu == "armv7s" or run_cpu == "armv7k":
949+
if run_cpu.startswith("armv7"):
950950
result = kwargs["armv7"]
951951
elif run_cpu == "arm64":
952952
result = kwards["aarch64"]
@@ -957,9 +957,22 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
957957
ndk_platform_triple = get_architecture_value(armv7="arm-linux-androideabi",
958958
aarch64="aarch64-linux-android")
959959
toolchain_directory_name = "{}-{}".format(ndk_platform_triple, config.android_ndk_gcc_version)
960-
tools_directory = make_path(config.android_ndk_path, "toolchains",
961-
toolchain_directory_name, "prebuilt", "linux-x86_64",
962-
ndk_platform_triple, "bin")
960+
if platform.system() == 'Linux':
961+
prebuilt_directory = 'linux-x86_64'
962+
elif platform.system() == 'Darwin':
963+
prebuilt_directory = 'darwin-x86_64'
964+
elif platform.system() == 'Windows':
965+
# TODO: NDK distributes for Windows 32 and 64 bits. platform.machine()
966+
# should allow us to find out the word size, but I don't have a
967+
# machine to test right now. I think the values are AMD64 and x86, but
968+
# I'm not sure. Everybody gets the 64 bits version for now.
969+
prebuilt_directory = 'windows-x86_64'
970+
971+
toolchain_directory = make_path(
972+
config.android_ndk_path, "toolchains", toolchain_directory_name,
973+
"prebuilt", prebuilt_directory)
974+
tools_directory = pipes.quote(make_path(
975+
toolchain_directory, ndk_platform_triple, "bin"))
963976
lit_config.note("Testing Android " + config.variant_triple)
964977
config.target_object_format = "elf"
965978
config.target_shared_library_prefix = 'lib'
@@ -971,67 +984,82 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
971984
config.target_runtime = "native"
972985
config.target_swift_autolink_extract = inferSwiftBinary("swift-autolink-extract")
973986
config.target_sdk_name = "android"
974-
android_link_paths_opt = "-L {libcxx} -L {libgcc}".format(
975-
libcxx=make_path(config.android_ndk_path,
976-
"sources", "cxx-stl", "llvm-libc++", "libs", ndk_platform_tuple),
977-
libgcc=make_path(config.android_ndk_path,
978-
"toolchains", toolchain_directory_name, "prebuilt",
979-
"linux-x86_64", "lib", "gcc", ndk_platform_triple,
980-
"{}.x".format(config.android_ndk_gcc_version)))
987+
android_link_paths_opt = "-L {} -L {} -L {}".format(
988+
pipes.quote(make_path(
989+
config.android_ndk_path, "sources", "cxx-stl", "llvm-libc++",
990+
"libs", ndk_platform_tuple)),
991+
pipes.quote(make_path(
992+
toolchain_directory, "lib", "gcc", ndk_platform_triple,
993+
"{}.x".format(config.android_ndk_gcc_version))),
994+
pipes.quote(make_path(
995+
toolchain_directory, ndk_platform_triple, "lib")))
981996
# Since NDK r14 the headers are unified under $NDK_PATH/sysroot, so the -sdk
982997
# switch is not enough. Additionally we have to include both the unified
983998
# sysroot, and the architecture sysroot.
984-
android_include_paths_opt = "-I {sysroot} -I {sysroot_arch}".format(
985-
sysroot=make_path(config.android_ndk_path, "sysroot", "usr", "include"),
986-
sysroot_arch=make_path(config.android_ndk_path, "sysroot", "usr",
987-
"include", ndk_platform_triple))
988-
config.target_build_swift = (
989-
'%s -target %s -sdk %r -tools-directory %r %s %s '
990-
'-use-ld=%s %s %s %s %s %s'
991-
% (config.swiftc,
992-
config.variant_triple, config.variant_sdk,
993-
tools_directory, android_include_paths_opt, android_link_paths_opt,
994-
config.android_linker_name,
995-
resource_dir_opt, mcp_opt, config.swift_test_options,
996-
config.swift_driver_test_options, swift_execution_tests_extra_flags))
999+
unified_android_include_path = pipes.quote(make_path(
1000+
config.android_ndk_path, "sysroot", "usr", "include"))
1001+
architecture_android_include_path = pipes.quote(make_path(
1002+
config.android_ndk_path, "sysroot", "usr", "include",
1003+
ndk_platform_triple))
1004+
android_include_paths_opt = "-I {} -I {}".format(
1005+
unified_android_include_path, architecture_android_include_path)
1006+
# clang can use -isystem, but Swift cannot.
1007+
android_include_system_paths_opt = "-isystem {} -isystem {}".format(
1008+
unified_android_include_path, architecture_android_include_path)
1009+
config.target_build_swift = ' '.join([
1010+
config.swiftc,
1011+
'-target', config.variant_triple,
1012+
'-sdk', config.variant_sdk,
1013+
'-tools-directory', tools_directory,
1014+
android_include_paths_opt, android_link_paths_opt,
1015+
'-use-ld=%s' % config.android_linker_name,
1016+
resource_dir_opt, mcp_opt, config.swift_test_options,
1017+
config.swift_driver_test_options, swift_execution_tests_extra_flags])
9971018
config.target_codesign = "echo"
998-
config.target_build_swift_dylib = (
999-
"%s -parse-as-library -emit-library -o '\\1'"
1000-
% (config.target_build_swift))
1019+
config.target_build_swift_dylib = ' '.join([
1020+
config.target_build_swift,
1021+
'-parse-as-library', '-emit-library',
1022+
'-o', "'\\1'"])
10011023
config.target_add_rpath = r'-Xlinker -rpath -Xlinker \1'
1002-
config.target_swift_frontend = (
1003-
'%s -frontend -target %s -sdk %r %s %s %s %s %s %s'
1004-
% (config.swift, config.variant_triple, config.variant_sdk,
1005-
android_include_paths_opt, android_link_paths_opt, resource_dir_opt,
1006-
mcp_opt, config.swift_test_options,
1007-
config.swift_frontend_test_options))
1024+
config.target_swift_frontend = ' '.join([
1025+
config.swift,
1026+
'-frontend',
1027+
'-target', config.variant_triple,
1028+
'-sdk', config.variant_sdk,
1029+
android_include_paths_opt, android_link_paths_opt,
1030+
resource_dir_opt, mcp_opt, config.swift_test_options,
1031+
config.swift_frontend_test_options])
10081032
subst_target_swift_frontend_mock_sdk = config.target_swift_frontend
10091033
subst_target_swift_frontend_mock_sdk_after = ""
10101034
config.target_run = make_path(config.swift_src_root, 'utils', 'android', 'adb_test_runner.py')
10111035
# FIXME: Include -sdk in this invocation.
1012-
config.target_sil_opt = (
1013-
'%s -target %s %s %s %s' %
1014-
(config.sil_opt, config.variant_triple, resource_dir_opt, mcp_opt, config.sil_test_options))
1015-
config.target_swift_ide_test = (
1016-
'%s -target %s %s %s %s' %
1017-
(config.swift_ide_test, config.variant_triple, resource_dir_opt,
1018-
mcp_opt, ccp_opt))
1036+
config.target_sil_opt = ' '.join([
1037+
config.sil_opt,
1038+
'-target', config.variant_triple,
1039+
resource_dir_opt, mcp_opt, config.sil_test_options])
1040+
config.target_swift_ide_test = ' '.join([
1041+
config.swift_ide_test,
1042+
'-target', config.variant_triple,
1043+
resource_dir_opt, mcp_opt, ccp_opt])
10191044
subst_target_swift_ide_test_mock_sdk = config.target_swift_ide_test
10201045
subst_target_swift_ide_test_mock_sdk_after = ""
1021-
config.target_swiftc_driver = (
1022-
"%s -target %s -sdk %r -tools-directory %s %s %s %s -use-ld=%s" %
1023-
(config.swiftc, config.variant_triple, config.variant_sdk,
1024-
tools_directory, android_link_paths_opt, resource_dir_opt, mcp_opt,
1025-
config.android_linker_name))
1026-
config.target_swift_modulewrap = (
1027-
'%s -modulewrap -target %s' %
1028-
(config.swiftc, config.variant_triple))
1029-
config.target_clang = (
1030-
"clang++ -target %s %s %s" %
1031-
(config.variant_triple, clang_mcp_opt, android_include_paths_opt))
1032-
config.target_ld = "{} -L{}".format(
1046+
config.target_swiftc_driver = ' '.join([
1047+
config.swiftc,
1048+
'-target', config.variant_triple,
1049+
'-sdk', config.variant_sdk,
1050+
'-tools-directory', tools_directory,
1051+
android_link_paths_opt, resource_dir_opt, mcp_opt,
1052+
'-use-ld=%s' % config.android_linker_name])
1053+
config.target_swift_modulewrap = ' '.join([
1054+
config.swiftc, '-modulewrap',
1055+
'-target', config.variant_triple])
1056+
config.target_clang = ' '.join([
1057+
'clang++',
1058+
'-target', config.variant_triple,
1059+
clang_mcp_opt, android_include_system_paths_opt])
1060+
config.target_ld = ' '.join([
10331061
tools_directory,
1034-
make_path(test_resource_dir, config.target_sdk_name))
1062+
'-L%s' % make_path(test_resource_dir, config.target_sdk_name)])
10351063
# The Swift interpreter is not available when targeting Android.
10361064
config.available_features.remove('swift_interpreter')
10371065

0 commit comments

Comments
 (0)