Skip to content

Commit 1848afe

Browse files
committed
build: slightly improve the build for libdispatch
Avoid polluting the build directory a small amount given that we can use `-fmodule-map-file=` for the C/C++ build of libdispatch. Unfortunately, for the Swift build, we need to have the file copied over due to the umbrella header resolution. Hopefully this reduces some of the race conditions that we have seen in the build. Thanks to @dgregor for reminding me of the flag!
1 parent fa1b4ae commit 1848afe

File tree

3 files changed

+17
-20
lines changed

3 files changed

+17
-20
lines changed

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,3 @@ configure
3030
libtool
3131
.dirstamp
3232
/dispatch/module.modulemap
33-
/private/module.modulemap

CMakeLists.txt

+4-18
Original file line numberDiff line numberDiff line change
@@ -261,26 +261,12 @@ endif()
261261

262262

263263
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
264-
add_custom_command(OUTPUT
265-
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
266-
"${PROJECT_SOURCE_DIR}/private/module.modulemap"
267-
COMMAND
268-
${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
269-
COMMAND
270-
${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
264+
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap>
265+
$<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap>)
271266
else()
272-
add_custom_command(OUTPUT
273-
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
274-
"${PROJECT_SOURCE_DIR}/private/module.modulemap"
275-
COMMAND
276-
${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
277-
COMMAND
278-
${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/private/generic/module.modulemap" "${PROJECT_SOURCE_DIR}/private/module.modulemap")
267+
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap>
268+
$<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/generic/module.modulemap>)
279269
endif()
280-
add_custom_target(module-maps ALL
281-
DEPENDS
282-
"${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
283-
"${PROJECT_SOURCE_DIR}/private/module.modulemap")
284270

285271
configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in"
286272
"${PROJECT_BINARY_DIR}/config/config_ac.h")

src/swift/CMakeLists.txt

+13-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ target_include_directories(DispatchStubs PRIVATE
1818
set_target_properties(DispatchStubs PROPERTIES
1919
POSITION_INDEPENDENT_CODE YES)
2020

21+
22+
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
23+
add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap
24+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap)
25+
else()
26+
add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap
27+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap)
28+
endif()
29+
add_custom_target(module-map ALL
30+
DEPENDS ${PROJECT_SOURCE_DIR}/dispatch/module.modulemap)
31+
32+
2133
add_library(swiftDispatch
2234
Block.swift
2335
Data.swift
@@ -42,7 +54,7 @@ target_link_libraries(swiftDispatch PRIVATE
4254
BlocksRuntime::BlocksRuntime)
4355
target_link_libraries(swiftDispatch PUBLIC
4456
dispatch)
45-
add_dependencies(swiftDispatch module-maps)
57+
add_dependencies(swiftDispatch module-map)
4658

4759
get_swift_host_arch(swift_arch)
4860
install(FILES

0 commit comments

Comments
 (0)