Skip to content

Commit 35537d4

Browse files
committed
CMake: Emit catalyst modules
If the driver supports it, emit the swiftmodules and interfaces for the target-variant slice.
1 parent aa8138a commit 35537d4

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

Runtimes/Core/cmake/modules/CatalystSupport.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Add flags for generating the zippered target variant in the build
22

3+
# Initialize `SwiftCore_VARIANT_MODULE_TRIPLE` if the driver is able to emit
4+
# modules for the target variant.
5+
36
if(SwiftCore_COMPILER_VARIANT_TARGET)
47
add_compile_options(
58
"$<$<COMPILE_LANGUAGE:C,CXX>:SHELL:-darwin-target-variant ${SwiftCore_COMPILER_VARIANT_TARGET}>"
@@ -16,4 +19,20 @@ if(SwiftCore_COMPILER_VARIANT_TARGET)
1619
# TODO: Remove me once we have a driver with
1720
# https://github.com/swiftlang/swift-driver/pull/1803
1821
"$<$<LINK_LANGUAGE:Swift>:SHELL:-Xclang-linker -darwin-target-variant -Xclang-linker ${SwiftCore_COMPILER_VARIANT_TARGET}>")
22+
23+
# TODO: Once we are guaranteed to have a driver with the variant module path
24+
# support everywhere, we should integrate this into PlatformInfo.cmake
25+
check_compiler_flag(Swift "-emit-variant-module-path ${CMAKE_CURRENT_BINARY_DIR}/CompilerID/variant.swiftmodule" HAVE_Swift_VARIANT_MODULE_PATH_FLAG)
26+
if(HAVE_Swift_VARIANT_MODULE_PATH_FLAG)
27+
# Get variant module triple
28+
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info -target ${SwiftCore_COMPILER_VARIANT_TARGET})
29+
execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json)
30+
message(CONFIGURE_LOG "Swift target variant info: ${target_info_json}")
31+
32+
33+
string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple")
34+
set(SwiftCore_VARIANT_MODULE_TRIPLE "${module_triple}" CACHE STRING "Triple used for installed swift{module,interface} files for the target variant")
35+
mark_as_advanced(SwiftCore_VARIANT_MODULE_TRIPLE)
36+
message(CONFIGURE_LOG "Swift target variant module triple: ${module_triple}")
37+
endif()
1938
endif()

Runtimes/Core/cmake/modules/EmitSwiftInterface.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ function(emit_swift_interface target)
1212
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.private.swiftinterface>
1313
$<$<COMPILE_LANGUAGE:Swift>:-library-level$<SEMICOLON>api>
1414
$<$<COMPILE_LANGUAGE:Swift>:-Xfrontend$<SEMICOLON>-require-explicit-availability=ignore>)
15+
16+
# Emit catalyst swiftmodules and interfaces
17+
if(SwiftCore_VARIANT_MODULE_TRIPLE)
18+
set(variant_module_tmp_dir "${CMAKE_CURRENT_BINARY_DIR}/${target}-${SwiftCore_VARIANT_MODULE_TRIPLE}")
19+
file(MAKE_DIRECTORY "${variant_module_tmp_dir}")
20+
target_compile_options(${target} PRIVATE
21+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${variant_module_tmp_dir}/${target}.swiftmodule>"
22+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${variant_module_tmp_dir}/${target}.swiftinterface>"
23+
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${variant_module_tmp_dir}/${target}.private.swiftinterface>")
24+
endif()
1525
endif()
1626
endfunction()
1727

@@ -26,5 +36,18 @@ function(install_swift_interface target)
2636
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.private.swiftinterface"
2737
RENAME "${SwiftCore_MODULE_TRIPLE}.private.swiftinterface"
2838
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule")
39+
40+
# Install catalyst interface files
41+
if(SwiftCore_VARIANT_MODULE_TRIPLE)
42+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${SwiftCore_VARIANT_MODULE_TRIPLE}/${target}.swiftmodule"
43+
RENAME "${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftmodule"
44+
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule")
45+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${SwiftCore_VARIANT_MODULE_TRIPLE}/${target}.swiftinterface"
46+
RENAME "${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftinterface"
47+
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule")
48+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}-${SwiftCore_VARIANT_MODULE_TRIPLE}/${target}.private.swiftinterface"
49+
RENAME "${SwiftCore_VARIANT_MODULE_TRIPLE}.private.swiftinterface"
50+
DESTINATION "${SwiftCore_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:${target},Swift_MODULE_NAME>.swiftmodule")
51+
endif()
2952
endif()
3053
endfunction()

0 commit comments

Comments
 (0)