Skip to content

Commit 03696d7

Browse files
authored
Merge pull request #359 from compnerd/cmake
build: use `CMAKE_COMMAND` instead of hardcoded cmake
2 parents 4ac77b7 + c8df24a commit 03696d7

File tree

4 files changed

+40
-32
lines changed

4 files changed

+40
-32
lines changed

CMakeLists.txt

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

22
cmake_minimum_required(VERSION 3.4.3)
33

4-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
4+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
55

66
project(dispatch
77
VERSION 1.3
@@ -30,6 +30,7 @@ include(CheckLibraryExists)
3030
include(CheckSymbolExists)
3131
include(GNUInstallDirs)
3232
include(SwiftSupport)
33+
include(DispatchUtilities)
3334

3435
set(SWIFT_LIBDIR "lib" CACHE PATH "Library folder name, defined by swift main buildscript")
3536
set(INSTALL_LIBDIR "${SWIFT_LIBDIR}" CACHE PATH "Path where the libraries should be installed")
@@ -91,17 +92,18 @@ option(BUILD_SHARED_LIBS "build shared libraries" ON)
9192

9293
option(ENABLE_TESTING "build libdispatch tests" ON)
9394

95+
option(USE_LLD_LINKER "use the lld linker" OFF)
96+
9497
if(CMAKE_SYSTEM_NAME STREQUAL Linux OR
9598
CMAKE_SYSTEM_NAME STREQUAL FreeBSD OR
96-
CMAKE_SYSTEM_NAME STREQUAL Android)
99+
CMAKE_SYSTEM_NAME STREQUAL Android AND
100+
NOT USE_LLD_LINKER)
97101
set(USE_GOLD_LINKER_DEFAULT ON)
98102
else()
99103
set(USE_GOLD_LINKER_DEFAULT OFF)
100104
endif()
101105
option(USE_GOLD_LINKER "use the gold linker" ${USE_GOLD_LINKER_DEFAULT})
102106

103-
option(USE_LLD_LINKER "use the lld linker" OFF)
104-
105107
option(ENABLE_THREAD_LOCAL_STORAGE "enable usage of thread local storage via _Thread_local" ON)
106108
set(DISPATCH_USE_THREAD_LOCAL_STORAGE ${ENABLE_THREAD_LOCAL_STORAGE})
107109

cmake/modules/DispatchUtilities.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
function(dispatch_set_linker target)
3+
if(USE_GOLD_LINKER)
4+
set_property(TARGET ${target}
5+
APPEND_STRING
6+
PROPERTY LINK_FLAGS
7+
-fuse-ld=gold)
8+
endif()
9+
if(USE_LLD_LINKER)
10+
set_property(TARGET ${target}
11+
APPEND_STRING
12+
PROPERTY LINK_FLAGS
13+
-fuse-ld=lld)
14+
endif()
15+
endfunction()

src/CMakeLists.txt

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -212,26 +212,15 @@ if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
212212
"-Xlinker -dead_strip"
213213
"-Xlinker -alias_list -Xlinker ${CMAKE_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
214214
endif()
215-
if(USE_GOLD_LINKER)
216-
set_property(TARGET dispatch
217-
APPEND_STRING
218-
PROPERTY LINK_FLAGS
219-
-fuse-ld=gold)
220-
endif()
221-
if(USE_LLD_LINKER)
222-
set_property(TARGET dispatch
223-
APPEND_STRING
224-
PROPERTY LINK_FLAGS
225-
-fuse-ld=lld)
226-
endif()
215+
dispatch_set_linker(dispatch)
227216

228217
# Temporary staging; the various swift projects that depend on libdispatch
229218
# all expect libdispatch.so to be in src/.libs/libdispatch.so
230219
# So for now, make a copy so we don't have to do a coordinated commit across
231220
# all the swift projects to change this assumption.
232221
add_custom_command(TARGET dispatch POST_BUILD
233-
COMMAND cmake -E make_directory .libs
234-
COMMAND cmake -E copy $<TARGET_FILE:dispatch> .libs
222+
COMMAND ${CMAKE_COMMAND} -E make_directory .libs
223+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:dispatch> .libs
235224
COMMENT "Copying libdispatch to .libs")
236225

237226
install(TARGETS

tests/CMakeLists.txt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ endif()
2323

2424
add_executable(bsdtestharness
2525
bsdtestharness.c)
26+
dispatch_set_linker(bsdtestharness)
2627
target_include_directories(bsdtestharness
2728
PRIVATE
2829
${CMAKE_CURRENT_BINARY_DIR}
@@ -84,6 +85,7 @@ function(add_unit_test name)
8485
target_compile_options(${name} PRIVATE -fblocks)
8586
# TODO(compnerd) make this portable
8687
target_compile_options(${name} PRIVATE -Wall -Wno-deprecated-declarations)
88+
dispatch_set_linker(${name})
8789
target_link_libraries(${name} PRIVATE dispatch Threads::Threads)
8890
if(WITH_BLOCKS_RUNTIME)
8991
target_link_libraries(${name} PRIVATE BlocksRuntime)
@@ -140,16 +142,16 @@ set(DISPATCH_C_TESTS
140142
# Excluded by default for purposes of Swift CI
141143
if(EXTENDED_TEST_SUITE)
142144
list(APPEND DISPATCH_C_TESTS
143-
priority
144-
concur
145-
read
146-
read2
147-
suspend_timer
148-
pingpong
149-
drift
150-
readsync
151-
cascade
152-
io)
145+
priority
146+
concur
147+
read
148+
read2
149+
suspend_timer
150+
pingpong
151+
drift
152+
readsync
153+
cascade
154+
io)
153155
# an oddball; dispatch_priority.c compiled with -DUSE_SET_TARGET_QUEUE=1
154156
add_unit_test(dispatch_priority2 SOURCES dispatch_priority.c)
155157
target_compile_options(dispatch_priority2 PRIVATE -DUSE_SET_TARGET_QUEUE=1)
@@ -158,10 +160,10 @@ endif()
158160
# add C tests for platform-specific functionality when applicable
159161
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
160162
list(APPEND DISPATCH_C_TESTS
161-
deadname
162-
proc
163-
vm
164-
vnode)
163+
deadname
164+
proc
165+
vm
166+
vnode)
165167
endif()
166168

167169
foreach(test ${DISPATCH_C_TESTS})

0 commit comments

Comments
 (0)