Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions Runtimes/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,9 @@

# TODO:
# Platform support:
# - Work on/Verify cross-compiling
# - Work on/Verify Windows and Linux native builds
# - Work on/Verify Linux native builds
# Embedded
# -- -Xfrontend -emit-empty-object-file
# Catalyst Support
# -- Will need shadow invocations to generate swiftmodules for Swift parts
# Install *.abi.json, swiftdoc, and swiftsourceinfo

cmake_minimum_required(VERSION 3.29)
# TODO before requiring CMake 4.1 or later
Expand Down
38 changes: 26 additions & 12 deletions Runtimes/Core/cmake/modules/EmitSwiftInterface.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,48 @@ function(emit_swift_interface target)
if(NOT module_name)
set(module_name ${target})
endif()
set(module_directory "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
# Account for an existing swiftmodule file
# generated with the previous logic
if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule"
AND NOT IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
message(STATUS "Removing regular file ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule to support nested swiftmodule generation")
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
if(EXISTS "${module_directory}" AND NOT IS_DIRECTORY "${module_directory}")
message(STATUS "Removing regular file ${module_directory} to support nested swiftmodule generation")
file(REMOVE "${module_directory}")
endif()
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_MODULE_TRIPLE}.swiftmodule>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-module-path ${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftmodule>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftmodule"
"${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftdoc"
"${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftsourceinfo")
if(SwiftCore_VARIANT_MODULE_TRIPLE)
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftmodule>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftmodule>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftmodule"
"${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftdoc"
"${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftsourceinfo")
endif()
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_MODULE_TRIPLE}.swiftmodule"
add_custom_command(OUTPUT "${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftmodule"
DEPENDS ${target})
target_sources(${target}
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_MODULE_TRIPLE}.swiftmodule>)
$<BUILD_INTERFACE:${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftmodule>)

# Generate textual swift interfaces is library-evolution is enabled
if(SwiftCore_ENABLE_LIBRARY_EVOLUTION)
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_MODULE_TRIPLE}.swiftinterface>
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_MODULE_TRIPLE}.private.swiftinterface>)
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftinterface>
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${module_directory}/${SwiftCore_MODULE_TRIPLE}.private.swiftinterface>)
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftCore_MODULE_TRIPLE}.swiftinterface"
"${module_directory}/${SwiftCore_MODULE_TRIPLE}.private.swiftinterface")
if(SwiftCore_VARIANT_MODULE_TRIPLE)
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftinterface>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftCore_VARIANT_MODULE_TRIPLE}.private.swiftinterface>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftinterface>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.private.swiftinterface>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.swiftinterface"
"${module_directory}/${SwiftCore_VARIANT_MODULE_TRIPLE}.private.swiftinterface")
endif()
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-library-level$<SEMICOLON>api>
Expand Down
38 changes: 26 additions & 12 deletions Runtimes/Overlay/cmake/modules/EmitSwiftInterface.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,48 @@ function(emit_swift_interface target)
if(NOT module_name)
set(module_name ${target})
endif()
set(module_directory "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
# Account for an existing swiftmodule file
# generated with the previous logic
if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule"
AND NOT IS_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
message(STATUS "Removing regular file ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule to support nested swiftmodule generation")
file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule")
if(EXISTS "${module_directory}" AND NOT IS_DIRECTORY "${module_directory}")
message(STATUS "Removing regular file '${module_directory}' to support nested swiftmodule generation")
file(REMOVE ${module_directory})
endif()
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-module-path ${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule"
"${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftdoc"
"${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftsourceinfo")
if(SwiftOverlay_VARIANT_MODULE_TRIPLE)
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftmodule>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-path ${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftmodule>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftmodule"
"${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftdoc"
"${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftsourceinfo")
endif()
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule"
add_custom_command(OUTPUT "${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule"
DEPENDS ${target})
target_sources(${target}
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule>)
$<BUILD_INTERFACE:${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftmodule>)

# Generate textual swift interfaces is library-evolution is enabled
if(SwiftOverlay_ENABLE_LIBRARY_EVOLUTION)
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_MODULE_TRIPLE}.swiftinterface>
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_MODULE_TRIPLE}.private.swiftinterface>)
$<$<COMPILE_LANGUAGE:Swift>:-emit-module-interface-path$<SEMICOLON>${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftinterface>
$<$<COMPILE_LANGUAGE:Swift>:-emit-private-module-interface-path$<SEMICOLON>${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.private.swiftinterface>)
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.swiftinterface"
"${module_directory}/${SwiftOverlay_MODULE_TRIPLE}.private.swiftinterface")
if(SwiftOverlay_VARIANT_MODULE_TRIPLE)
target_compile_options(${target} PRIVATE
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftinterface>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${CMAKE_CURRENT_BINARY_DIR}/${module_name}.swiftmodule/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.private.swiftinterface>")
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-module-interface-path ${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftinterface>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-emit-variant-private-module-interface-path ${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.private.swiftinterface>")
set_property(TARGET "${target}" APPEND PROPERTY ADDITIONAL_CLEAN_FILES
"${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.swiftinterface"
"${module_directory}/${SwiftOverlay_VARIANT_MODULE_TRIPLE}.private.swiftinterface")
endif()
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:Swift>:-library-level$<SEMICOLON>api>
Expand Down