1- cmake_minimum_required (VERSION 3.9 )
1+ cmake_minimum_required (VERSION 3.21 )
22project (keyvi)
33
44#### Build Type
55if (CMAKE_BUILD_TYPE )
66 string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
77endif ()
88
9+ #### Options
10+
11+ option (KEYVI_C_BINDINGS "Keyvi: Build C binding" ${PROJECT_IS_TOP_LEVEL} )
12+ option (KEYVI_TESTS "Keyvi: Build unit tests" ${PROJECT_IS_TOP_LEVEL} )
13+ option (KEYVI_BINARIES "Keyvi: Build keyvi binaries" ${PROJECT_IS_TOP_LEVEL} )
14+ option (KEYVI_CLANG_TIDY "Keyvi: Build with clang tidy" OFF )
15+ option (KEYVI_DOCS "Keyvi: Build docs" ${PROJECT_IS_TOP_LEVEL} )
16+
917#### Linting
10- find_program (CLANGTIDY clang-tidy)
11- if (CLANGTIDY)
12- message ("-- Found clang-tidy" )
13- set (CMAKE_CXX_CLANG_TIDY clang-tidy; --extra-arg-before=-std=c++17)
14- else ()
15- message ("-- clang-tidy not found" )
16- endif ()
18+ if (KEYVI_CLANG_TIDY)
19+ find_program (CLANGTIDY clang-tidy)
20+ if (CLANGTIDY)
21+ message ("-- Found clang-tidy" )
22+ set (CMAKE_CXX_CLANG_TIDY clang-tidy; --extra-arg-before=-std=c++17)
23+ else ()
24+ message (FATAL_ERROR "clang-tidy requested but not found" )
25+ endif ()
26+ endif (KEYVI_CLANG_TIDY)
1727
1828#### Cmake modules
1929set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ;${CMAKE_CURRENT_SOURCE_DIR} /cmake_modules/" )
@@ -103,7 +113,7 @@ if (WIN32)
103113 add_definitions ( -DBOOST_ALL_NO_LIB )
104114 add_definitions ( -DBOOST_ALL_DYN_LINK )
105115 link_directories (${Boost_LIBRARY_DIRS} )
106-
116+
107117 # required for endian specific functions
108118 list (APPEND _OS_LIBRARIES "ws2_32" )
109119endif (WIN32 )
@@ -174,67 +184,73 @@ string(REPLACE " " ";" _KEYVI_COMPILE_DEFINITIONS_LIST "${_KEYVI_COMPILE_DEFINIT
174184
175185#### Targets ####
176186
177- # keyvicompiler
178- add_executable (keyvicompiler keyvi/bin/keyvicompiler/keyvicompiler.cpp)
179- target_link_libraries (keyvicompiler ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
180- target_compile_options (keyvicompiler PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
181- target_compile_definitions (keyvicompiler PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
182- target_include_directories (keyvicompiler PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
187+ if (KEYVI_BINARIES)
188+ # keyvicompiler
189+ add_executable (keyvicompiler keyvi/bin/keyvicompiler/keyvicompiler.cpp)
190+ target_link_libraries (keyvicompiler ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
191+ target_compile_options (keyvicompiler PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
192+ target_compile_definitions (keyvicompiler PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
193+ target_include_directories (keyvicompiler PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
183194
184- install (TARGETS keyvicompiler DESTINATION bin COMPONENT applications OPTIONAL )
195+ install (TARGETS keyvicompiler DESTINATION bin COMPONENT applications OPTIONAL )
185196
186- # keyviinspector
187- add_executable (keyviinspector keyvi/bin/keyviinspector/keyviinspector.cpp)
188- target_link_libraries (keyviinspector ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
189- target_compile_options (keyviinspector PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
190- target_compile_definitions (keyviinspector PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
191- target_include_directories (keyviinspector PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
197+ # keyviinspector
198+ add_executable (keyviinspector keyvi/bin/keyviinspector/keyviinspector.cpp)
199+ target_link_libraries (keyviinspector ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
200+ target_compile_options (keyviinspector PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
201+ target_compile_definitions (keyviinspector PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
202+ target_include_directories (keyviinspector PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
192203
193- install (TARGETS keyviinspector DESTINATION bin COMPONENT applications OPTIONAL )
204+ install (TARGETS keyviinspector DESTINATION bin COMPONENT applications OPTIONAL )
194205
195- # keyvimerger
196- add_executable (keyvimerger keyvi/bin/keyvimerger/keyvimerger.cpp)
197- target_link_libraries (keyvimerger ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
198- target_compile_options (keyvimerger PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
199- target_compile_definitions (keyvimerger PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
200- target_include_directories (keyvimerger PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
206+ # keyvimerger
207+ add_executable (keyvimerger keyvi/bin/keyvimerger/keyvimerger.cpp)
208+ target_link_libraries (keyvimerger ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
209+ target_compile_options (keyvimerger PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
210+ target_compile_definitions (keyvimerger PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
211+ target_include_directories (keyvimerger PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
201212
202- install (TARGETS keyvimerger DESTINATION bin COMPONENT applications)
213+ install (TARGETS keyvimerger DESTINATION bin COMPONENT applications)
214+ endif (KEYVI_BINARIES)
203215
204216# keyvi_c
205- add_library (keyvi_c SHARED keyvi/bin/keyvi_c/c_api.cpp)
206- target_link_libraries (keyvi_c ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
207- target_compile_options (keyvi_c PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
208- target_compile_definitions (keyvi_c PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
209- target_include_directories (keyvi_c PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
217+ if (KEYVI_C_BINDINGS)
218+ add_library (keyvi_c SHARED keyvi/bin/keyvi_c/c_api.cpp)
219+ target_link_libraries (keyvi_c ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
220+ target_compile_options (keyvi_c PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
221+ target_compile_definitions (keyvi_c PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
222+ target_include_directories (keyvi_c PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
223+ endif (KEYVI_C_BINDINGS)
210224
211225# unit tests
212- FILE (GLOB_RECURSE UNIT_TEST_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} keyvi/tests/keyvi/*.cpp)
213- add_executable (unit_test_all ${UNIT_TEST_SOURCES} )
214- target_link_libraries (unit_test_all ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
215- target_compile_options (unit_test_all PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
216- target_compile_definitions (unit_test_all PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
217- target_include_directories (unit_test_all PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
218- add_dependencies (unit_test_all keyvimerger)
219-
220- if (WIN32 )
221- message (STATUS "zlib: ${ZLIB_LIBRARY_RELEASE} " )
222- # copies the dlls required to run to the build folder
223- foreach (LIB ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE} ${Boost_FILESYSTEM_LIBRARY_RELEASE} ${ZLIB_LIBRARY_RELEASE} )
224- get_filename_component (UTF_BASE_NAME ${LIB} NAME_WE )
225- get_filename_component (UTF_PATH ${LIB} PATH )
226- if (EXISTS "${UTF_PATH} /${UTF_BASE_NAME} .dll" )
227- add_custom_command (TARGET unit_test_all POST_BUILD
228- COMMAND ${CMAKE_COMMAND} -E copy "${UTF_PATH} /${UTF_BASE_NAME} .dll" ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_BUILD_TYPE}
229- )
230- # zlib might be stored in a different folder
231- elseif (EXISTS "${UTF_PATH} /../bin/${UTF_BASE_NAME} .dll" )
232- add_custom_command (TARGET unit_test_all POST_BUILD
233- COMMAND ${CMAKE_COMMAND} -E copy "${UTF_PATH} /../bin/${UTF_BASE_NAME} .dll" ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_BUILD_TYPE}
234- )
235- endif ()
236- endforeach ()
237- endif (WIN32 )
226+ if (KEYVI_TESTS)
227+ FILE (GLOB_RECURSE UNIT_TEST_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} keyvi/tests/keyvi/*.cpp)
228+ add_executable (unit_test_all ${UNIT_TEST_SOURCES} )
229+ target_link_libraries (unit_test_all ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Snappy_LIBRARY} ${ZSTD_LIBRARIES} ${_OS_LIBRARIES} )
230+ target_compile_options (unit_test_all PRIVATE ${_KEYVI_CXX_FLAGS_LIST} )
231+ target_compile_definitions (unit_test_all PRIVATE ${_KEYVI_COMPILE_DEFINITIONS_LIST} )
232+ target_include_directories (unit_test_all PRIVATE "$<BUILD_INTERFACE:${KEYVI_INCLUDES} >" )
233+ add_dependencies (unit_test_all keyvimerger)
234+
235+ if (WIN32 )
236+ message (STATUS "zlib: ${ZLIB_LIBRARY_RELEASE} " )
237+ # copies the dlls required to run to the build folder
238+ foreach (LIB ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE} ${Boost_FILESYSTEM_LIBRARY_RELEASE} ${ZLIB_LIBRARY_RELEASE} )
239+ get_filename_component (UTF_BASE_NAME ${LIB} NAME_WE )
240+ get_filename_component (UTF_PATH ${LIB} PATH )
241+ if (EXISTS "${UTF_PATH} /${UTF_BASE_NAME} .dll" )
242+ add_custom_command (TARGET unit_test_all POST_BUILD
243+ COMMAND ${CMAKE_COMMAND} -E copy "${UTF_PATH} /${UTF_BASE_NAME} .dll" ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_BUILD_TYPE}
244+ )
245+ # zlib might be stored in a different folder
246+ elseif (EXISTS "${UTF_PATH} /../bin/${UTF_BASE_NAME} .dll" )
247+ add_custom_command (TARGET unit_test_all POST_BUILD
248+ COMMAND ${CMAKE_COMMAND} -E copy "${UTF_PATH} /../bin/${UTF_BASE_NAME} .dll" ${CMAKE_CURRENT_BINARY_DIR} /${CMAKE_BUILD_TYPE}
249+ )
250+ endif ()
251+ endforeach ()
252+ endif (WIN32 )
253+ endif (KEYVI_TESTS)
238254
239255# bindings
240256add_custom_target (bindings
@@ -262,7 +278,7 @@ target_link_libraries(keyvi INTERFACE ${Boost_LIBRARIES} ${ZLIB_LIBRARIES} ${Sna
262278### docs
263279
264280# don't run it as part of a non-toplevel build, e.g. python
265- if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /sphinx-docs )
281+ if (KEYVI_DOCS )
266282 find_package (Doxygen)
267283 find_package (Sphinx COMPONENTS breathe)
268284
@@ -288,4 +304,4 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/sphinx-docs)
288304 else ()
289305 message ("-- Skip doc target, doxygen/sphinx not found" )
290306 endif ()
291- endif ()
307+ endif (KEYVI_DOCS )
0 commit comments