mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Check if building on Android through the ANDROID_DATA environment variable, then set SWIFT_ANDROID_NATIVE_SYSROOT to the default layout for the Termux app, and key all the include, lib, and other SDK paths off of that. The system libc and a few other libraries are linked against from /system/lib[64]. Finally, check if lit is running natively on Android and don't use adb if so.
103 lines
4.1 KiB
CMake
103 lines
4.1 KiB
CMake
function(swift_android_libcxx_include_paths var)
|
|
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)
|
|
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()
|
|
|
|
function(swift_android_lib_for_arch arch var)
|
|
set(_prebuilt "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_PREBUILT_PATH}")
|
|
set(_host "${SWIFT_SDK_ANDROID_ARCH_${arch}_NDK_TRIPLE}")
|
|
|
|
set(paths)
|
|
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 "Couldn't set ${arch} library paths for Android")
|
|
endif()
|
|
|
|
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()
|