diff --git a/.gitignore b/.gitignore index 1bf54ca69..e0873a153 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ config configure libtool .dirstamp +/dispatch/module.modulemap diff --git a/dispatch/CMakeLists.txt b/dispatch/CMakeLists.txt index 352915d91..7f68ed381 100644 --- a/dispatch/CMakeLists.txt +++ b/dispatch/CMakeLists.txt @@ -1,13 +1,4 @@ -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap) -else() - set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap) -endif() -configure_file(dispatch-vfs.yaml.in - ${CMAKE_BINARY_DIR}/dispatch-vfs-overlay.yaml - @ONLY) - install(FILES base.h block.h @@ -25,8 +16,19 @@ install(FILES DESTINATION "${INSTALL_DISPATCH_HEADERS_DIR}") if(ENABLE_SWIFT) + set(base_dir "${CMAKE_CURRENT_SOURCE_DIR}") + if(NOT BUILD_SHARED_LIBS) + set(base_dir "${CMAKE_CURRENT_SOURCE_DIR}/generic_static") + endif() + + get_filename_component( + MODULE_MAP + module.modulemap + REALPATH + BASE_DIR "${base_dir}") + install(FILES - ${DISPATCH_MODULE_MAP} + ${MODULE_MAP} DESTINATION "${INSTALL_DISPATCH_HEADERS_DIR}") endif() diff --git a/dispatch/dispatch-vfs.yaml.in b/dispatch/dispatch-vfs.yaml.in deleted file mode 100644 index 9416dda81..000000000 --- a/dispatch/dispatch-vfs.yaml.in +++ /dev/null @@ -1,11 +0,0 @@ ---- -version: 0 -case-sensitive: false -use-external-names: false -roots: - - name: "@CMAKE_CURRENT_SOURCE_DIR@" - type: directory - contents: - - name: module.modulemap - type: file - external-contents: "@DISPATCH_MODULE_MAP@" diff --git a/src/swift/CMakeLists.txt b/src/swift/CMakeLists.txt index c073e136d..317faed2a 100644 --- a/src/swift/CMakeLists.txt +++ b/src/swift/CMakeLists.txt @@ -18,6 +18,18 @@ target_include_directories(DispatchStubs PRIVATE set_target_properties(DispatchStubs PROPERTIES POSITION_INDEPENDENT_CODE YES) + +if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap) +else() + add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap) +endif() +add_custom_target(module-map ALL + DEPENDS ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap) + + add_library(swiftDispatch Block.swift Data.swift @@ -33,8 +45,6 @@ target_compile_options(swiftDispatch PRIVATE "SHELL:-Xcc -fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/module.modulemap" "SHELL:-Xcc -I${PROJECT_SOURCE_DIR}" "SHELL:-Xcc -I${PROJECT_SOURCE_DIR}/src/swift/shims") -target_compile_options(swiftDispatch PUBLIC - "SHELL:-vfsoverlay ${CMAKE_BINARY_DIR}/dispatch-vfs-overlay.yaml") set_target_properties(swiftDispatch PROPERTIES Swift_MODULE_NAME Dispatch Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift @@ -44,6 +54,7 @@ target_link_libraries(swiftDispatch PRIVATE BlocksRuntime::BlocksRuntime) target_link_libraries(swiftDispatch PUBLIC dispatch) +add_dependencies(swiftDispatch module-map) get_swift_host_arch(swift_arch) install(FILES