@@ -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,26 +64,8 @@ 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
- include (CMakePackageConfigHelpers )
101
- configure_package_config_file (
102
- ${PROJECT_SOURCE_DIR} /cmake/LibmultiprocessLibConfig.cmake.in
103
- LibmultiprocessLibConfig.cmake
104
- INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake
105
- NO_SET_AND_CHECK_MACRO )
106
- install (
107
- FILES
108
- ${CMAKE_CURRENT_BINARY_DIR} /LibmultiprocessLibConfig.cmake
109
- 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
67
68
+ # mpgen code generator
115
69
add_executable (mpgen src/mp/gen.cpp $< TARGET_OBJECTS:util> )
116
70
add_executable (Libmultiprocess::mpgen ALIAS mpgen )
117
71
target_include_directories (mpgen PRIVATE $< BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR} /include> )
@@ -128,32 +82,55 @@ set_target_properties(mpgen PROPERTIES
128
82
install (TARGETS mpgen EXPORT BinTargets
129
83
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin
130
84
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /mp COMPONENT bin )
85
+
86
+ # makefile include to invoke mpgen code generator, for downstream Make projects
131
87
install (FILES "include/mpgen.mk"
132
88
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT bin )
89
+
90
+ # pkg-config module to build against libmultiprocess library, for downstream autoconf projects
91
+ configure_file (pkgconfig/libmultiprocess.pc.in "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc" @ONLY )
92
+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/libmultiprocess.pc"
93
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig COMPONENT lib )
94
+
95
+ # cmake include to invoke mpgen code generator, for downstream CMake projects
96
+ install (
97
+ FILES
98
+ ${CMAKE_CURRENT_SOURCE_DIR} /cmake/TargetCapnpSources.cmake
99
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
100
+
101
+ # CMake target import files, for downstream CMake projects
133
102
install (EXPORT BinTargets
134
103
NAMESPACE Libmultiprocess::
135
104
DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
105
+ install (EXPORT LibTargets
106
+ NAMESPACE Libmultiprocess::
107
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT lib )
108
+
109
+ # CMake find_package config file, for downstream CMake projects
136
110
include (CMakePackageConfigHelpers )
137
111
configure_package_config_file (
138
- ${PROJECT_SOURCE_DIR} /cmake/LibmultiprocessBinConfig .cmake.in
139
- LibmultiprocessBinConfig .cmake
140
- INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake
112
+ ${PROJECT_SOURCE_DIR} /cmake/Config .cmake.in
113
+ LibmultiprocessConfig .cmake
114
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess
141
115
NO_SET_AND_CHECK_MACRO )
142
116
install (
143
117
FILES
144
- ${CMAKE_CURRENT_BINARY_DIR} /LibmultiprocessBinConfig.cmake
145
- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake COMPONENT bin )
146
- install (
147
- FILES
148
- ${CMAKE_CURRENT_SOURCE_DIR} /cmake/TargetCapnpSources.cmake
149
- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess COMPONENT bin )
118
+ ${CMAKE_CURRENT_BINARY_DIR} /LibmultiprocessConfig.cmake
119
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/Libmultiprocess
120
+ COMPONENT common )
121
+
122
+ # Makefile targets to support "make install-bin" "make install-lib"
150
123
add_custom_target (install -bin
151
124
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=bin -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
125
+ COMMAND ${CMAKE_COMMAND} -DCOMPONENT=common -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
152
126
VERBATIM )
153
127
add_dependencies (install -bin mpgen )
128
+ add_custom_target (install -lib
129
+ COMMAND ${CMAKE_COMMAND} -DCOMPONENT=lib -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
130
+ COMMAND ${CMAKE_COMMAND} -DCOMPONENT=common -P ${CMAKE_CURRENT_BINARY_DIR} /cmake_install.cmake
131
+ VERBATIM )
132
+ add_dependencies (install -lib multiprocess )
154
133
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
-
134
+ # Example and test subdirectories
158
135
add_subdirectory (example EXCLUDE_FROM_ALL )
159
136
add_subdirectory (test EXCLUDE_FROM_ALL )
0 commit comments