-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (108 loc) · 3.5 KB
/
CMakeLists.txt
File metadata and controls
130 lines (108 loc) · 3.5 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
cmake_minimum_required(VERSION 3.24)
project(kvdb-cpp VERSION 0.4.0 LANGUAGES CXX)
option(ORYX_KVDB_ENABLE_TESTS "Build Tests" ON)
option(ORYX_KVDB_BUILD_DEPS "Build Dependencies from source" ON)
option(ORYX_KVDB_INSTALL "Install the project" ${PROJECT_IS_TOP_LEVEL})
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 20)
endif()
include(FetchContent)
if(ORYX_KVDB_BUILD_DEPS)
message(STATUS "Building deps from source")
FetchContent_Declare(
reflectcpp
GIT_REPOSITORY https://github.com/getml/reflect-cpp.git
GIT_TAG v0.21.0
OVERRIDE_FIND_PACKAGE
)
FetchContent_Declare(
leveldb
GIT_REPOSITORY https://github.com/google/leveldb.git
GIT_TAG ac691084fdc5546421a55b25e7653d450e5a25fb
OVERRIDE_FIND_PACKAGE
)
option(LEVELDB_BUILD_BENCHMARKS "Build LevelDB benchmarks" OFF)
option(LEVELDB_BUILD_TESTS "Build LevelDB tests" OFF)
option(LEVELDB_INSTALL "Install LevelDB" ${ORYX_KVDB_INSTALL})
option(REFLECTCPP_INSTALL "Install ReflectCpp" ${ORYX_KVDB_INSTALL})
FetchContent_MakeAvailable(reflectcpp leveldb)
add_library(leveldb::leveldb ALIAS leveldb)
else()
find_package(reflectcpp CONFIG REQUIRED)
find_package(leveldb CONFIG REQUIRED)
endif()
add_library(${PROJECT_NAME} INTERFACE)
add_library("oryx::${PROJECT_NAME}" ALIAS ${PROJECT_NAME})
target_sources(${PROJECT_NAME}
INTERFACE
FILE_SET HEADERS
BASE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/include"
FILES
"${CMAKE_CURRENT_SOURCE_DIR}/include/oryx/key_value_database.hpp"
)
target_link_libraries(${PROJECT_NAME}
INTERFACE
reflectcpp::reflectcpp
leveldb::leveldb
)
target_include_directories(${PROJECT_NAME}
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(${PROJECT_NAME}
INTERFACE
$<$<CONFIG:Debug>:/W4>
)
else()
target_compile_options(${PROJECT_NAME}
INTERFACE
$<$<CONFIG:Debug>:-Wall -Wextra>
)
endif()
if(ORYX_KVDB_ENABLE_TESTS)
set(test_exe ${PROJECT_NAME}_tests)
add_executable(${test_exe}
tests/main.cpp
tests/read_write.cpp
)
target_link_libraries(${test_exe}
PRIVATE
${PROJECT_NAME}
)
endif()
if(ORYX_KVDB_INSTALL)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-version.cmake"
COMPATIBILITY ExactVersion
)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}-targets
FILE_SET HEADERS
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
COMPONENT ${PROJECT_NAME}
)
install(
EXPORT ${PROJECT_NAME}-targets
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
NAMESPACE oryx::
FILE ${PROJECT_NAME}-targets.cmake
COMPONENT ${PROJECT_NAME}
)
endif()