@@ -15,8 +15,12 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
15
15
set (THREADS_PREFER_PTHREAD_FLAG TRUE )
16
16
find_package (Threads REQUIRED )
17
17
18
+ include (CheckCSourceCompiles )
19
+ include (CheckFunctionExists )
20
+ include (CheckIncludeFiles )
21
+ include (CheckLibraryExists )
22
+ include (CheckSymbolExists )
18
23
include (GNUInstallDirs )
19
- include (ExternalProject )
20
24
21
25
set (WITH_BLOCKS_RUNTIME "" CACHE PATH "Path to blocks runtime" )
22
26
set (WITH_PTHREAD_WORKQUEUES "" CACHE PATH "Path to pthread-workqueues" )
@@ -34,27 +38,25 @@ set(USE_LIBDISPATCH_INIT_CONSTRUCTOR ${ENABLE_DISPATCH_INIT_CONSTRUCTOR})
34
38
option (ENABLE_THREAD_LOCAL_STORAGE "enable usage of thread local storage via __thread" ON )
35
39
set (DISPATCH_USE_THREAD_LOCAL_STORAGE ${ENABLE_THREAD_LOCAL_STORAGE} )
36
40
37
- if (EXISTS "${CMAKE_SOURCE_DIR} /libpwq/CMakeLists.txt" )
38
- ExternalProject_Add (pwq
39
- SOURCE_DIR
40
- "${CMAKE_SOURCE_DIR} /libpwq"
41
- CMAKE_ARGS
42
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
43
- -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
44
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
45
- BUILD_BYPRODUCTS
46
- <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}pthread_workqueue${CMAKE_STATIC_LIBRARY_SUFFIX} )
47
- ExternalProject_Get_Property (pwq install_dir )
48
- add_library (PTHREAD::workqueue UNKNOWN IMPORTED )
49
- set_target_properties (PTHREAD::workqueue
50
- PROPERTIES
51
- IMPORTED_LOCATION ${install_dir} /${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}pthread_workqueue${CMAKE_STATIC_LIBRARY_SUFFIX} )
52
- set (WITH_PTHREAD_WORKQUEUES "${install_dir} " CACHE PATH "Path to pthread-workqueues" FORCE )
53
- set (HAVE_PTHREAD_WORKQUEUES 1 )
41
+ if (CMAKE_SYSTEM_NAME STREQUAL Linux )
42
+ set (ENABLE_INTERNAL_PTHREAD_WORKQUEUES_DEFAULT ON )
54
43
else ()
55
- # TODO(compnerd) support system installed pthread-workqueues
56
- # find_package(pthread_workqueues REQUIRED)
57
- # set(HAVE_PTHREAD_WORKQUEUES 1)
44
+ set (ENABLE_INTERNAL_PTHREAD_WORKQUEUES_DEFAULT OFF )
45
+ endif ()
46
+ option (ENABLE_INTERNAL_PTHREAD_WORKQUEUES "use libdispatch's own implementation of pthread workqueues" ${ENABLE_INTERNAL_PTHREAD_WORKQUEUES_DEFAULT} )
47
+ if (ENABLE_INTERNAL_PTHREAD_WORKQUEUES )
48
+ set (DISPATCH_USE_INTERNAL_WORKQUEUE 1 )
49
+ set (HAVE_PTHREAD_WORKQUEUES 0 )
50
+ else ()
51
+ check_include_files (pthread/workqueue_private.h HAVE_PTHREAD_WORKQUEUE_PRIVATE_H )
52
+ check_include_files (pthread_workqueue.h HAVE_PTHREAD_WORKQUEUE_H )
53
+ if (HAVE_PTHREAD_WORKQUEUE_PRIVATE_H AND HAVE_PTHREAD_WORKQUEUE_H )
54
+ set (HAVE_PTHREAD_WORKQUEUES 1 )
55
+ set (DISPATCH_USE_INTERNAL_WORKQUEUE 0 )
56
+ else ()
57
+ set (HAVE_PTHREAD_WORKQUEUES 0 )
58
+ set (DISPATCH_USE_INTERNAL_WORKQUEUE 1 )
59
+ endif ()
58
60
endif ()
59
61
60
62
if (CMAKE_SYSTEM_NAME STREQUAL Linux OR
@@ -78,12 +80,6 @@ else()
78
80
# find_package(BlocksRuntime REQUIRED)
79
81
endif ()
80
82
81
- include (CheckCSourceCompiles )
82
- include (CheckFunctionExists )
83
- include (CheckIncludeFiles )
84
- include (CheckLibraryExists )
85
- include (CheckSymbolExists )
86
-
87
83
check_symbol_exists (__GNU_LIBRARY__ "features.h" _GNU_SOURCE )
88
84
if (_GNU_SOURCE )
89
85
set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE )
0 commit comments