Skip to content

Commit bb8a4f1

Browse files
authored
introduce Cmake options (#371)
introduce cmake changes from #316, this will allow more fine granular control what to build
1 parent a17820a commit bb8a4f1

File tree

4 files changed

+81
-66
lines changed

4 files changed

+81
-66
lines changed

CMakeLists.txt

Lines changed: 79 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1-
cmake_minimum_required(VERSION 3.9)
1+
cmake_minimum_required(VERSION 3.21)
22
project(keyvi)
33

44
#### Build Type
55
if (CMAKE_BUILD_TYPE)
66
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
77
endif()
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
1929
set(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")
109119
endif (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
240256
add_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)

cmake_modules/FindSnappy.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(
1515
Snappy_LIBRARY Snappy_INCLUDE_DIR
1616
)
1717

18-
mark_as_advanced(Snappy_INCLUDE_DIR Snappy_LIBRARY)
18+
mark_as_advanced(Snappy_INCLUDE_DIR Snappy_LIBRARY)

cmake_modules/FindSphinx.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,4 +337,3 @@ function(sphinx_add_docs _target)
337337
"${_outputdir}"
338338
DEPENDS ${_depends})
339339
endfunction()
340-

keyvi/flags.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ KEYVI_LINK_LIBRARIES_ALL=@_KEYVI_LINK_LIBRARIES_DYNAMIC@ @_KEYVI_LINK_LIBRARIES_
88
KEYVI_LINK_LIBRARIES_DYNAMIC=@_KEYVI_LINK_LIBRARIES_DYNAMIC@
99
KEYVI_LINK_LIBRARIES_STATIC=@_KEYVI_LINK_LIBRARIES_STATIC@
1010
KEYVI_LINK_FLAGS=@_KEYVI_LINK_FLAGS@
11-
KEYVI_INCLUDES=@_KEYVI_INCLUDES@
11+
KEYVI_INCLUDES=@_KEYVI_INCLUDES@

0 commit comments

Comments
 (0)