diff --git a/CMakeLists.txt b/CMakeLists.txt index cacf882f4a552..2720db649c0f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -800,6 +800,21 @@ endif() # Should we cross-compile the standard library for Android? is_sdk_requested(ANDROID swift_build_android) if(swift_build_android AND NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + # Get the prebuilt suffix to create the correct toolchain path when using the NDK + if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set(_swift_android_prebuilt_suffix "darwin-x86_64") + elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") + set(_swift_android_prebuilt_suffix "linux-x86_64") + endif() + + set(SWIFT_ANDROID_PREBUILT_PATH + "${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_suffix}") + + # Resolve the correct linker based on the file name of CMAKE_LINKER (being 'ld' or 'ld.gold' the options) + get_filename_component(SWIFT_ANDROID_LINKER_NAME "${CMAKE_LINKER}" NAME) + set(SWIFT_SDK_ANDROID_ARCH_armv7_LINKER + "${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_suffix}/bin/arm-linux-androideabi-${SWIFT_ANDROID_LINKER_NAME}") + configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi" "${SWIFT_ANDROID_SDK_PATH}") if (NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")) @@ -809,14 +824,6 @@ if(swift_build_android AND NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID") set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7") endif() - - if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") - set(_swift_android_prebuilt_suffix "darwin-x86_64") - elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - set(_swift_android_prebuilt_suffix "linux-x86_64") - endif() - set(SWIFT_ANDROID_PREBUILT_PATH - "${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_suffix}") endif() # Should we cross-compile the standard library for Windows? diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake index 39b0d2bef6419..12ccac7e31a69 100644 --- a/cmake/modules/SwiftConfigureSDK.cmake +++ b/cmake/modules/SwiftConfigureSDK.cmake @@ -23,7 +23,7 @@ function(_report_sdk prefix) message(STATUS " Architectures: ${SWIFT_SDK_${prefix}_ARCHITECTURES}") message(STATUS " Object Format: ${SWIFT_SDK_${prefix}_OBJECT_FORMAT}") foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES}) - if(${SWIFT_SDK_${prefix}_ARCH_${arch}_LINKER}) + if(SWIFT_SDK_${prefix}_ARCH_${arch}_LINKER) message(STATUS " Linker (${arch}): ${SWIFT_SDK_${prefix}_ARCH_${arch}_LINKER}") else() message(STATUS " Linker (${arch}): ${CMAKE_LINKER}") diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index fbe690ad4ee4d..89aff1abbebb6 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -165,8 +165,8 @@ foreach(sdk ${ELFISH_SDKS}) set(section_magic_end_obj "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/section_magic_end-${arch_suffix}.dir/swift_sections.S${CMAKE_C_OUTPUT_EXTENSION}") set(ld_EXECUTABLE ${CMAKE_LINKER}) - if(${SWIFT_SDK_${prefix}_ARCH_${arch}_LINKER}) - set(ld_EXECUTABLE ${SWIFT_SDK_${prefix}_ARCH_${arch}_LINKER}) + if(SWIFT_SDK_${sdk}_ARCH_${arch}_LINKER) + set(ld_EXECUTABLE ${SWIFT_SDK_${sdk}_ARCH_${arch}_LINKER}) endif() add_custom_command_target(section_magic_${arch_suffix}_begin_object