Skip to content

Commit f641a84

Browse files
committed
build: introduce a new option to control library evolution
Library evolution only makes sense on platforms where ABI stability is available. Introduce a new option which defaults to `TRUE` only on Darwin, the only platform currently providing ABI stability.
1 parent 3894845 commit f641a84

File tree

6 files changed

+40
-13
lines changed

6 files changed

+40
-13
lines changed

CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ option(SwiftTesting_INSTALL_NESTED_SUBDIR "Install libraries under a platform an
5454
set(SwiftTesting_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SwiftTesting_PLATFORM_SUBDIR}$<$<AND:$<PLATFORM_ID:Darwin>,$<NOT:$<BOOL:${SwiftTesting_INSTALL_NESTED_SUBDIR}>>>:/testing>$<$<BOOL:${SwiftTesting_INSTALL_NESTED_SUBDIR}>:/${SwiftTesting_ARCH_SUBDIR}>")
5555
set(SwiftTesting_INSTALL_SWIFTMODULEDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SwiftTesting_PLATFORM_SUBDIR}$<$<AND:$<PLATFORM_ID:Darwin>,$<NOT:$<BOOL:${SwiftTesting_INSTALL_NESTED_SUBDIR}>>>:/testing>")
5656

57+
if(APPLE)
58+
set(_SwiftTesting_ENABLE_LIBRARY_EVOLUTION YES)
59+
else()
60+
set(_SwiftTesting_ENABLE_LIBRARY_EVOLUTION NO)
61+
endif()
62+
option(SwiftTesting_ENABLE_LIBRARY_EVOLUTION "Generate ABI resilient runtime libraries"
63+
${_SwiftTesting_ENABLE_LIBRARY_EVOLUTION})
64+
5765
add_compile_options($<$<COMPILE_LANGUAGE:Swift>:-no-toolchain-stdlib-rpath>)
5866

5967
add_subdirectory(Sources)

Sources/Overlays/_Testing_Foundation/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ add_library(_Testing_Foundation
1818
ReexportTesting.swift)
1919

2020
target_link_libraries(_Testing_Foundation PUBLIC
21+
_TestingInternals
2122
Testing)
2223

2324
# Although this library links Foundation on all platforms, it only does so using
@@ -35,6 +36,7 @@ endif()
3536
# interface, because Foundation does not have Library Evolution enabled for all
3637
# platforms.
3738
target_compile_options(_Testing_Foundation PRIVATE
38-
-emit-module-interface -emit-module-interface-path $<TARGET_PROPERTY:_Testing_Foundation,Swift_MODULE_DIRECTORY>/_Testing_Foundation.swiftinterface)
39+
-emit-module-interface
40+
-emit-module-interface-path $<TARGET_PROPERTY:_Testing_Foundation,Swift_MODULE_DIRECTORY>/_Testing_Foundation.swiftinterface)
3941

4042
_swift_testing_install_target(_Testing_Foundation)

Sources/Overlays/_Testing_WinSDK/CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
2222
ReexportTesting.swift)
2323

2424
target_link_libraries(_Testing_WinSDK PUBLIC
25+
_TestingInternals
2526
Testing)
2627

27-
target_compile_options(_Testing_WinSDK PRIVATE
28-
-enable-library-evolution
29-
-emit-module-interface -emit-module-interface-path $<TARGET_PROPERTY:_Testing_WinSDK,Swift_MODULE_DIRECTORY>/_Testing_WinSDK.swiftinterface)
28+
if(SwiftTesting_ENABLE_LIBRARY_EVOLUTION)
29+
target_compile_options(_Testing_WinSDK PRIVATE
30+
-enable-library-evolution
31+
-emit-module-interface
32+
-emit-module-interface-path $<TARGET_PROPERTY:_Testing_WinSDK,Swift_MODULE_DIRECTORY>/_Testing_WinSDK.swiftinterface)
33+
endif()
3034

3135
_swift_testing_install_target(_Testing_WinSDK)
3236
endif()

Sources/Testing/CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,13 @@ if(NOT BUILD_SHARED_LIBS)
136136
endif()
137137
add_dependencies(Testing
138138
TestingMacros)
139-
target_compile_options(Testing PRIVATE
140-
-enable-library-evolution
141-
-emit-module-interface -emit-module-interface-path $<TARGET_PROPERTY:Testing,Swift_MODULE_DIRECTORY>/Testing.swiftinterface)
139+
140+
if(SwiftTesting_ENABLE_LIBRARY_EVOLUTION)
141+
target_compile_options(Testing PRIVATE
142+
-enable-library-evolution
143+
-emit-module-interface
144+
-emit-module-interface-path $<TARGET_PROPERTY:Testing,Swift_MODULE_DIRECTORY>/Testing.swiftinterface)
145+
endif()
142146

143147
_swift_testing_install_target(Testing)
144148

Sources/_TestDiscovery/CMakeLists.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@ add_library(_TestDiscovery STATIC
1616
target_link_libraries(_TestDiscovery PRIVATE
1717
_TestingInternals)
1818

19-
target_compile_options(_TestDiscovery PRIVATE
20-
-enable-library-evolution
21-
-emit-module-interface -emit-module-interface-path $<TARGET_PROPERTY:_TestDiscovery,Swift_MODULE_DIRECTORY>/_TestDiscovery.swiftinterface)
19+
if(SwiftTesting_ENABLE_LIBRARY_EVOLUTION)
20+
target_compile_options(_TestDiscovery PRIVATE
21+
-enable-library-evolution
22+
-emit-module-interface
23+
-emit-module-interface-path $<TARGET_PROPERTY:_TestDiscovery,Swift_MODULE_DIRECTORY>/_TestDiscovery.swiftinterface)
24+
endif()
2225
set(CMAKE_STATIC_LIBRARY_PREFIX_Swift "lib")
2326

2427
_swift_testing_install_target(_TestDiscovery)

cmake/modules/SwiftModuleInstallation.cmake

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@ function(_swift_testing_install_target module)
2626
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftdoc
2727
DESTINATION "${module_dir}"
2828
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftdoc)
29-
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftinterface
30-
DESTINATION "${module_dir}"
31-
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftinterface)
29+
if(SwiftTesting_ENABLE_LIBRARY_EVOLUTION)
30+
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftinterface
31+
DESTINATION "${module_dir}"
32+
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftinterface)
33+
else()
34+
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftmodule
35+
DESTINATION "${module_dir}"
36+
RENAME ${SwiftTesting_MODULE_TRIPLE}.swiftmodule)
37+
endif()
3238
endfunction()
3339

3440
# Install the specified .swiftcrossimport directory for the specified declaring

0 commit comments

Comments
 (0)