Skip to content

Commit a0b1cfd

Browse files
committed
[CMake] Cross-compiling dylib support on macOS
When compiling shared libraries from macOS to Linux or Android, specify a .so library suffix, and pass -shared to the linker.
1 parent 27fc4b0 commit a0b1cfd

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

cmake/modules/AddSwift.cmake

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ function(_add_variant_link_flags)
269269
set(oneValueArgs SDK ARCH BUILD_TYPE ENABLE_ASSERTIONS ANALYZE_CODE_COVERAGE
270270
DEPLOYMENT_VERSION_IOS RESULT_VAR_NAME ENABLE_LTO LTO_OBJECT_NAME)
271271
cmake_parse_arguments(LFLAGS
272-
""
272+
"IS_STDLIB"
273273
"${oneValueArgs}"
274274
""
275275
${ARGN})
@@ -309,6 +309,9 @@ function(_add_variant_link_flags)
309309
"-ldl"
310310
"-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"
311311
"${SWIFT_ANDROID_NDK_PATH}/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_shared.so")
312+
if(LFLAGS_IS_STDLIB)
313+
list(APPEND result "-shared")
314+
endif()
312315
else()
313316
list(APPEND result "-lobjc")
314317

@@ -957,6 +960,7 @@ function(_add_swift_library_single target name)
957960
ENABLE_LTO "${lto_type}"
958961
LTO_OBJECT_NAME "${target}-${SWIFTLIB_SINGLE_SDK}-${SWIFTLIB_SINGLE_ARCHITECTURE}"
959962
DEPLOYMENT_VERSION_IOS "${SWIFTLIB_DEPLOYMENT_VERSION_IOS}"
963+
${SWIFTLIB_SINGLE_IS_STDLIB_keyword}
960964
RESULT_VAR_NAME link_flags
961965
)
962966

@@ -1450,9 +1454,12 @@ function(add_swift_library name)
14501454
if("${sdk}" STREQUAL "WINDOWS")
14511455
set(UNIVERSAL_LIBRARY_NAME
14521456
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${name}.dll")
1453-
else()
1457+
elseif("${sdk}" IN_LIST SWIFT_APPLE_PLATFORMS)
14541458
set(UNIVERSAL_LIBRARY_NAME
14551459
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
1460+
else()
1461+
set(UNIVERSAL_LIBRARY_NAME
1462+
"${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}.so")
14561463
endif()
14571464
else()
14581465
if("${sdk}" STREQUAL "WINDOWS")

0 commit comments

Comments
 (0)