Skip to content

Commit 23c1514

Browse files
authored
Merge pull request #4972 from modocache/macos-host-android-stdlib
[Android] Enable building static stdlib on macOS
2 parents 027d8a7 + be5a34e commit 23c1514

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

CMakeLists.txt

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -566,23 +566,6 @@ if("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "LINUX")
566566
set(SWIFT_PRIMARY_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
567567
endif()
568568

569-
# Compatible cross-compile SDKS for LINUX: ANDROID (arch always armv7)
570-
is_sdk_requested(ANDROID swift_build_android)
571-
if("${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
572-
set(swift_can_crosscompile_stdlib_android FALSE)
573-
else()
574-
set(swift_can_crosscompile_stdlib_android TRUE)
575-
endif()
576-
577-
if(swift_build_android AND ${swift_can_crosscompile_stdlib_android})
578-
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi" "${SWIFT_ANDROID_SDK_PATH}")
579-
# If we're not building for the host, the cross-compiled target should be the 'primary variant'.
580-
if("${swift_build_linux}" STREQUAL "FALSE")
581-
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
582-
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
583-
endif()
584-
endif()
585-
586569
elseif("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "FREEBSD")
587570

588571
set(CMAKE_EXECUTABLE_FORMAT "ELF")
@@ -727,6 +710,28 @@ if("${SWIFT_PRIMARY_VARIANT_ARCH}" STREQUAL "")
727710
set(SWIFT_PRIMARY_VARIANT_ARCH "${SWIFT_PRIMARY_VARIANT_ARCH_default}")
728711
endif()
729712

713+
# Should we cross-compile the standard library for Android?
714+
is_sdk_requested(ANDROID swift_build_android)
715+
if(swift_build_android AND NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "")
716+
configure_sdk_unix(ANDROID "Android" "android" "android" "armv7" "armv7-none-linux-androideabi" "${SWIFT_ANDROID_SDK_PATH}")
717+
718+
if (NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux"))
719+
message(FATAL_ERROR "A Darwin or Linux host is required to build the Swift runtime for Android")
720+
elseif(("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin" AND NOT swift_build_osx) OR
721+
("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND NOT swift_build_linux))
722+
set(SWIFT_PRIMARY_VARIANT_SDK_default "ANDROID")
723+
set(SWIFT_PRIMARY_VARIANT_ARCH_default "armv7")
724+
endif()
725+
726+
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
727+
set(_swift_android_prebuilt_suffix "darwin-x86_64")
728+
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
729+
set(_swift_android_prebuilt_suffix "linux-x86_64")
730+
endif()
731+
set(SWIFT_ANDROID_PREBUILT_PATH
732+
"${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/${_swift_android_prebuilt_suffix}")
733+
endif()
734+
730735
# Should we cross-compile the standard library for Windows?
731736
is_sdk_requested(WINDOWS swift_build_windows)
732737
if(swift_build_windows)

cmake/modules/AddSwift.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ function(_add_variant_c_compile_link_flags)
122122
list(APPEND result
123123
"--sysroot=${SWIFT_ANDROID_SDK_PATH}"
124124
# Use the linker included in the Android NDK.
125-
"-B" "${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/linux-x86_64/arm-linux-androideabi/bin/")
125+
"-B" "${SWIFT_ANDROID_PREBUILT_PATH}/arm-linux-androideabi/bin/")
126126
endif()
127127

128128
if("${CFLAGS_SDK}" STREQUAL "WINDOWS")
@@ -315,7 +315,7 @@ function(_add_variant_link_flags)
315315
elseif("${LFLAGS_SDK}" STREQUAL "ANDROID")
316316
list(APPEND result
317317
"-ldl"
318-
"-L${SWIFT_ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-${SWIFT_ANDROID_NDK_GCC_VERSION}/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/${SWIFT_ANDROID_NDK_GCC_VERSION}.x"
318+
"-L${SWIFT_ANDROID_PREBUILT_PATH}/lib/gcc/arm-linux-androideabi/${SWIFT_ANDROID_NDK_GCC_VERSION}.x"
319319
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so")
320320
else()
321321
list(APPEND result "-lobjc")

0 commit comments

Comments
 (0)