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