forked from deepvision/libdispatch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
155 lines (120 loc) · 5.02 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
cmake_minimum_required(VERSION 2.8.12)
project (dispatch)
set (DISPATCH_VERSION 0.1.3.1)
set (DISPATCH_VERSION_MAJOR 0)
set (DISPATCH_VERSION_MINOR 1)
set (DISPATCH_VERSION_PATCH 3)
set (DISPATCH_VERSION_TWEAK 1)
set (DISPATCH_ABI_VERSION 1)
list (APPEND CMAKE_MODULE_PATH "${dispatch_SOURCE_DIR}/cmake")
include (BuildUtil)
include (CheckCCompilerFlag)
include (CheckCSourceCompiles)
include (CMakePushCheckState)
enable_testing()
set (CPACK_PACKAGE_NAME "libdispatch")
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Linux port of Apple's open-source concurrency library")
set (CPACK_PACKAGE_VERSION "${DISPATCH_VERSION}")
set (CPACK_PACKAGE_VERSION_MAJOR "${DISPATCH_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${DISPATCH_VERSION_MINOR}")
set (CPACK_PACKAGE_VERSION_PATCH "${DISPATCH_VERSION_PATCH}")
set (CPACK_RESOURCE_FILE_LICENSE "${dispatch_SOURCE_DIR}/LICENSE")
set (CPACK_RESOURCE_FILE_README "${dispatch_SOURCE_DIR}/README.md")
set (CPACK_PACKAGE_CONTACT "Libdispatch for Linux Maintainers.")
set (CPACK_GENERATOR TGZ)
set (CPACK_SOURCE_GENERATOR TGZ)
set (CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>=2.7), libblocksruntime0 (>=0.1), libpthread-workqueue0 (>=0.8), libkqueue0 (>=1.0)")
include (CPack)
#///////////////////////////////////////////////////////////////////////////////
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Release)
endif ()
#///////////////////////////////////////////////////////////////////////////////
option (DISPATCH_ENABLE_TEST_SUITE "Whether to build the test suite" NO)
option (DISPATCH_USE_LIBDISPATCH_INIT_CONSTRUCTOR
"Use libdispatch_init as a constructor" YES)
set(USE_LIBDISPATCH_INIT_CONSTRUCTOR
${DISPATCH_USE_LIBDISPATCH_INIT_CONSTRUCTOR})
#///////////////////////////////////////////////////////////////////////////////
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
add_definitions(-D_GNU_SOURCE)
if (DISPATCH_SANITIZE)
add_compile_options(-fsanitize=${DISPATCH_SANITIZE} -fno-omit-frame-pointer)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=${DISPATCH_SANITIZE}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=${DISPATCH_SANITIZE}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${DISPATCH_SANITIZE}")
endif ()
#///////////////////////////////////////////////////////////////////////////////
# Find libraries we will need
find_package(kqueue REQUIRED)
find_package(pthread_workqueue)
find_package(BlocksRuntime)
set (HAVE_PTHREAD_WORKQUEUES "${PTHREAD_WORKQUEUE_FOUND}")
dispatch_search_libs(pthread_workqueue_setdispatch_np LIBRARIES
"${PTHREAD_WORKQUEUE_LIBRARIES}")
check_c_compiler_flag(-fblocks COMPILER_HAS_BLOCKS_SUPPORT)
check_c_compiler_flag(-momit-leaf-frame-pointer SUPPORTS_MOMIT_LEAF_FRAME_POINTER)
if (NOT COMPILER_HAS_BLOCKS_SUPPORT)
message(WARNING "Blocks compiler support was not found; dispatch i/o "
"will not be built.")
endif ()
#///////////////////////////////////////////////////////////////////////////////
# Find functions and declarations we care about.
dispatch_check_decls(CLOCK_UPTIME CLOCK_MONOTONIC INCLUDES time.h)
dispatch_check_decls(NOTE_NONE NOTE_REAP NOTE_SIGNAL NOTE_REVOKE
INCLUDES sys/event.h)
dispatch_check_decls(TAILQ_FOREACH_SAFE INCLUDES sys/queue.h)
dispatch_check_decls(FD_COPY INCLUDES sys/select.h)
dispatch_check_decls(SIGEMT INCLUDES signal.h)
dispatch_check_decls(VQ_UPDATE VQ_VERYLOWDISK INCLUDES sys/mount.h)
dispatch_check_decls(POSIX_SPAWN_SETEXEC POSIX_SPAWN_START_SUSPENDED
INCLUDES sys/spawn.h)
cmake_push_check_state ()
set (CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
dispatch_check_decls(program_invocation_short_name INCLUDES errno.h)
cmake_pop_check_state ()
dispatch_check_funcs(pthread_key_init_np pthread_main_np
sysctlbyname sysconf getprogname
strlcpy asprintf)
dispatch_check_headers(sys/cdefs.h unistd.h)
if (HAVE_UNISTD_H AND COMPILER_HAS_BLOCKS_SUPPORT)
cmake_push_check_state()
set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
set(CMAKE_REQUIRED_FLAGS -fblocks)
check_c_source_compiles("#include <unistd.h>\nint main(){}"
HAS_WORKING_UNISTD_H)
cmake_pop_check_state()
if (NOT HAS_WORKING_UNISTD_H)
set (HAS_PROBLEMATIC_UNISTD_H 1)
endif ()
endif ()
set (USE_FUTEX_SEM 1)
configure_file("config/config.h.cmake.in"
"${dispatch_BINARY_DIR}/config/config.h"
@ONLY
)
add_compile_options(
-Wall
-Wextra
-Wno-unused-parameter
-fvisibility=hidden
)
if (COMPILER_HAS_BLOCKS_SUPPORT)
add_compile_options(-fblocks)
endif ()
if (SUPPORTS_MOMIT_LEAF_FRAME_POINTER)
add_compile_options(-momit-leaf-frame-pointer)
endif ()
if (CMAKE_C_COMPILER_ID MATCHES "GNU")
add_compile_options(-Wno-unknown-pragmas)
endif ()
#///////////////////////////////////////////////////////////////////////////////
include_directories(SYSTEM fixincludes)
add_subdirectory(src)
add_subdirectory(testing)
# Install man pages
add_subdirectory(man)
# Install public headers
add_subdirectory(dispatch)
add_subdirectory(os)