Merge pull request #360 from adierking/cl
build: fix clang-cl exception flags
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 31e412a..021f036 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.4.3)
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
project(dispatch
VERSION 1.3
@@ -30,6 +30,7 @@
include(CheckSymbolExists)
include(GNUInstallDirs)
include(SwiftSupport)
+include(DispatchUtilities)
set(SWIFT_LIBDIR "lib" CACHE PATH "Library folder name, defined by swift main buildscript")
set(INSTALL_LIBDIR "${SWIFT_LIBDIR}" CACHE PATH "Path where the libraries should be installed")
@@ -91,17 +92,18 @@
option(ENABLE_TESTING "build libdispatch tests" ON)
+option(USE_LLD_LINKER "use the lld linker" OFF)
+
if(CMAKE_SYSTEM_NAME STREQUAL Linux OR
CMAKE_SYSTEM_NAME STREQUAL FreeBSD OR
- CMAKE_SYSTEM_NAME STREQUAL Android)
+ CMAKE_SYSTEM_NAME STREQUAL Android AND
+ NOT USE_LLD_LINKER)
set(USE_GOLD_LINKER_DEFAULT ON)
else()
set(USE_GOLD_LINKER_DEFAULT OFF)
endif()
option(USE_GOLD_LINKER "use the gold linker" ${USE_GOLD_LINKER_DEFAULT})
-option(USE_LLD_LINKER "use the lld linker" OFF)
-
option(ENABLE_THREAD_LOCAL_STORAGE "enable usage of thread local storage via _Thread_local" ON)
set(DISPATCH_USE_THREAD_LOCAL_STORAGE ${ENABLE_THREAD_LOCAL_STORAGE})
diff --git a/cmake/modules/DispatchUtilities.cmake b/cmake/modules/DispatchUtilities.cmake
new file mode 100644
index 0000000..15d8cd7
--- /dev/null
+++ b/cmake/modules/DispatchUtilities.cmake
@@ -0,0 +1,15 @@
+
+function(dispatch_set_linker target)
+ if(USE_GOLD_LINKER)
+ set_property(TARGET ${target}
+ APPEND_STRING
+ PROPERTY LINK_FLAGS
+ -fuse-ld=gold)
+ endif()
+ if(USE_LLD_LINKER)
+ set_property(TARGET ${target}
+ APPEND_STRING
+ PROPERTY LINK_FLAGS
+ -fuse-ld=lld)
+ endif()
+endfunction()
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3908ea4..b855657 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -210,26 +210,15 @@
"-Xlinker -dead_strip"
"-Xlinker -alias_list -Xlinker ${CMAKE_SOURCE_DIR}/xcodeconfig/libdispatch.aliases")
endif()
-if(USE_GOLD_LINKER)
- set_property(TARGET dispatch
- APPEND_STRING
- PROPERTY LINK_FLAGS
- -fuse-ld=gold)
-endif()
-if(USE_LLD_LINKER)
- set_property(TARGET dispatch
- APPEND_STRING
- PROPERTY LINK_FLAGS
- -fuse-ld=lld)
-endif()
+dispatch_set_linker(dispatch)
# Temporary staging; the various swift projects that depend on libdispatch
# all expect libdispatch.so to be in src/.libs/libdispatch.so
# So for now, make a copy so we don't have to do a coordinated commit across
# all the swift projects to change this assumption.
add_custom_command(TARGET dispatch POST_BUILD
- COMMAND cmake -E make_directory .libs
- COMMAND cmake -E copy $<TARGET_FILE:dispatch> .libs
+ COMMAND ${CMAKE_COMMAND} -E make_directory .libs
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:dispatch> .libs
COMMENT "Copying libdispatch to .libs")
install(TARGETS
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 50f9bdf..4ad1e0e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -23,6 +23,7 @@
add_executable(bsdtestharness
bsdtestharness.c)
+dispatch_set_linker(bsdtestharness)
target_include_directories(bsdtestharness
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
@@ -84,6 +85,7 @@
target_compile_options(${name} PRIVATE -fblocks)
# TODO(compnerd) make this portable
target_compile_options(${name} PRIVATE -Wall -Wno-deprecated-declarations)
+ dispatch_set_linker(${name})
target_link_libraries(${name} PRIVATE dispatch Threads::Threads)
if(WITH_BLOCKS_RUNTIME)
target_link_libraries(${name} PRIVATE BlocksRuntime)
@@ -140,16 +142,16 @@
# Excluded by default for purposes of Swift CI
if(EXTENDED_TEST_SUITE)
list(APPEND DISPATCH_C_TESTS
- priority
- concur
- read
- read2
- suspend_timer
- pingpong
- drift
- readsync
- cascade
- io)
+ priority
+ concur
+ read
+ read2
+ suspend_timer
+ pingpong
+ drift
+ readsync
+ cascade
+ io)
# an oddball; dispatch_priority.c compiled with -DUSE_SET_TARGET_QUEUE=1
add_unit_test(dispatch_priority2 SOURCES dispatch_priority.c)
target_compile_options(dispatch_priority2 PRIVATE -DUSE_SET_TARGET_QUEUE=1)
@@ -158,10 +160,10 @@
# add C tests for platform-specific functionality when applicable
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
list(APPEND DISPATCH_C_TESTS
- deadname
- proc
- vm
- vnode)
+ deadname
+ proc
+ vm
+ vnode)
endif()
foreach(test ${DISPATCH_C_TESTS})