Skip to content

Commit 07f9a31

Browse files
committed
[Runtimes][Supplemental] lay down nested swift modules ahead of CMake 4.1
This is needed in order to build target variants properly with a SwiftDriver that has swiftlang/swift-driver#1856 Addresses rdar://154410676
1 parent b834690 commit 07f9a31

File tree

5 files changed

+48
-56
lines changed

5 files changed

+48
-56
lines changed

Runtimes/Supplemental/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
cmake_minimum_required(VERSION 3.29)
2+
# TODO before requiring CMake 4.1 or later
3+
# and/or enforcing CMP0195, please check/update
4+
# the implementation of `emit_swift_interface`
5+
# in `EmitSwiftInterface.cmake`
6+
# to ensure it keeps laying down nested swiftmodule folders
27

38
project(SwiftRuntime LANGUAGES Swift C CXX)
49

Runtimes/Supplemental/StringProcessing/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
cmake_minimum_required(VERSION 3.29)
2+
# TODO before requiring CMake 4.1 or later
3+
# and/or enforcing CMP0195, please check/update
4+
# the implementation of `emit_swift_interface`
5+
# in `EmitSwiftInterface.cmake`
6+
# to ensure it keeps laying down nested swiftmodule folders
27

38
if(POLICY CMP0157 AND CMAKE_Swift_COMPILER_USE_OLD_DRIVER)
49
cmake_policy(SET CMP0157 OLD)

Runtimes/Supplemental/Synchronization/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
cmake_minimum_required(VERSION 3.29)
2+
# TODO before requiring CMake 4.1 or later
3+
# and/or enforcing CMP0195, please check/update
4+
# the implementation of `emit_swift_interface`
5+
# in `EmitSwiftInterface.cmake`
6+
# to ensure it keeps laying down nested swiftmodule folders
27

38
if(POLICY CMP0157 AND CMAKE_Swift_COMPILER_USE_OLD_DRIVER)
49
cmake_policy(SET CMP0157 OLD)

Runtimes/Supplemental/cmake/modules/EmitSwiftInterface.cmake

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,41 @@
88
function(emit_swift_interface target)
99
# Generate the target-variant binary swift module when performing zippered
1010
# build
11+
# Clean this up once CMake has nested swiftmodules in the build directory:
12+
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/10664
13+
# https://cmake.org/cmake/help/git-stage/policy/CMP0195.html
14+
15+
# We can't expand the Swift_MODULE_NAME target property in a generator
16+
# expression or it will fail saying that the target doesn't exist.
17+
get_target_property(module_name ${target} Swift_MODULE_NAME)
18+
if(NOT module_name)
19+
set(module_name ${target})
20+
endif()
21+
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
22+
target_compile_options(${target} PRIVATE
23+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_MODULE_TRIPLE}.swiftmodule>")
1124
if(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
12-
set(variant_module_tmp_dir "${CMAKE_CURRENT_BINARY_DIR}/${target}-${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}")
13-
file(MAKE_DIRECTORY "${variant_module_tmp_dir}")
1425
target_compile_options(${target} PRIVATE
15-
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${variant_module_tmp_dir}/${target}.swiftmodule>")
26+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.swiftmodule>")
1627
endif()
28+
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_MODULE_TRIPLE}.swiftmodule"
29+
DEPENDS ${target})
30+
target_sources(${target}
31+
INTERFACE
32+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_MODULE_TRIPLE}.swiftmodule>)
1733

1834
# Generate textual swift interfaces is library-evolution is enabled
1935
if(${PROJECT_NAME}_ENABLE_LIBRARY_EVOLUTION)
2036
target_compile_options(${target} PRIVATE
21-
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftinterface>
22-
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.private.swiftinterface>
37+
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_MODULE_TRIPLE}.swiftinterface>
38+
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_MODULE_TRIPLE}.private.swiftinterface>)
39+
if(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
40+
target_compile_options(${target} PRIVATE
41+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.swiftinterface>"
42+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.private.swiftinterface>")
43+
endif()
44+
target_compile_options(${target} PRIVATE
2345
$<$<COMPILE_LANGUAGE:Swift>:-library-level$<SEMICOLON>api>
2446
$<$<COMPILE_LANGUAGE:Swift>:-Xfrontend$<SEMICOLON>-require-explicit-availability=ignore>)
25-
26-
# Emit catalyst swiftmodules and interfaces
27-
if(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
28-
target_compile_options(${target} PRIVATE
29-
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${variant_module_tmp_dir}/${target}.swiftinterface>"
30-
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${variant_module_tmp_dir}/${target}.private.swiftinterface>")
31-
endif()
3247
endif()
3348
endfunction()
Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,13 @@
11

22
# Install the generated swift interface files for the target.
33
function(install_swift_interface target)
4-
# Install binary swift modules
5-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
6-
RENAME "${${PROJECT_NAME}_MODULE_TRIPLE}.swiftmodule"
7-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
8-
COMPONENT ${PROJECT_NAME}_development)
9-
if(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
10-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}/${target}.swiftmodule"
11-
RENAME "${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.swiftmodule"
12-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
13-
COMPONENT ${PROJECT_NAME}_development)
4+
# Swiftmodules are already in the directory structure
5+
get_target_property(module_name ${target} Swift_MODULE_NAME)
6+
if(NOT module_name)
7+
set(module_name ${target})
148
endif()
159

16-
# Install Swift interfaces if library-evolution is enabled
17-
if(${PROJECT_NAME}_ENABLE_LIBRARY_EVOLUTION)
18-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftinterface"
19-
RENAME "${${PROJECT_NAME}_MODULE_TRIPLE}.swiftinterface"
20-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
21-
COMPONENT ${PROJECT_NAME}_development)
22-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.private.swiftinterface"
23-
RENAME "${${PROJECT_NAME}_MODULE_TRIPLE}.private.swiftinterface"
24-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
25-
COMPONENT ${PROJECT_NAME}_development)
26-
27-
# Install catalyst interface files
28-
if(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
29-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}/${target}.swiftinterface"
30-
RENAME "${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.swiftinterface"
31-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
32-
COMPONENT ${PROJECT_NAME}_development)
33-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}/${target}.private.swiftinterface"
34-
RENAME "${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.private.swiftinterface"
35-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
36-
COMPONENT ${PROJECT_NAME}_development)
37-
endif()
38-
endif()
39-
40-
# Install Swift documentation interface files.
41-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftdoc"
42-
RENAME "${${PROJECT_NAME}_MODULE_TRIPLE}.swiftdoc"
43-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
10+
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule"
11+
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}"
4412
COMPONENT ${PROJECT_NAME}_development)
45-
if(SwiftCore_VARIANT_MODULE_TRIPLE)
46-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}/${target}.swiftdoc"
47-
RENAME "${${PROJECT_NAME}_VARIANT_MODULE_TRIPLE}.swiftdoc"
48-
DESTINATION "${${PROJECT_NAME}_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule"
49-
COMPONENT ${PROJECT_NAME}_development)
50-
endif()
5113
endfunction()

0 commit comments

Comments
 (0)