-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
137 lines (120 loc) · 3.99 KB
/
Copy pathCMakeLists.txt
File metadata and controls
137 lines (120 loc) · 3.99 KB
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
cmake_minimum_required(VERSION 3.16)
project(num8
VERSION 2.0.0
DESCRIPTION "O(1) membership engine for 8-digit numbers"
LANGUAGES C
)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
option(NUM8_BUILD_SHARED "Build the shared library" ON)
option(NUM8_BUILD_TESTS "Build tests" ON)
option(NUM8_BUILD_TOOLS "Build command-line tools" ON)
option(NUM8_BUILD_BENCHMARKS "Build benchmarks" ON)
set(NUM8_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/num8")
add_library(num8 STATIC
num8.c
)
target_include_directories(num8
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(num8 PROPERTIES
OUTPUT_NAME num8_static
)
if(NUM8_BUILD_SHARED)
add_library(num8_shared SHARED
num8.c
)
target_include_directories(num8_shared
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(num8_shared PROPERTIES
OUTPUT_NAME num8
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
endif()
if(NUM8_BUILD_TOOLS)
add_executable(num8_builder
num8_builder.c
)
target_link_libraries(num8_builder PRIVATE num8)
endif()
if(NUM8_BUILD_TESTS)
add_executable(num8_selftest
num8_selftest.c
)
target_link_libraries(num8_selftest PRIVATE num8)
add_executable(num8_minitest
num8_minitest.c
)
target_link_libraries(num8_minitest PRIVATE num8)
endif()
if(NUM8_BUILD_BENCHMARKS)
add_executable(num8_bench
num8_bench.c
)
target_link_libraries(num8_bench PRIVATE num8)
endif()
if(NUM8_BUILD_TESTS)
enable_testing()
add_test(NAME num8_selftest COMMAND num8_selftest)
add_test(NAME num8_minitest COMMAND num8_minitest)
endif()
if(NUM8_BUILD_TESTS)
set(NUM8_TEST_INSTALL_CONFIG "Release" CACHE STRING "Configuration used for install-based tests")
set(NUM8_EXTERNAL_CONSUMER_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/num8-external-prefix")
set(NUM8_EXTERNAL_CONSUMER_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/num8-external-consumer-src")
set(NUM8_EXTERNAL_CONSUMER_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/num8-external-consumer-build")
set(NUM8_EXTERNAL_CONSUMER_GENERATOR "${CMAKE_GENERATOR}")
set(NUM8_EXTERNAL_CONSUMER_PLATFORM "${CMAKE_GENERATOR_PLATFORM}")
set(NUM8_EXTERNAL_CONSUMER_TOOLSET "${CMAKE_GENERATOR_TOOLSET}")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/num8_external_consumer.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/num8_external_consumer.cmake
@ONLY
)
add_test(
NAME num8_external_consumer
COMMAND ${CMAKE_COMMAND}
-DNUM8_TEST_INSTALL_CONFIG=$<CONFIG>
-P ${CMAKE_CURRENT_BINARY_DIR}/num8_external_consumer.cmake
)
endif()
if(NUM8_BUILD_SHARED)
set_target_properties(num8 PROPERTIES EXPORT_NAME num8_static)
set_target_properties(num8_shared PROPERTIES EXPORT_NAME num8)
set(NUM8_PACKAGE_SOURCES num8 num8_shared)
else()
set_target_properties(num8 PROPERTIES EXPORT_NAME num8)
set(NUM8_PACKAGE_SOURCES num8)
endif()
install(TARGETS ${NUM8_PACKAGE_SOURCES}
EXPORT num8Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(FILES num8.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/num8ConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/num8Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/num8Config.cmake
INSTALL_DESTINATION ${NUM8_INSTALL_CMAKEDIR}
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/num8Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/num8ConfigVersion.cmake
DESTINATION ${NUM8_INSTALL_CMAKEDIR}
)
install(EXPORT num8Targets
NAMESPACE num8::
DESTINATION ${NUM8_INSTALL_CMAKEDIR}
)