Skip to content

Commit 731d5c6

Browse files
authored
Merge pull request #794 from compnerd/5.9-fixes
Backport build and Windows fixes for 5.9
2 parents 09b8e8d + ce166c2 commit 731d5c6

File tree

8 files changed

+32
-34
lines changed

8 files changed

+32
-34
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,3 @@ config
2929
configure
3030
libtool
3131
.dirstamp
32-
/dispatch/module.modulemap
33-
/private/module.modulemap

CMakeLists.txt

Lines changed: 4 additions & 18 deletions
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")

dispatch/CMakeLists.txt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11

2+
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
3+
set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap)
4+
elseif(BUILD_SHARED_LIBS)
5+
set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap)
6+
else()
7+
set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/generic_static/module.modulemap)
8+
endif()
9+
configure_file(dispatch-vfs.yaml.in
10+
${CMAKE_BINARY_DIR}/dispatch-vfs-overlay.yaml
11+
@ONLY)
12+
213
install(FILES
314
base.h
415
block.h
@@ -16,19 +27,8 @@ install(FILES
1627
DESTINATION
1728
"${INSTALL_DISPATCH_HEADERS_DIR}")
1829
if(ENABLE_SWIFT)
19-
set(base_dir "${CMAKE_CURRENT_SOURCE_DIR}")
20-
if(NOT BUILD_SHARED_LIBS)
21-
set(base_dir "${CMAKE_CURRENT_SOURCE_DIR}/generic_static")
22-
endif()
23-
24-
get_filename_component(
25-
MODULE_MAP
26-
module.modulemap
27-
REALPATH
28-
BASE_DIR "${base_dir}")
29-
3030
install(FILES
31-
${MODULE_MAP}
31+
${DISPATCH_MODULE_MAP}
3232
DESTINATION
3333
"${INSTALL_DISPATCH_HEADERS_DIR}")
3434
endif()

dispatch/dispatch-vfs.yaml.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
version: 0
3+
case-sensitive: false
4+
use-external-names: false
5+
roots:
6+
- name: "@CMAKE_CURRENT_SOURCE_DIR@"
7+
type: directory
8+
contents:
9+
- name: module.modulemap
10+
type: file
11+
external-contents: "@DISPATCH_MODULE_MAP@"

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ target_link_libraries(dispatch PUBLIC
141141
BlocksRuntime::BlocksRuntime)
142142
if(CMAKE_SYSTEM_NAME STREQUAL Windows)
143143
target_link_libraries(dispatch PRIVATE
144+
AdvAPI32
144145
ShLwApi
145146
WS2_32
146147
WinMM

src/shims/lock.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ void _dispatch_sema4_init(_dispatch_sema4_t *sema, int policy DISPATCH_UNUSED)
266266

267267
// lazily allocate the semaphore port
268268

269+
os_atomic_cmpxchg(sema, *sema, 0, relaxed);
269270
while (!dispatch_assume(tmp = CreateSemaphore(NULL, 0, LONG_MAX, NULL))) {
270271
_dispatch_temporary_resource_shortage();
271272
}

src/swift/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ target_compile_options(swiftDispatch PRIVATE
3333
"SHELL:-Xcc -fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/module.modulemap"
3434
"SHELL:-Xcc -I${PROJECT_SOURCE_DIR}"
3535
"SHELL:-Xcc -I${PROJECT_SOURCE_DIR}/src/swift/shims")
36+
target_compile_options(swiftDispatch PUBLIC
37+
"SHELL:-vfsoverlay ${CMAKE_BINARY_DIR}/dispatch-vfs-overlay.yaml")
3638
set_target_properties(swiftDispatch PROPERTIES
3739
Swift_MODULE_NAME Dispatch
3840
Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift
@@ -42,7 +44,6 @@ target_link_libraries(swiftDispatch PRIVATE
4244
BlocksRuntime::BlocksRuntime)
4345
target_link_libraries(swiftDispatch PUBLIC
4446
dispatch)
45-
add_dependencies(swiftDispatch module-maps)
4647

4748
get_swift_host_arch(swift_arch)
4849
install(FILES

tests/generic_win_port.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ gettimeofday(struct timeval *tp, void *tzp)
188188
typedef void (WINAPI *QueryUnbiasedInterruptTimePreciseT)(PULONGLONG);
189189
static QueryUnbiasedInterruptTimePreciseT QueryUnbiasedInterruptTimePrecisePtr;
190190

191-
static BOOL
191+
static BOOL WINAPI
192192
mach_absolute_time_init(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext)
193193
{
194194
// QueryUnbiasedInterruptTimePrecise() is declared in the Windows headers

0 commit comments

Comments
 (0)