blob: 9379031947d3f55aa28e0e389b463e1e5fb9ae1b [file] [log] [blame]
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()