@@ -8,6 +8,9 @@ project("Libmultiprocess" CXX)
8
8
set (CMAKE_CXX_STANDARD 17 )
9
9
set (CMAKE_CXX_STANDARD_REQUIRED YES )
10
10
11
+ find_package (CapnProto REQUIRED )
12
+ find_package (Threads REQUIRED )
13
+
11
14
option (Libmultiprocess_ENABLE_CLANG_TIDY "Run clang-tidy with the compiler." OFF )
12
15
if (Libmultiprocess_ENABLE_CLANG_TIDY )
13
16
find_program (CLANG_TIDY_EXECUTABLE NAMES clang-tidy )
@@ -17,61 +20,30 @@ if(Libmultiprocess_ENABLE_CLANG_TIDY)
17
20
set (CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE} " )
18
21
endif ()
19
22
20
- include (CMakePushCheckState )
21
- include (CheckCXXSourceCompiles )
22
- include (GNUInstallDirs )
23
- find_package (CapnProto REQUIRED )
24
- find_package (Threads REQUIRED )
25
-
26
23
include ("cmake/capnp_compat.cmake" )
24
+ include ("cmake/pthread_checks.cmake" )
25
+ include (GNUInstallDirs )
27
26
28
- cmake_push_check_state ()
29
- set (CMAKE_REQUIRED_LIBRARIES Threads::Threads )
30
- check_cxx_source_compiles ("
31
- #include <pthread.h>
32
- int main(int argc, char** argv)
33
- {
34
- char thread_name[16];
35
- return pthread_getname_np(pthread_self(), thread_name, sizeof(thread_name));
36
- }"
37
- HAVE_PTHREAD_GETNAME_NP )
38
-
39
- check_cxx_source_compiles ("
40
- #include <cstdint>
41
- #include <pthread.h>
42
- int main(int argc, char** argv)
43
- {
44
- uint64_t tid;
45
- pthread_threadid_np(NULL, &tid);
46
- return 0;
47
- }"
48
- HAVE_PTHREAD_THREADID_NP )
49
-
50
- check_cxx_source_compiles ("
51
- #include <pthread.h>
52
- #include <pthread_np.h>
53
- int main(int argc, char** argv)
54
- {
55
- return pthread_getthreadid_np();
56
- }"
57
- HAVE_PTHREAD_GETTHREADID_NP )
58
- cmake_pop_check_state ()
27
+ # Generated C++ preprocessor defines
28
+ configure_file (include /mp/config.h.in "${CMAKE_CURRENT_BINARY_DIR} /include/mp/config.h" )
59
29
30
+ # Generated C++ Capn'Proto schema files
60
31
capnp_generate_cpp (MP_PROXY_SRCS MP_PROXY_HDRS include /mp/proxy.capnp )
61
32
33
+ # util library
62
34
add_library (util OBJECT src/mp/util.cpp )
63
35
target_include_directories (util PRIVATE
64
36
$< BUILD_INTERFACE:${CMAKE_SOURCE_DIR} /include>
65
37
$< BUILD_INTERFACE:${CMAKE_BINARY_DIR} /include>
66
38
${CAPNP_INCLUDE_DIRECTORY} )
67
39
40
+ # libmultiprocess.a runtime library
68
41
set (MP_PUBLIC_HEADERS
69
42
${MP_PROXY_HDRS}
70
43
include /mp/proxy-io.h
71
44
include /mp/proxy-types.h
72
45
include /mp/proxy.h
73
46
include /mp/util.h )
74
-
75
47
add_library (multiprocess STATIC
76
48
${MP_PROXY_SRCS}
77
49
${MP_PUBLIC_HEADERS}
@@ -92,11 +64,6 @@ set_target_properties(multiprocess PROPERTIES
92
64
install (TARGETS multiprocess EXPORT LibTargets
93
65
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
94
66
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /mp COMPONENT lib )
95
- install (FILES "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc"
96
- DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig COMPONENT lib )
97
- install (EXPORT LibTargets
98
- NAMESPACE Libmultiprocess::
99
- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT lib )
100
67
include (CMakePackageConfigHelpers )
101
68
configure_package_config_file (
102
69
${PROJECT_SOURCE_DIR} /cmake/LibmultiprocessLibConfig.cmake.in
@@ -107,11 +74,8 @@ install(
107
74
FILES
108
75
${CMAKE_CURRENT_BINARY_DIR} /LibmultiprocessLibConfig.cmake
109
76
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake COMPONENT lib )
110
- add_custom_target (install -lib
111
- COMMAND ${CMAKE_COMMAND} -DCOMPONENT=lib -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
112
- VERBATIM )
113
- add_dependencies (install -lib multiprocess )
114
77
78
+ # mpgen code generator
115
79
add_executable (mpgen src/mp/gen.cpp $< TARGET_OBJECTS:util> )
116
80
add_executable (Libmultiprocess::mpgen ALIAS mpgen )
117
81
target_include_directories (mpgen PRIVATE $< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} /include> )
@@ -128,11 +92,6 @@ set_target_properties(mpgen PROPERTIES
128
92
install (TARGETS mpgen EXPORT BinTargets
129
93
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin
130
94
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /mp COMPONENT bin )
131
- install (FILES "include/mpgen.mk"
132
- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT bin )
133
- install (EXPORT BinTargets
134
- NAMESPACE Libmultiprocess::
135
- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
136
95
include (CMakePackageConfigHelpers )
137
96
configure_package_config_file (
138
97
${PROJECT_SOURCE_DIR} /cmake/LibmultiprocessBinConfig.cmake.in
@@ -143,17 +102,40 @@ install(
143
102
FILES
144
103
${CMAKE_CURRENT_BINARY_DIR} /LibmultiprocessBinConfig.cmake
145
104
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake COMPONENT bin )
105
+
106
+ # makefile include to invoke mpgen code generator, for downstream Make projects
107
+ install (FILES "include/mpgen.mk"
108
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT bin )
109
+
110
+ # pkg-config module to build against libmultiprocess library, for downstream autoconf projects
111
+ configure_file (pkgconfig/libmultiprocess.pc.in "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc" @ONLY )
112
+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc"
113
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig COMPONENT lib )
114
+
115
+ # cmake include to invoke mpgen code generator, for downstream CMake projects
146
116
install (
147
117
FILES
148
118
${CMAKE_CURRENT_SOURCE_DIR} /cmake/TargetCapnpSources.cmake
149
119
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
120
+
121
+ # CMake target import files, for downstream CMake projects
122
+ install (EXPORT BinTargets
123
+ NAMESPACE Libmultiprocess::
124
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
125
+ install (EXPORT LibTargets
126
+ NAMESPACE Libmultiprocess::
127
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT lib )
128
+
129
+ # Makefile targets to support "make install-bin" "make install-lib"
150
130
add_custom_target (install -bin
151
131
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=bin -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
152
132
VERBATIM )
153
133
add_dependencies (install -bin mpgen )
134
+ add_custom_target (install -lib
135
+ COMMAND ${CMAKE_COMMAND} -DCOMPONENT=lib -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
136
+ VERBATIM )
137
+ add_dependencies (install -lib multiprocess )
154
138
155
- configure_file (include /mp/config.h.in "${CMAKE_CURRENT_BINARY_DIR} /include/mp/config.h" )
156
- configure_file (pkgconfig/libmultiprocess.pc.in "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc" @ONLY )
157
-
139
+ # Example and test subdirectories
158
140
add_subdirectory (example EXCLUDE_FROM_ALL )
159
141
add_subdirectory (test EXCLUDE_FROM_ALL )
0 commit comments