@@ -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