Skip to content

Commit 2ed1e9a

Browse files
committed
cmake: CMakeLists.txt cleanup
Move code and add comments, no substantive changes.
1 parent 3f8483b commit 2ed1e9a

File tree

2 files changed

+78
-55
lines changed

2 files changed

+78
-55
lines changed

CMakeLists.txt

Lines changed: 37 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ project("Libmultiprocess" CXX)
88
set(CMAKE_CXX_STANDARD 17)
99
set(CMAKE_CXX_STANDARD_REQUIRED YES)
1010

11+
find_package(CapnProto REQUIRED)
12+
find_package(Threads REQUIRED)
13+
1114
option(Libmultiprocess_ENABLE_CLANG_TIDY "Run clang-tidy with the compiler." OFF)
1215
if(Libmultiprocess_ENABLE_CLANG_TIDY)
1316
find_program(CLANG_TIDY_EXECUTABLE NAMES clang-tidy)
@@ -17,61 +20,30 @@ if(Libmultiprocess_ENABLE_CLANG_TIDY)
1720
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}")
1821
endif()
1922

20-
include(CMakePushCheckState)
21-
include(CheckCXXSourceCompiles)
22-
include(GNUInstallDirs)
23-
find_package(CapnProto REQUIRED)
24-
find_package(Threads REQUIRED)
25-
2623
include("cmake/capnp_compat.cmake")
24+
include("cmake/pthread_checks.cmake")
25+
include(GNUInstallDirs)
2726

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")
5929

30+
# Generated C++ Capn'Proto schema files
6031
capnp_generate_cpp(MP_PROXY_SRCS MP_PROXY_HDRS include/mp/proxy.capnp)
6132

33+
# util library
6234
add_library(util OBJECT src/mp/util.cpp)
6335
target_include_directories(util PRIVATE
6436
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
6537
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
6638
${CAPNP_INCLUDE_DIRECTORY})
6739

40+
# libmultiprocess.a runtime library
6841
set(MP_PUBLIC_HEADERS
6942
${MP_PROXY_HDRS}
7043
include/mp/proxy-io.h
7144
include/mp/proxy-types.h
7245
include/mp/proxy.h
7346
include/mp/util.h)
74-
7547
add_library(multiprocess STATIC
7648
${MP_PROXY_SRCS}
7749
${MP_PUBLIC_HEADERS}
@@ -92,11 +64,6 @@ set_target_properties(multiprocess PROPERTIES
9264
install(TARGETS multiprocess EXPORT LibTargets
9365
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
9466
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)
10067
include(CMakePackageConfigHelpers)
10168
configure_package_config_file(
10269
${PROJECT_SOURCE_DIR}/cmake/LibmultiprocessLibConfig.cmake.in
@@ -107,11 +74,8 @@ install(
10774
FILES
10875
${CMAKE_CURRENT_BINARY_DIR}/LibmultiprocessLibConfig.cmake
10976
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)
11477

78+
# mpgen code generator
11579
add_executable(mpgen src/mp/gen.cpp $<TARGET_OBJECTS:util>)
11680
add_executable(Libmultiprocess::mpgen ALIAS mpgen)
11781
target_include_directories(mpgen PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>)
@@ -128,11 +92,6 @@ set_target_properties(mpgen PROPERTIES
12892
install(TARGETS mpgen EXPORT BinTargets
12993
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin
13094
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)
13695
include(CMakePackageConfigHelpers)
13796
configure_package_config_file(
13897
${PROJECT_SOURCE_DIR}/cmake/LibmultiprocessBinConfig.cmake.in
@@ -143,17 +102,40 @@ install(
143102
FILES
144103
${CMAKE_CURRENT_BINARY_DIR}/LibmultiprocessBinConfig.cmake
145104
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
146116
install(
147117
FILES
148118
${CMAKE_CURRENT_SOURCE_DIR}/cmake/TargetCapnpSources.cmake
149119
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"
150130
add_custom_target(install-bin
151131
COMMAND ${CMAKE_COMMAND} -DCOMPONENT=bin -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
152132
VERBATIM)
153133
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)
154138

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
158140
add_subdirectory(example EXCLUDE_FROM_ALL)
159141
add_subdirectory(test EXCLUDE_FROM_ALL)

cmake/pthread_checks.cmake

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Copyright (c) 2024 The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
# Define HAVE_PTHREAD_* variables depending on what pthread functions are
6+
# available.
7+
8+
include(CMakePushCheckState)
9+
include(CheckCXXSourceCompiles)
10+
11+
cmake_push_check_state()
12+
set(CMAKE_REQUIRED_LIBRARIES Threads::Threads)
13+
check_cxx_source_compiles("
14+
#include <pthread.h>
15+
int main(int argc, char** argv)
16+
{
17+
char thread_name[16];
18+
return pthread_getname_np(pthread_self(), thread_name, sizeof(thread_name));
19+
}"
20+
HAVE_PTHREAD_GETNAME_NP)
21+
22+
check_cxx_source_compiles("
23+
#include <cstdint>
24+
#include <pthread.h>
25+
int main(int argc, char** argv)
26+
{
27+
uint64_t tid;
28+
pthread_threadid_np(NULL, &tid);
29+
return 0;
30+
}"
31+
HAVE_PTHREAD_THREADID_NP)
32+
33+
check_cxx_source_compiles("
34+
#include <pthread.h>
35+
#include <pthread_np.h>
36+
int main(int argc, char** argv)
37+
{
38+
return pthread_getthreadid_np();
39+
}"
40+
HAVE_PTHREAD_GETTHREADID_NP)
41+
cmake_pop_check_state()

0 commit comments

Comments
 (0)