@@ -946,7 +946,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
946
946
def get_architecture_value(**kwargs):
947
947
result = kwargs[run_cpu]
948
948
if result is None:
949
- if run_cpu == "armv7s" or run_cpu == "armv7k" :
949
+ if run_cpu.startswith("armv7") :
950
950
result = kwargs["armv7"]
951
951
elif run_cpu == "arm64":
952
952
result = kwards["aarch64"]
@@ -957,9 +957,22 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
957
957
ndk_platform_triple = get_architecture_value(armv7="arm-linux-androideabi",
958
958
aarch64="aarch64-linux-android")
959
959
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"))
963
976
lit_config.note("Testing Android " + config.variant_triple)
964
977
config.target_object_format = "elf"
965
978
config.target_shared_library_prefix = 'lib'
@@ -971,67 +984,82 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
971
984
config.target_runtime = "native"
972
985
config.target_swift_autolink_extract = inferSwiftBinary("swift-autolink-extract")
973
986
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")))
981
996
# Since NDK r14 the headers are unified under $NDK_PATH/sysroot, so the -sdk
982
997
# switch is not enough. Additionally we have to include both the unified
983
998
# 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])
997
1018
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'"])
1001
1023
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])
1008
1032
subst_target_swift_frontend_mock_sdk = config.target_swift_frontend
1009
1033
subst_target_swift_frontend_mock_sdk_after = ""
1010
1034
config.target_run = make_path(config.swift_src_root, 'utils', 'android', 'adb_test_runner.py')
1011
1035
# 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])
1019
1044
subst_target_swift_ide_test_mock_sdk = config.target_swift_ide_test
1020
1045
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([
1033
1061
tools_directory,
1034
- make_path(test_resource_dir, config.target_sdk_name))
1062
+ '-L%s' % make_path(test_resource_dir, config.target_sdk_name)] )
1035
1063
# The Swift interpreter is not available when targeting Android.
1036
1064
config.available_features.remove('swift_interpreter')
1037
1065
0 commit comments