| 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() |