diff --git a/CMakeLists.txt b/CMakeLists.txt index ec1a9ebc4ca4f..59ca0e66d9a65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -603,7 +603,13 @@ if(SWIFT_HOST_VARIANT_SDK) set(SWIFT_HOST_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") else() if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - set(SWIFT_HOST_VARIANT_SDK_default "LINUX") + # CMake on an Android host sets this to Linux, so check for the ANDROID_DATA + # environment variable to see if we're building on Android. + if(NOT "$ENV{ANDROID_DATA}" STREQUAL "") + set(SWIFT_HOST_VARIANT_SDK_default "ANDROID") + else() + set(SWIFT_HOST_VARIANT_SDK_default "LINUX") + endif() elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") set(SWIFT_HOST_VARIANT_SDK_default "FREEBSD") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN") @@ -613,6 +619,7 @@ else() elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku") set(SWIFT_HOST_VARIANT_SDK_default "HAIKU") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") + # CMAKE_SYSTEM_NAME might be set this way when cross-compiling to Android. set(SWIFT_HOST_VARIANT_SDK_default "ANDROID") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set(SWIFT_HOST_VARIANT_SDK_default "OSX") @@ -677,7 +684,7 @@ endif() # FIXME: the parameters we specify in SWIFT_SDKS are lacking architecture specifics, # so we need to hard-code it. For example, the SDK for Android is just 'ANDROID', -# which we assume below to be armv7. +# and we have to specify SWIFT_SDK_ANDROID_ARCHITECTURES separately. # The iOS SDKs all have their architectures hardcoded because they are just specified by name (e.g. 'IOS' or 'WATCHOS'). # We can't cross-compile the standard library for another linux architecture, # because the SDK list would just be 'LINUX' and we couldn't disambiguate it from the host. @@ -739,9 +746,16 @@ elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "HAIKU") elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "ANDROID") set(SWIFT_HOST_VARIANT "android" CACHE STRING - "Deployment OS for Swift host tools (the compiler) [android].") + "Deployment OS for Swift host tools (the compiler) [android]") - configure_sdk_unix("Android" "${SWIFT_HOST_VARIANT_ARCH}") + set(SWIFT_ANDROID_NATIVE_SYSROOT "/data/data/com.termux/files" CACHE STRING + "Path to Android sysroot, default initialized to the Termux app's layout") + + if("${SWIFT_SDK_ANDROID_ARCHITECTURES}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCHITECTURES ${SWIFT_HOST_VARIANT_ARCH}) + endif() + + configure_sdk_unix("Android" "${SWIFT_SDK_ANDROID_ARCHITECTURES}") set(SWIFT_PRIMARY_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}") set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}") diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index d142efedeed79..171407397a1b4 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -140,7 +140,8 @@ function(_add_variant_c_compile_link_flags) # lld can handle targeting the android build. However, if lld is not # enabled, then fallback to the linker included in the android NDK. if(NOT SWIFT_ENABLE_LLD_LINKER) - list(APPEND result "-B" "${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${CFLAGS_ARCH}_NDK_TRIPLE}/bin") + swift_android_tools_path(${CFLAGS_ARCH} tools_path) + list(APPEND result "-B" "${tools_path}") endif() endif() @@ -482,22 +483,9 @@ function(_add_variant_link_flags) # We need to add the math library, which is linked implicitly by libc++ list(APPEND result "-lm") - if("${LFLAGS_ARCH}" MATCHES armv7) - set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a") - elseif("${LFLAGS_ARCH}" MATCHES aarch64) - set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a") - elseif("${LFLAGS_ARCH}" MATCHES i686) - set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/x86") - elseif("${LFLAGS_ARCH}" MATCHES x86_64) - set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/x86_64") - else() - message(SEND_ERROR "unknown architecture (${LFLAGS_ARCH}) for android") - endif() - # link against the custom C++ library - list(APPEND link_libraries - ${android_libcxx_path}/libc++abi.a - ${android_libcxx_path}/libc++_shared.so) + swift_android_cxx_libraries_for_arch(${LFLAGS_ARCH} cxx_link_libraries) + list(APPEND link_libraries ${cxx_link_libraries}) # link against the ICU libraries list(APPEND link_libraries @@ -1104,7 +1092,7 @@ function(_add_swift_library_single target name) set_target_properties("${target}" PROPERTIES INSTALL_NAME_DIR "${install_name_dir}") - elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX" AND NOT "${SWIFTLIB_SINGLE_SDK}" STREQUAL "ANDROID") + elseif("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX") set_target_properties("${target}" PROPERTIES INSTALL_RPATH "$ORIGIN:/usr/lib/swift/linux") @@ -1116,6 +1104,14 @@ function(_add_swift_library_single target name) # CMake generates incorrect rule `$SONAME_FLAG $INSTALLNAME_DIR$SONAME` for Android build on macOS cross-compile host. # Proper linker flags constructed manually. See below variable `swiftlib_link_flags_all`. set_target_properties("${target}" PROPERTIES NO_SONAME TRUE) + # Only set the install RPATH if cross-compiling the host tools, in which + # case both the NDK and Sysroot paths must be set. + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "" AND + NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set_target_properties("${target}" + PROPERTIES + INSTALL_RPATH "$ORIGIN") + endif() endif() set_target_properties("${target}" PROPERTIES BUILD_WITH_INSTALL_RPATH YES) diff --git a/cmake/modules/AddSwiftUnittests.cmake b/cmake/modules/AddSwiftUnittests.cmake index 52dcbabab573d..635253a448f6e 100644 --- a/cmake/modules/AddSwiftUnittests.cmake +++ b/cmake/modules/AddSwiftUnittests.cmake @@ -42,9 +42,14 @@ function(add_swift_unittest test_dirname) if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath -Xlinker ${SWIFT_LIBRARY_OUTPUT_INTDIR}/swift/macosx") + elseif("${SWIFT_HOST_VARIANT}" STREQUAL "android") + swift_android_lib_for_arch(${SWIFT_HOST_VARIANT_ARCH} android_system_libs) + set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_DIRECTORIES + "${android_system_libs}") + set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES "log") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - set_property(TARGET "${test_dirname}" APPEND_STRING PROPERTY - LINK_FLAGS " -latomic") + set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES + "atomic") endif() find_program(LDLLD_PATH "ld.lld") diff --git a/cmake/modules/SwiftAndroidSupport.cmake b/cmake/modules/SwiftAndroidSupport.cmake index f2070c4ebf4dd..9379031947d3f 100644 --- a/cmake/modules/SwiftAndroidSupport.cmake +++ b/cmake/modules/SwiftAndroidSupport.cmake @@ -1,16 +1,32 @@ function(swift_android_libcxx_include_paths var) - set(${var} - "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include" - "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include" - PARENT_SCOPE) + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(${var} + "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/include" + "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++abi/include" + PARENT_SCOPE) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(${var} + "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/c++/v1" + PARENT_SCOPE) + else() + message(SEND_ERROR "Couldn't set libc++ include paths for Android") + endif() endfunction() function(swift_android_include_for_arch arch var) set(paths) - list(APPEND paths - "${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include" - "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" - "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + list(APPEND paths + "${SWIFT_ANDROID_NDK_PATH}/sources/android/support/include" + "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" + "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + list(APPEND paths + "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" + "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") + else() + message(SEND_ERROR "Couldn't set ${arch} include paths for Android") + endif() set(${var} ${paths} PARENT_SCOPE) endfunction() @@ -19,18 +35,68 @@ function(swift_android_lib_for_arch arch var) set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}") set(paths) - if(arch STREQUAL armv7) - list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a") - elseif(arch STREQUAL aarch64) - list(APPEND paths "${_prebuilt}/${_host}/lib64") - elseif(arch STREQUAL i686) - list(APPEND paths "${_prebuilt}/${_host}/lib") - elseif(arch STREQUAL x86_64) - list(APPEND paths "${_prebuilt}/${_host}/lib64") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + if(arch STREQUAL armv7) + list(APPEND paths "${_prebuilt}/${_host}/lib/armv7-a") + elseif(arch STREQUAL aarch64) + list(APPEND paths "${_prebuilt}/${_host}/lib64") + elseif(arch STREQUAL i686) + list(APPEND paths "${_prebuilt}/${_host}/lib") + elseif(arch STREQUAL x86_64) + list(APPEND paths "${_prebuilt}/${_host}/lib64") + else() + message(SEND_ERROR "unknown architecture (${arch}) for android") + endif() + list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + list(APPEND paths "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib") + if("${arch}" MATCHES armv7) + list(APPEND paths "/system/lib") + elseif("${arch}" MATCHES aarch64) + list(APPEND paths "/system/lib64") + else() + message(SEND_ERROR "unknown architecture (${arch}) when compiling for Android host") + endif() else() - message(SEND_ERROR "unknown architecture (${arch}) for android") + message(SEND_ERROR "Couldn't set ${arch} library paths for Android") endif() - list(APPEND paths "${_prebuilt}/lib/gcc/${_host}/${SWIFT_ANDROID_NDK_GCC_VERSION}.x") set(${var} ${paths} PARENT_SCOPE) endfunction() + +function(swift_android_tools_path arch path_var_name) + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(${path_var_name} "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}/${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}/bin" PARENT_SCOPE) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(${path_var_name} "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/bin" PARENT_SCOPE) + else() + message(SEND_ERROR "Couldn't set ${arch} tools path for Android") + endif() +endfunction () + +function(swift_android_cxx_libraries_for_arch arch libraries_var_name) + set(link_libraries) + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + if("${arch}" MATCHES armv7) + set(cxx_arch armeabi-v7a) + elseif("${arch}" MATCHES aarch64) + set(cxx_arch arm64-v8a) + elseif("${arch}" MATCHES i686) + set(cxx_arch x86) + elseif("${arch}" MATCHES x86_64) + set(cxx_arch x86_64) + else() + message(SEND_ERROR "unknown architecture (${arch}) when cross-compiling for Android") + endif() + + set(android_libcxx_path "${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/${cxx_arch}") + list(APPEND link_libraries ${android_libcxx_path}/libc++abi.a + ${android_libcxx_path}/libc++_shared.so) + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + list(APPEND link_libraries "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/lib/libc++_shared.so") + else() + message(SEND_ERROR "Couldn't set ${arch} libc++ libraries needed for Android") + endif() + + set(${libraries_var_name} ${link_libraries} PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake index dd303e3561403..5ebe340142930 100644 --- a/cmake/modules/SwiftConfigureSDK.cmake +++ b/cmake/modules/SwiftConfigureSDK.cmake @@ -47,7 +47,12 @@ function(_report_sdk prefix) message(STATUS " ${arch} LIB: ${${arch}_LIB}") endforeach() elseif("${prefix}" STREQUAL "ANDROID") - message(STATUS " NDK: $ENV{SWIFT_ANDROID_NDK_PATH}") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + message(STATUS " NDK: $ENV{SWIFT_ANDROID_NDK_PATH}") + endif() + if(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + message(STATUS " Sysroot: ${SWIFT_ANDROID_NATIVE_SYSROOT}") + endif() foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES}) swift_android_include_for_arch(${arch} ${arch}_INCLUDE) swift_android_lib_for_arch(${arch} ${arch}_LIB) @@ -204,18 +209,37 @@ macro(configure_sdk_unix name architectures) foreach(arch ${architectures}) if("${prefix}" STREQUAL "ANDROID") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library headers") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NDK_PATH}/sysroot/usr/include" CACHE STRING "Path to C library architecture headers") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library headers") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY "${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include" CACHE STRING "Path to C library architecture headers") + else() + message(SEND_ERROR "Couldn't find LIBC_INCLUDE_DIRECTORY for Android") + endif() if("${arch}" STREQUAL "armv7") set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "arm-linux-androideabi") set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "arm") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}") + else() + message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_armv7_PATH") + endif() set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "armv7-none-linux-androideabi") elseif("${arch}" STREQUAL "aarch64") set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "aarch64-linux-android") set(SWIFT_SDK_ANDROID_ARCH_${arch}_ALT_SPELLING "aarch64") - set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64") + if(NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NDK_PATH}/platforms/android-${SWIFT_ANDROID_API_LEVEL}/arch-arm64") + elseif(NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL "") + set(SWIFT_SDK_ANDROID_ARCH_${arch}_PATH "${SWIFT_ANDROID_NATIVE_SYSROOT}") + else() + message(SEND_ERROR "Couldn't find SWIFT_SDK_ANDROID_ARCH_aarch64_PATH") + endif() set(SWIFT_SDK_ANDROID_ARCH_${arch}_TRIPLE "aarch64-unknown-linux-android") elseif("${arch}" STREQUAL "i686") set(SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE "i686-linux-android") diff --git a/stdlib/public/stubs/CommandLine.cpp b/stdlib/public/stubs/CommandLine.cpp index 88ae419852635..0b4506391beeb 100644 --- a/stdlib/public/stubs/CommandLine.cpp +++ b/stdlib/public/stubs/CommandLine.cpp @@ -206,7 +206,7 @@ char ** _swift_stdlib_getUnsafeArgvArgc(int *outArgLen) { return outBuf; } -#else // __ANDROID__; Add your favorite arch's command line arg grabber here. +#else // Add your favorite OS's command line arg grabber here. SWIFT_RUNTIME_STDLIB_API char ** _swift_stdlib_getUnsafeArgvArgc(int *outArgLen) { if (_swift_stdlib_ProcessOverrideUnsafeArgv) { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5c5881dc60396..a3d13a40b0560 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -248,7 +248,9 @@ _Block_release(void) { }\n") if("${SDK}" STREQUAL "IOS" OR "${SDK}" STREQUAL "TVOS" OR "${SDK}" STREQUAL "WATCHOS") # These are supported testing SDKs, but their implementation of # `command_upload_stdlib` is hidden. - elseif("${SDK}" STREQUAL "ANDROID") + elseif("${SDK}" STREQUAL "ANDROID" AND NOT "${SWIFT_HOST_VARIANT}" STREQUAL "android") + # This adb setup is only needed when cross-compiling for Android, so the + # second check above makes sure we don't bother when the host is Android. if("${SWIFT_ANDROID_DEPLOY_DEVICE_PATH}" STREQUAL "") message(FATAL_ERROR "When running Android host tests, you must specify the directory on the device " diff --git a/test/lit.cfg b/test/lit.cfg index ede72624511aa..c65165ff227d8 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -674,6 +674,10 @@ elif platform.system() == 'Linux': if swift_test_mode != 'only_non_executable': config.available_features.add('swift_interpreter') +# The global environment in Android sets ANDROID_DATA, so if that variable is +# set, we are probably running in Android. +kIsAndroid = 'ANDROID_DATA' in os.environ + # swift-remoteast-test requires the ability to compile and run code # for the system we compiled the swift-remoteast-test executable on. # This is potentially a stronger constraint than just "can we interpret", @@ -966,8 +970,11 @@ elif run_os in ['windows-msvc']: ('%r -modulewrap -target %s' % (config.swiftc, config.variant_triple)) -elif run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'windows-cygnus', 'windows-gnu']: - # Linux/FreeBSD/Cygwin +elif (run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'windows-cygnus', 'windows-gnu'] or + (kIsAndroid and run_os in ['linux-android', 'linux-androideabi'])): + # Running lit and the compiler on Android itself is more like running on Linux, + # ie the NDK and adb aren't needed, so use this instead. + # Linux/FreeBSD/Cygwin/Android if run_os == 'windows-cygnus': lit_config.note("Testing Cygwin " + config.variant_triple) config.target_object_format = "coff" @@ -986,6 +993,12 @@ elif run_os in ['linux-gnu', 'linux-gnueabihf', 'freebsd', 'windows-cygnus', 'wi config.target_shared_library_prefix = 'lib' config.target_shared_library_suffix = ".so" config.target_sdk_name = "freebsd" + elif kIsAndroid: + lit_config.note("Testing Android " + config.variant_triple) + config.target_object_format = "elf" + config.target_shared_library_prefix = 'lib' + config.target_shared_library_suffix = ".so" + config.target_sdk_name = "android" else: lit_config.note("Testing Linux " + config.variant_triple) config.target_object_format = "elf"