]> git.proxmox.com Git - ceph.git/blame - ceph/src/CMakeLists.txt
import ceph quincy 17.2.1
[ceph.git] / ceph / src / CMakeLists.txt
CommitLineData
7c673cae 1include(GetGitRevisionDescription)
9f95a23c 2include(CheckCXXCompilerFlag)
7c673cae 3
7c673cae 4# for erasure and compressor plugins
11fdf7f2
TL
5set(CEPH_INSTALL_PKGLIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
6set(CEPH_INSTALL_FULL_PKGLIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME})
7# for mgr plugins
8set(CEPH_INSTALL_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME})
7c673cae
FG
9# so libceph-common can be found
10set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
11if(NOT CMAKE_INSTALL_RPATH)
11fdf7f2 12 set(CMAKE_INSTALL_RPATH "${CEPH_INSTALL_FULL_PKGLIBDIR}")
7c673cae
FG
13endif()
14
15# to be compatible with configure_files shared with autoconfig
16set(bindir ${CMAKE_INSTALL_FULL_BINDIR})
17set(sbindir ${CMAKE_INSTALL_FULL_SBINDIR})
18set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
19set(sysconfdir ${CMAKE_INSTALL_FULL_SYSCONFDIR})
20set(libexecdir ${CMAKE_INSTALL_FULL_LIBEXECDIR})
21set(pkgdatadir ${CMAKE_INSTALL_FULL_DATADIR})
11fdf7f2 22set(datadir ${CEPH_INSTALL_DATADIR})
7c673cae
FG
23set(prefix ${CMAKE_INSTALL_PREFIX})
24
20effc67
TL
25configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in
26 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY)
27
28configure_file(ceph-post-file.in
29 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY)
30
31configure_file(ceph-crash.in
32 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash @ONLY)
33
34# the src/.git_version file may be written out by make-dist; otherwise
35# we pull the git version from .git
36option(ENABLE_GIT_VERSION "build Ceph with git version string" ON)
37if(ENABLE_GIT_VERSION)
38 get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER)
39 git_describe(CEPH_GIT_NICE_VER_WITH_V --always)
40 # remove leading 'v'
41 string(SUBSTRING ${CEPH_GIT_NICE_VER_WITH_V} 1 -1 CEPH_GIT_NICE_VER)
42 #if building from a source tarball via make-dist
43 if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND")
44 message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER")
45 file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG)
46 list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER)
47 list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER)
48 endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND")
49else(ENABLE_GIT_VERSION)
50 set(CEPH_GIT_VER "no_version")
51 set(CEPH_GIT_NICE_VER "Development")
52endif(ENABLE_GIT_VERSION)
53
54# the src/ceph_release file is 3 lines,
55# <release number, e.g. '12' for luminous>
56# <release name, e.g. 'luminous'>
57# <release type: 'dev' for x.0.z, 'rc' or x.1.z, or 'stable' or x.2.z>
58# note that the release name is semi-redundant and must match CEPH_RELEASE_*
59# definitions in include/rados.h and common/ceph_strings.c.
60file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE)
61list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE)
62list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME)
63list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE)
64
65configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in
66 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY)
67
68# Common infrastructure
69configure_file(
70 ${CMAKE_SOURCE_DIR}/src/ceph_ver.h.in.cmake
71 ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h
72 @ONLY)
73
f67539c2
TL
74add_definitions(
75 -DHAVE_CONFIG_H
76 -D__CEPH__
77 -D_REENTRANT
78 -D_THREAD_SAFE
79 -D__STDC_FORMAT_MACROS
80 -D_FILE_OFFSET_BITS=64
81 -DBOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
82if(Boost_VERSION VERSION_GREATER_EQUAL 1.74)
83 add_definitions(-DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT)
84endif()
85
7c673cae
FG
86if(LINUX)
87 add_definitions("-D_GNU_SOURCE")
88endif()
89
f67539c2
TL
90add_compile_options(
91 -Wall
92 -fno-strict-aliasing
93 -fsigned-char)
9f95a23c
TL
94
95if(NOT MSVC)
f67539c2
TL
96 add_compile_options(
97 -Wtype-limits
98 -Wignored-qualifiers
99 -Wpointer-arith
100 -Werror=format-security
101 -Winit-self
102 -Wno-unknown-pragmas)
103 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wnon-virtual-dtor>)
104 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-ignored-qualifiers>)
9f95a23c 105endif()
7c673cae 106
f67539c2 107add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-ftemplate-depth-1024>)
9f95a23c
TL
108
109CHECK_CXX_COMPILER_FLAG("-Wpessimizing-move" COMPILER_SUPPORTS_PESSIMIZING_MOVE)
110if(COMPILER_SUPPORTS_PESSIMIZING_MOVE)
f67539c2 111 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wpessimizing-move>)
9f95a23c
TL
112endif()
113CHECK_CXX_COMPILER_FLAG("-Wredundant-move" COMPILER_SUPPORTS_REDUNDANT_MOVE)
114if(COMPILER_SUPPORTS_REDUNDANT_MOVE)
f67539c2 115 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wredundant-move>)
9f95a23c 116endif()
7c673cae 117if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
9f95a23c
TL
118 if(MINGW)
119 # The MINGW headers are missing some "const" qualifiers.
20effc67 120 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fpermissive>)
9f95a23c 121 else()
f67539c2 122 string(APPEND CMAKE_EXE_LINKER_FLAGS " -rdynamic")
9f95a23c 123 endif()
20effc67 124 string(APPEND CMAKE_CXX_FLAGS_DEBUG " -Og")
f67539c2
TL
125 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wstrict-null-sentinel>)
126 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Woverloaded-virtual>)
127 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-new-ttp-matching>)
11fdf7f2
TL
128 # cmake does not add '-pie' for executables even if
129 # CMAKE_POSITION_INDEPENDENT_CODE is TRUE.
130 if(EXE_LINKER_USE_PIE)
131 if (NOT WITH_OSD_INSTRUMENT_FUNCTIONS AND NOT HAVE_SEASTAR)
20effc67 132 string(APPEND CMAKE_EXE_LINKER_FLAGS " -pie")
11fdf7f2 133 endif()
31f18b77 134 endif()
7c673cae 135elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
11fdf7f2 136 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_EXPORTS_C_FLAG}")
f67539c2 137 string(APPEND CMAKE_LINKER_FLAGS " -rdynamic -export-dynamic ${CMAKE_EXE_EXPORTS_C_FLAG}")
20effc67 138 string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g")
f67539c2
TL
139 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-inconsistent-missing-override>)
140 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-mismatched-tags>)
141 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-unused-private-field>)
142 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-address-of-packed-member>)
143 add_compile_options(
144 -Wno-unused-function
145 -Wno-unused-local-typedef
146 -Wno-varargs
147 -Wno-gnu-designator
148 -Wno-missing-braces
149 -Wno-parentheses
150 -Wno-deprecated-register)
9f95a23c
TL
151 if(FREEBSD)
152 # Need to use the GNU binutils linker to get versioning right.
f67539c2
TL
153 string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=/usr/local/bin/ld -Wno-unused-command-line-argument")
154 string(APPEND CMAKE_SHARED_LINKER_FLAGS " -fuse-ld=/usr/local/bin/ld -Wno-unused-command-line-argument")
9f95a23c 155 endif()
11fdf7f2 156 if(APPLE)
f67539c2 157 string(APPEND CMAKE_SHARED_LINKER_FLAGS " -undefined dynamic_lookup")
11fdf7f2 158 endif()
7c673cae 159endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
7c673cae 160
20effc67 161if(WITH_CEPH_DEBUG_MUTEX)
f67539c2 162 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-DCEPH_DEBUG_MUTEX>)
7c673cae
FG
163endif()
164
165include(CheckCCompilerFlag)
166if(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
31f18b77 167 CHECK_C_COMPILER_FLAG("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2" HAS_FORTIFY_SOURCE)
7c673cae
FG
168 if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
169 if(HAS_FORTIFY_SOURCE)
f67539c2
TL
170 add_definitions(
171 -U_FORTIFY_SOURCE
172 -D_FORTIFY_SOURCE=2)
7c673cae
FG
173 endif()
174 endif()
f67539c2
TL
175 if(NOT WIN32)
176 CHECK_C_COMPILER_FLAG(-fstack-protector-strong HAS_STACK_PROTECT)
177 if (HAS_STACK_PROTECT)
178 add_compile_options(-fstack-protector-strong)
179 endif()
180 endif(NOT WIN32)
7c673cae
FG
181endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU)
182
9f95a23c
TL
183CHECK_C_COMPILER_FLAG("-D_GLIBCXX_ASSERTIONS" HAS_GLIBCXX_ASSERTIONS)
184if(HAS_GLIBCXX_ASSERTIONS AND CMAKE_BUILD_TYPE STREQUAL Debug)
f67539c2 185 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-D_GLIBCXX_ASSERTIONS>)
9f95a23c
TL
186endif()
187
7c673cae
FG
188include(SIMDExt)
189if(HAVE_INTEL)
11fdf7f2
TL
190 if(APPLE)
191 set(object_format "macho64")
192 else()
193 set(object_format "elf64")
194 endif()
195 set(CMAKE_ASM_FLAGS "-f ${object_format}")
f67539c2 196 set(CMAKE_ASM_COMPILER ${PROJECT_SOURCE_DIR}/src/nasm-wrapper)
9f95a23c
TL
197 if(NOT WIN32)
198 # The native tools might be located even when cross compiling, which
199 # might not work in this case (especially when targeting Windows).
f67539c2
TL
200 include(CheckNasm)
201 check_nasm_support(${object_format}
202 HAVE_NASM_X64
203 HAVE_NASM_X64_AVX2
204 HAVE_NASM_X64_AVX512)
9f95a23c 205 endif()
7c673cae
FG
206endif()
207
11fdf7f2 208# require c++17
9f95a23c
TL
209set(CMAKE_CXX_STANDARD 17)
210set(CMAKE_CXX_EXTENSIONS OFF)
211set(CMAKE_CXX_STANDARD_REQUIRED ON)
212set(CMAKE_C_STANDARD 99)
213# we use `asm()` to inline assembly, so enable the GNU extension
214set(CMAKE_C_EXTENSIONS ON)
215set(C_STANDARD_REQUIRED ON)
7c673cae 216
11fdf7f2
TL
217include(CheckCXXSourceCompiles)
218CHECK_CXX_SOURCE_COMPILES("
219#include <map>
220using Map = std::map<int, int>;
221int main() {
222 Map m;
223 m.merge(Map{});
224}
225" HAVE_STDLIB_MAP_SPLICING)
226
7c673cae
FG
227## Handle diagnostics color if compiler supports them.
228CHECK_C_COMPILER_FLAG("-fdiagnostics-color=always"
229 COMPILER_SUPPORTS_DIAGNOSTICS_COLOR)
230
231set(DIAGNOSTICS_COLOR "auto"
232 CACHE STRING "Used if the C/C++ compiler supports the -fdiagnostics-color option. May have one of three values -- 'auto' (default), 'always', or 'never'. If set to 'always' and the compiler supports the option, 'make [...] | less -R' will make visible diagnostics colorization of compiler output.")
233
234if(COMPILER_SUPPORTS_DIAGNOSTICS_COLOR)
20effc67
TL
235 add_compile_options(
236 "$<$<COMPILE_LANGUAGE:C>:-fdiagnostics-color=${DIAGNOSTICS_COLOR}>"
237 "$<$<COMPILE_LANGUAGE:CXX>:-fdiagnostics-color=${DIAGNOSTICS_COLOR}>")
7c673cae
FG
238endif()
239
11fdf7f2 240set(EXTRALIBS ${CMAKE_DL_LIBS})
9f95a23c
TL
241if(HAVE_POSIX_TIMERS)
242 list(APPEND EXTRALIBS ${RT_LIBRARY})
11fdf7f2
TL
243endif()
244if(LINUX OR APPLE)
7c673cae
FG
245 set(LIB_RESOLV resolv)
246 list(APPEND EXTRALIBS ${LIB_RESOLV})
11fdf7f2 247endif()
7c673cae
FG
248
249if(${ENABLE_COVERAGE})
250 find_program(HAVE_GCOV gcov)
251 if(NOT HAVE_GCOV)
252 message(FATAL_ERROR "Coverage Enabled but gcov Not Found")
f67539c2
TL
253 endif()
254 add_compile_options(
255 -fprofile-arcs
256 -ftest-coverage
257 -O0)
7c673cae
FG
258 list(APPEND EXTRALIBS gcov)
259endif(${ENABLE_COVERAGE})
260
20effc67
TL
261if(WITH_TESTS)
262 set(GCOV_PREFIX_STRIP 4)
263 configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in
264 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY)
265 configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in
266 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY)
267endif()
31f18b77 268
7c673cae
FG
269option(WITH_OCF "build OCF-compliant cluster resource agent" OFF)
270if(WITH_OCF)
271 add_subdirectory(ocf)
272endif()
273
274option(WITH_CEPHFS_JAVA "build libcephfs Java bindings" OFF)
275if(WITH_CEPHFS_JAVA)
276 add_subdirectory(java)
277endif()
278
7c673cae
FG
279# sort out which allocator to use
280if(ALLOCATOR STREQUAL "tcmalloc")
11fdf7f2 281 set(ALLOC_LIBS gperftools::tcmalloc)
f67539c2
TL
282 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-malloc>)
283 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-calloc>)
284 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-realloc>)
285 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-free>)
7c673cae 286elseif(ALLOCATOR STREQUAL "tcmalloc_minimal")
11fdf7f2 287 set(ALLOC_LIBS gperftools::tcmalloc_minimal)
f67539c2
TL
288 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-malloc>)
289 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-calloc>)
290 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-realloc>)
291 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-free>)
7c673cae 292elseif(ALLOCATOR STREQUAL "jemalloc")
11fdf7f2 293 set(ALLOC_LIBS JeMalloc::JeMalloc)
f67539c2
TL
294 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-malloc>)
295 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-calloc>)
296 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-realloc>)
297 add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-builtin-free>)
7c673cae
FG
298endif()
299
7c673cae
FG
300if (WITH_BLKIN)
301 add_subdirectory(blkin/blkin-lib)
302endif(WITH_BLKIN)
303
7c673cae
FG
304set(mds_files)
305list(APPEND mds_files
306 mds/MDSMap.cc
307 mds/FSMap.cc
308 mds/FSMapUser.cc
309 mds/inode_backtrace.cc
310 mds/mdstypes.cc
f67539c2
TL
311 mds/flock.cc
312 mds/cephfs_features.cc)
7c673cae 313
7c673cae
FG
314add_subdirectory(json_spirit)
315
11fdf7f2 316include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash")
31f18b77 317include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include")
7c673cae 318
522d829b 319option(WITH_FMT_HEADER_ONLY "use header-only version of fmt library" OFF)
f67539c2 320find_package(fmt 6.0.0 QUIET)
9f95a23c
TL
321if(fmt_FOUND)
322 include_directories(SYSTEM "${fmt_INCLUDE_DIR}")
323else()
324 message(STATUS "Could not find fmt, will build it")
522d829b
TL
325 set(old_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
326 set(BUILD_SHARED_LIBS FALSE)
9f95a23c 327 add_subdirectory(fmt)
522d829b
TL
328 set(BUILD_SHARED_LIBS ${old_BUILD_SHARED_LIBS})
329 unset(old_BUILD_SHARED_LIBS)
9f95a23c
TL
330 include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include")
331endif()
332
f67539c2
TL
333# in osd/PeeringState.h, the number of elements in PeeringState::Active::reactions
334# is now 21 which exceeds the default value of BOOST_MPL_LIMIT_VECTOR_SIZE, which
335# is 20. so we need to override it. see
336# https://www.boost.org/doc/libs/1_74_0/libs/mpl/doc/refmanual/limit-list-size.html
337# link with this library, if your code includes osd/PeeringState.h (indirectly)
338add_library(Boost::MPL INTERFACE IMPORTED)
339set_target_properties(Boost::MPL PROPERTIES
340 INTERFACE_COMPILE_DEFINITIONS
341 "BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS;BOOST_MPL_LIMIT_LIST_SIZE=30")
342
11fdf7f2 343if(WITH_SEASTAR)
11fdf7f2
TL
344 find_package(c-ares 1.13.0 QUIET)
345 if(NOT c-ares_FOUND)
346 message(STATUS "Could not find c-ares, will build it")
347 include(Buildc-ares)
348 build_c_ares()
349 endif()
350 macro(find_package name)
351 if(NOT TARGET ${name})
352 _find_package(${ARGV})
353 endif()
354 endmacro ()
f67539c2 355 set(Seastar_API_LEVEL "6" CACHE STRING "" FORCE)
11fdf7f2
TL
356 set(Seastar_HWLOC OFF CACHE BOOL "" FORCE)
357 set(Seastar_STD_OPTIONAL_VARIANT_STRINGVIEW ON CACHE BOOL "" FORCE)
9f95a23c
TL
358 if(Seastar_DPDK)
359 find_package(dpdk QUIET)
360 if(NOT DPDK_FOUND)
361 include(BuildDPDK)
362 build_dpdk(${CMAKE_BINARY_DIR}/src/dpdk)
363 endif()
364 endif()
f67539c2
TL
365 list(APPEND Seastar_CXX_FLAGS
366 "-Wno-error"
367 "-Wno-sign-compare"
368 "-Wno-attributes"
369 "-Wno-pessimizing-move"
370 "-Wno-address-of-packed-member"
371 "-Wno-non-virtual-dtor")
372 set(Seastar_CXX_FLAGS "${Seastar_CXX_FLAGS}" CACHE STRING "" FORCE)
11fdf7f2
TL
373 add_subdirectory(seastar)
374 # create the directory so cmake won't complain when looking at the imported
375 # target: Seastar exports this directory created at build-time
376 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen/include")
377 add_subdirectory(crimson)
378endif()
7c673cae 379
20effc67
TL
380include(CheckTypeSize)
381set(CMAKE_EXTRA_INCLUDE_FILES "sys/time.h")
382CHECK_TYPE_SIZE(suseconds_t SUSECONDS_T)
383unset(CMAKE_EXTRA_INCLUDE_FILES)
522d829b 384
7c673cae
FG
385set(libcommon_files
386 ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h
387 ceph_ver.c
9f95a23c 388 global/global_context.cc
7c673cae 389 xxHash/xxhash.c
f67539c2 390 common/error_code.cc
20effc67 391 common/tracer.cc
7c673cae 392 log/Log.cc
7c673cae
FG
393 mon/MonCap.cc
394 mon/MonClient.cc
395 mon/MonMap.cc
11fdf7f2 396 mon/MonSub.cc
f67539c2 397 mon/error_code.cc
7c673cae 398 mgr/MgrClient.cc
31f18b77 399 mon/PGMap.cc
224ce89b 400 mgr/ServiceMap.cc
7c673cae
FG
401 osd/ECMsgTypes.cc
402 osd/HitSet.cc
7c673cae
FG
403 osd/OSDMap.cc
404 osd/OSDMapMapping.cc
7c673cae 405 osd/osd_types.cc
f67539c2 406 osd/error_code.cc
11fdf7f2 407 osd/PGPeeringEvent.cc
7c673cae 408 osd/OpRequest.cc
9f95a23c
TL
409 osd/ClassHandler.cc
410 osd/osd_op_util.cc
7c673cae
FG
411 osdc/Striper.cc
412 osdc/Objecter.cc
f67539c2 413 osdc/error_code.cc
11fdf7f2 414 librbd/Features.cc
20effc67 415 librbd/io/IoOperations.cc
7c673cae 416 ${mds_files})
20effc67 417
11fdf7f2
TL
418set_source_files_properties(ceph_ver.c
419 APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h)
420add_library(common-objs OBJECT ${libcommon_files})
20effc67
TL
421target_compile_definitions(common-objs PRIVATE
422 $<TARGET_PROPERTY:fmt::fmt,INTERFACE_COMPILE_DEFINITIONS>)
423add_dependencies(common-objs legacy-option-headers)
7c673cae 424
f67539c2 425if(WITH_JAEGER)
20effc67
TL
426 find_package(thrift 0.13.0 REQUIRED)
427 include(BuildOpentelemetry)
428 build_opentelemetry()
429 set(jaeger_base opentelemetry::libopentelemetry thrift::libthrift)
430 add_dependencies(common-objs ${jaeger_base})
431 target_link_libraries(common-objs ${jaeger_base})
f67539c2
TL
432endif()
433
3efd9988 434CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA)
11fdf7f2
TL
435add_subdirectory(auth)
436add_subdirectory(common)
437add_subdirectory(crush)
438add_subdirectory(msg)
439add_subdirectory(arch)
7c673cae 440
7c673cae 441set(ceph_common_objs
11fdf7f2
TL
442 $<TARGET_OBJECTS:common-auth-objs>
443 $<TARGET_OBJECTS:common-common-objs>
20effc67 444 $<TARGET_OBJECTS:common-options-objs>
11fdf7f2 445 $<TARGET_OBJECTS:common-msg-objs>
7c673cae
FG
446 $<TARGET_OBJECTS:common_buffer_obj>
447 $<TARGET_OBJECTS:common_texttable_obj>
448 $<TARGET_OBJECTS:compressor_objs>
449 $<TARGET_OBJECTS:common-objs>
450 $<TARGET_OBJECTS:common_mountcephfs_objs>
7c673cae
FG
451 $<TARGET_OBJECTS:crush_objs>)
452set(ceph_common_deps
11fdf7f2
TL
453 json_spirit erasure_code arch crc32
454 ${LIB_RESOLV}
31f18b77
FG
455 Boost::thread
456 Boost::system
31f18b77
FG
457 Boost::random
458 Boost::program_options
459 Boost::date_time
460 Boost::iostreams
9f95a23c
TL
461 StdFilesystem::filesystem
462 fmt::fmt
7c673cae
FG
463 ${BLKID_LIBRARIES}
464 ${Backtrace_LIBRARIES}
465 ${BLKIN_LIBRARIES}
466 ${CRYPTO_LIBS}
11fdf7f2 467 ${GSSAPI_LIBRARIES}
7c673cae
FG
468 ${CMAKE_THREAD_LIBS_INIT}
469 ${CMAKE_DL_LIBS})
11fdf7f2
TL
470if(HAVE_UDEV)
471 list(APPEND ceph_common_deps ${UDEV_LIBRARIES})
472endif()
473
474if(HAVE_VERBS)
475 list(APPEND ceph_common_deps IBVerbs::verbs)
7c673cae 476endif()
11fdf7f2
TL
477
478if(HAVE_RDMACM)
479 list(APPEND ceph_common_deps RDMA::RDMAcm)
480endif()
481
7c673cae
FG
482if(NOT WITH_SYSTEM_BOOST)
483 list(APPEND ceph_common_deps ${ZLIB_LIBRARIES})
484endif()
485
11fdf7f2 486if(HAVE_QATZIP)
1d09f67e 487 list(APPEND ceph_common_deps ${qatzip_LIBRARIES})
11fdf7f2 488endif()
7c673cae 489
11fdf7f2
TL
490if(WITH_DPDK)
491 list(APPEND ceph_common_deps common_async_dpdk)
492endif()
7c673cae 493
f67539c2 494if(WITH_JAEGER)
20effc67 495 list(APPEND ceph_common_deps ${jaeger_base})
f67539c2
TL
496endif()
497
9f95a23c 498if(WIN32)
f67539c2
TL
499 list(APPEND ceph_common_deps ws2_32 mswsock iphlpapi bcrypt)
500 list(APPEND ceph_common_deps dlfcn_win32)
9f95a23c
TL
501endif()
502
503if(WITH_BLUESTORE_PMEM OR WITH_RBD_RWL)
504 if(WITH_SYSTEM_PMDK)
20effc67 505 set(pmem_COMPONENTS)
9f95a23c 506 if(WITH_BLUESTORE_PMEM)
20effc67 507 list(APPEND pmem_COMPONENTS pmem)
9f95a23c
TL
508 endif()
509 if(WITH_RBD_RWL)
20effc67 510 list(APPEND pmem_COMPONENTS pmemobj)
9f95a23c 511 endif()
a4b75251 512 find_package(pmem 1.10 REQUIRED COMPONENTS ${pmem_COMPONENTS})
9f95a23c
TL
513 else()
514 include(Buildpmem)
515 build_pmem()
516 endif()
517endif()
518
7c673cae
FG
519add_library(common STATIC ${ceph_common_objs})
520target_link_libraries(common ${ceph_common_deps})
20effc67 521add_dependencies(common legacy-option-headers ${jaeger_base})
7c673cae
FG
522
523add_library(ceph-common SHARED ${ceph_common_objs})
524target_link_libraries(ceph-common ${ceph_common_deps})
20effc67 525add_dependencies(ceph-common legacy-option-headers ${jaeger_base})
7c673cae
FG
526# appease dpkg-shlibdeps
527set_target_properties(ceph-common PROPERTIES
9f95a23c
TL
528 SOVERSION 2
529 SKIP_RPATH TRUE)
11fdf7f2 530if(NOT APPLE AND NOT FREEBSD)
91327a77
AA
531 # Apple uses Mach-O, not ELF. so this option does not apply to APPLE.
532 #
533 # prefer the local symbol definitions when binding references to global
534 # symbols. otherwise we could reference the symbols defined by the application
535 # with the same name, instead of using the one defined in libceph-common.
536 # in other words, we require libceph-common to use local symbols, even if redefined
537 # in application".
538 set_property(
539 TARGET ceph-common
540 APPEND APPEND_STRING
541 PROPERTY LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions")
542endif()
543
9f95a23c
TL
544if(MINGW)
545 install(
546 TARGETS ceph-common
547 RUNTIME
548 DESTINATION ${CEPH_INSTALL_PKGLIBDIR})
549else()
550 install(
551 TARGETS ceph-common
552 LIBRARY
553 DESTINATION ${CEPH_INSTALL_PKGLIBDIR}
554 NAMELINK_SKIP)
555endif()
7c673cae 556
7c673cae
FG
557if(${WITH_LTTNG})
558 add_subdirectory(tracing)
559 add_dependencies(common-objs oprequest-tp)
560endif(${WITH_LTTNG})
561
562add_subdirectory(global)
563
20effc67
TL
564# RGW also support Lua scripting
565if(WITH_CEPHFS OR WITH_RADOSGW)
f67539c2
TL
566 find_package(Lua 5.3 REQUIRED)
567endif()
7c673cae
FG
568
569# rados object classes
570add_subdirectory(cls)
571
572# RADOS client/library
573add_subdirectory(osdc)
574
11fdf7f2
TL
575# heal_profiler
576add_subdirectory(perfglue)
577
7c673cae
FG
578add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc)
579
11fdf7f2
TL
580option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON)
581
7c673cae
FG
582add_subdirectory(include)
583add_subdirectory(librados)
f67539c2 584add_subdirectory(neorados)
7c673cae 585
11fdf7f2
TL
586if(WITH_LIBRADOSSTRIPER)
587 add_subdirectory(libradosstriper)
588endif()
589
20effc67
TL
590# make rocksdb statically
591
592if(NOT WITH_SYSTEM_ROCKSDB)
593 include(BuildRocksDB)
594 build_rocksdb()
595endif(NOT WITH_SYSTEM_ROCKSDB)
596
597if(WITH_MGR)
598 add_subdirectory(mgr)
599endif()
7c673cae
FG
600
601set(librados_config_srcs
602 librados-config.cc)
603add_executable(librados-config ${librados_config_srcs})
9f95a23c 604target_link_libraries(librados-config librados Boost::program_options)
7c673cae
FG
605
606install(TARGETS librados-config DESTINATION bin)
607
608# virtualenv base directory for ceph-disk and ceph-detect-init
609set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR})
610if(NOT CEPH_BUILD_VIRTUALENV)
a8e16298 611 set(CEPH_BUILD_VIRTUALENV ${CMAKE_BINARY_DIR})
7c673cae
FG
612endif()
613
f67539c2 614if(NOT WIN32)
7c673cae 615add_subdirectory(pybind)
d2e6a577 616add_subdirectory(ceph-volume)
9f95a23c
TL
617add_subdirectory(python-common)
618add_subdirectory(cephadm)
f67539c2 619endif(NOT WIN32)
7c673cae
FG
620
621# Monitor
7c673cae
FG
622add_subdirectory(mon)
623set(ceph_mon_srcs
624 ceph_mon.cc)
625add_executable(ceph-mon ${ceph_mon_srcs}
626 $<TARGET_OBJECTS:common_texttable_obj>)
627add_dependencies(ceph-mon erasure_code_plugins)
11fdf7f2 628target_link_libraries(ceph-mon mon os global-static ceph-common
7c673cae 629 ${EXTRALIBS}
11fdf7f2 630 ${CMAKE_DL_LIBS} ${GSSAPI_LIBRARIES})
7c673cae
FG
631install(TARGETS ceph-mon DESTINATION bin)
632
633# OSD/ObjectStore
7c673cae
FG
634
635include(TestBigEndian)
636test_big_endian(CEPH_BIG_ENDIAN)
637if(NOT CEPH_BIG_ENDIAN)
638 set(CEPH_LITTLE_ENDIAN 1)
639endif()
640
641add_subdirectory(kv)
642add_subdirectory(os)
643
f67539c2
TL
644if(NOT WIN32)
645add_subdirectory(blk)
7c673cae
FG
646add_subdirectory(osd)
647
648set(ceph_osd_srcs
9f95a23c
TL
649 # Link the Object Class API implementation directly as intermediary
650 # static library (like libosd.a) nullifies the effect of `-rdynamic`.
651 osd/objclass.cc
652 objclass/class_api.cc
7c673cae 653 ceph_osd.cc)
20effc67 654
31f18b77 655add_executable(ceph-osd ${ceph_osd_srcs})
7c673cae
FG
656add_dependencies(ceph-osd erasure_code_plugins)
657target_link_libraries(ceph-osd osd os global-static common
11fdf7f2 658 ${BLKID_LIBRARIES})
7c673cae 659if(WITH_FUSE)
1911f103 660 target_link_libraries(ceph-osd FUSE::FUSE)
7c673cae 661endif()
11fdf7f2 662set_target_properties(ceph-osd PROPERTIES
81eedcae
TL
663 POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE}
664 INSTALL_RPATH "")
7c673cae
FG
665install(TARGETS ceph-osd DESTINATION bin)
666
f67539c2
TL
667endif(NOT WIN32)
668
11fdf7f2
TL
669if (WITH_CEPHFS)
670 add_subdirectory(mds)
671 set(ceph_mds_srcs
672 ceph_mds.cc)
673 add_executable(ceph-mds ${ceph_mds_srcs})
674 target_link_libraries(ceph-mds mds ${CMAKE_DL_LIBS} global-static ceph-common
675 Boost::thread)
676 install(TARGETS ceph-mds DESTINATION bin)
677endif()
7c673cae
FG
678
679add_subdirectory(erasure-code)
680
681# Support/Tools
682if(WITH_TESTS)
11fdf7f2
TL
683 option(WITH_SYSTEM_GTEST "require and build with system gtest and gmock" OFF)
684 if(WITH_SYSTEM_GTEST)
685 find_package(GTest REQUIRED)
686 find_package(GMock REQUIRED)
687 else()
9f95a23c
TL
688 set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
689 add_subdirectory(googletest)
11fdf7f2
TL
690 add_library(GMock::GMock ALIAS gmock)
691 add_library(GMock::Main ALIAS gmock_main)
692 target_include_directories(gmock INTERFACE
693 $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>)
694 target_include_directories(gmock_main INTERFACE
695 $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>)
696 add_library(GTest::GTest ALIAS gtest)
697 add_library(GTest::Main ALIAS gtest_main)
698 endif()
7c673cae
FG
699endif(WITH_TESTS)
700
31f18b77 701# dmClock (after gmock)
31f18b77
FG
702option(WITH_DMCLOCK_TESTS
703 "enable the build of dmclock-tests and dmclock-data-struct tests binaries"
704 OFF)
705if(WITH_TESTS AND WITH_DMCLOCK_TESTS)
706 # note: add_test is not being called, so dmclock tests aren't part
707 # of ceph tests
11fdf7f2
TL
708 set(dmclock_TEST ON CACHE BOOL "" FORCE)
709endif()
710add_subdirectory(dmclock)
7c673cae 711
11fdf7f2
TL
712add_subdirectory(compressor)
713
714add_subdirectory(tools)
7c673cae
FG
715
716if(WITH_TESTS)
11fdf7f2
TL
717 add_subdirectory(test)
718endif()
7c673cae 719
11fdf7f2 720add_subdirectory(crypto)
7c673cae 721
7c673cae 722if(WITH_TESTS)
11fdf7f2
TL
723 install(PROGRAMS
724 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack
725 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage
726 DESTINATION bin)
727endif()
7c673cae
FG
728
729install(PROGRAMS
730 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph
7c673cae 731 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file
11fdf7f2 732 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash
20effc67
TL
733 ceph-run
734 ceph-clsinfo
7c673cae
FG
735 DESTINATION bin)
736install(PROGRAMS
737 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph
738 DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d
739 RENAME ceph)
740
741install(FILES
742 ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com
743 ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com.pub
744 ${CMAKE_SOURCE_DIR}/share/known_hosts_drop.ceph.com
745 DESTINATION ${CMAKE_INSTALL_DATADIR}/ceph)
746
747install(PROGRAMS
748 ceph_common.sh
749 ceph-osd-prestart.sh
750 DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph)
751
752install(PROGRAMS
20effc67 753 ceph-create-keys
7c673cae
FG
754 DESTINATION sbin)
755
756add_subdirectory(bash_completion)
7c673cae
FG
757add_subdirectory(client)
758
759if(WITH_LIBCEPHFS)
760 set(libcephfs_srcs libcephfs.cc)
761 add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs})
11fdf7f2 762 target_link_libraries(cephfs PRIVATE client ceph-common
7c673cae
FG
763 ${CRYPTO_LIBS} ${EXTRALIBS})
764 if(ENABLE_SHARED)
7c673cae
FG
765 set_target_properties(cephfs PROPERTIES
766 OUTPUT_NAME cephfs
767 VERSION 2.0.0
11fdf7f2
TL
768 SOVERSION 2)
769 if(NOT APPLE)
770 foreach(name ceph-common client osdc)
771 set_property(TARGET cephfs APPEND_STRING PROPERTY
772 LINK_FLAGS " -Wl,--exclude-libs,lib${name}.a")
773 endforeach()
774 endif()
7c673cae
FG
775 endif(ENABLE_SHARED)
776 install(TARGETS cephfs DESTINATION ${CMAKE_INSTALL_LIBDIR})
777 install(DIRECTORY
20effc67 778 "include/cephfs"
c07f9fc5 779 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
7c673cae
FG
780 set(ceph_syn_srcs
781 ceph_syn.cc
782 client/SyntheticClient.cc)
783 add_executable(ceph-syn ${ceph_syn_srcs})
11fdf7f2 784 target_link_libraries(ceph-syn client global-static ceph-common)
7c673cae 785 install(TARGETS ceph-syn DESTINATION bin)
eafe8130
TL
786 if(LINUX)
787 add_subdirectory(mount)
788 endif()
7c673cae
FG
789endif(WITH_LIBCEPHFS)
790
f67539c2
TL
791if(WITH_LIBCEPHSQLITE)
792 set(cephsqlite_srcs libcephsqlite.cc SimpleRADOSStriper.cc)
793 add_library(cephsqlite ${CEPH_SHARED} ${cephsqlite_srcs})
794 target_link_libraries(cephsqlite PRIVATE cls_lock_client librados ceph-common SQLite3::SQLite3 ${EXTRALIBS})
b3b6e05e
TL
795 set_target_properties(cephsqlite PROPERTIES
796 CXX_VISIBILITY_PRESET hidden
797 VISIBILITY_INLINES_HIDDEN ON)
798 if(NOT APPLE AND NOT WIN32)
799 set_property(TARGET cephsqlite APPEND_STRING PROPERTY
800 LINK_FLAGS " -Wl,--exclude-libs,ALL")
801 endif()
f67539c2
TL
802 install(TARGETS cephsqlite DESTINATION ${CMAKE_INSTALL_LIBDIR})
803endif(WITH_LIBCEPHSQLITE)
804
7c673cae
FG
805if(WITH_FUSE)
806 set(ceph_fuse_srcs
807 ceph_fuse.cc
808 client/fuse_ll.cc)
809 add_executable(ceph-fuse ${ceph_fuse_srcs})
1911f103 810 target_link_libraries(ceph-fuse FUSE::FUSE
9f95a23c 811 ${GSSAPI_LIBRARIES} client ceph-common global-static ${EXTRALIBS})
11fdf7f2 812 set_target_properties(ceph-fuse PROPERTIES
11fdf7f2 813 POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE})
7c673cae
FG
814 install(TARGETS ceph-fuse DESTINATION bin)
815 install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR})
816endif(WITH_FUSE)
817
f67539c2
TL
818if(WITH_DOKAN)
819 add_subdirectory(dokan)
820endif(WITH_DOKAN)
821
7c673cae
FG
822add_subdirectory(journal)
823
824if(WITH_RBD)
825 if(WITH_KRBD)
826 add_library(krbd STATIC krbd.cc
827 $<TARGET_OBJECTS:parse_secret_objs>)
11fdf7f2 828 target_link_libraries(krbd keyutils::keyutils)
7c673cae
FG
829 endif()
830 add_subdirectory(librbd)
831 if(WITH_FUSE)
832 add_subdirectory(rbd_fuse)
833 endif()
834
835 install(PROGRAMS
20effc67
TL
836 ceph-rbdnamer
837 rbd-replay-many
838 rbdmap
7c673cae
FG
839 DESTINATION ${CMAKE_INSTALL_BINDIR})
840 add_subdirectory(rbd_replay)
841endif(WITH_RBD)
842
f67539c2
TL
843set(SPAWN_BUILD_TESTS OFF CACHE INTERNAL "disable building of spawn unit tests")
844set(SPAWN_INSTALL OFF CACHE INTERNAL "disable installation of spawn headers")
845add_subdirectory(spawn)
9f95a23c 846
7c673cae
FG
847# RadosGW
848if(WITH_KVS)
849 add_subdirectory(key_value_store)
850endif(WITH_KVS)
851
852if(WITH_RADOSGW)
1d09f67e
TL
853 if(WITH_RADOSGW_SELECT_PARQUET)
854 if(WITH_SYSTEM_ARROW)
855 find_package(Arrow 4 REQUIRED QUIET)
856 find_package(Parquet 4 REQUIRED QUIET)
857 else()
858 # find arrow's dependencies
859 if (WITH_SYSTEM_UTF8PROC)
860 find_package(utf8proc 2.2.0 REQUIRED)
861 else()
862 include(BuildUtf8proc)
863 build_utf8proc()
864 endif()
865 find_package(thrift 0.13 REQUIRED)
866
867 include(BuildArrow)
868 build_arrow()
869 endif()
870 endif()
871
f67539c2 872 add_subdirectory(libkmip)
7c673cae 873 add_subdirectory(rgw)
7c673cae
FG
874endif(WITH_RADOSGW)
875
876install(FILES
877 sample.ceph.conf
878 DESTINATION ${CMAKE_INSTALL_DOCDIR})
7c673cae 879
11fdf7f2 880# Now create a usable config.h
7c673cae
FG
881configure_file(
882 ${CMAKE_SOURCE_DIR}/src/include/config-h.in.cmake
883 ${CMAKE_BINARY_DIR}/include/acconfig.h
884)
885
7c673cae
FG
886# Everything you need to spin up a cluster with vstart.sh
887add_custom_target(vstart-base DEPENDS
888 ceph-osd
889 ceph-mon
7c673cae
FG
890 ceph-authtool
891 ceph-conf
892 monmaptool
893 crushtool
20effc67
TL
894 rados)
895if(NOT WIN32)
896 # WIN32 port does not build python bindings
897 # TODO: introduce an option for enabling python binding
898 add_dependencies(vstart-base
9f95a23c 899 cython_rados)
20effc67
TL
900endif()
901
11fdf7f2
TL
902if (WITH_MGR)
903 add_dependencies(vstart-base ceph-mgr)
904endif()
7c673cae 905
11fdf7f2 906add_custom_target(vstart DEPENDS vstart-base)
20effc67 907if(WITH_RBD AND NOT WIN32)
9f95a23c 908 add_dependencies(vstart cython_rbd)
11fdf7f2
TL
909endif()
910if (WITH_CEPHFS)
9f95a23c 911 add_dependencies(vstart ceph-mds cephfs cython_cephfs)
11fdf7f2 912endif()
7c673cae 913if(WITH_RADOSGW)
9f95a23c
TL
914 add_dependencies(vstart radosgwd radosgw-admin)
915endif()
7c673cae
FG
916
917if(WITH_LTTNG)
918 add_dependencies(vstart tracepoint_libraries)
919endif(WITH_LTTNG)
920
11fdf7f2
TL
921if(WITH_MGR AND WITH_MGR_DASHBOARD_FRONTEND AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
922 add_dependencies(vstart mgr-dashboard-frontend-build)
923endif()
924
925if(WITH_MGR)
926 add_dependencies(vstart ceph-volume-venv-setup)
927endif()
928
7c673cae
FG
929# Everything you need to run CephFS tests
930add_custom_target(cephfs_testing DEPENDS
931 vstart
932 rados
9f95a23c 933 cython_modules
7c673cae
FG
934 cephfs
935 cls_cephfs
936 ceph-fuse
937 ceph-dencoder
20effc67 938 ceph-dencoder-modules
7c673cae 939 cephfs-journal-tool
f67539c2 940 cephfs-meta-injection
7c673cae
FG
941 cephfs-data-scan
942 cephfs-table-tool)
943
944if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git")
945 add_custom_target(
946 git-update
947 COMMAND git submodule sync
948 COMMAND git submodule update --force --init --recursive
949 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
950endif()
951
952add_subdirectory(script)
f67539c2
TL
953
954# add doxygen target
955find_package(Doxygen)
956if(DOXYGEN_FOUND)
957 set(DOXYGEN_FILE_PATTERNS *.cc *.c *.cpp *.C *.cxx *.c++ *.CC *.H *.h *.hh *.hpp)
958 set(DOXYGEN_SOURCE_BROWSER YES)
959 set(DOXYGEN_WARN_IF_UNDOCUMENTED NO)
960 # enabling clang slows down doxygen significantly
961 set(DOXYGEN_CLANG_ASSISTED_PARSING NO)
962 set(DOXYGEN_CLANG_DATABASE_PATH "${PROJECT_BINARY_DIR}")
963 set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
964 set(DOXYGEN_RECURSIVE YES)
965 set(DOXYGEN_QUIET YES)
966 set(DOXYGEN_GENERATE_LATEX NO)
967 set(DOXYGEN_GENERATE_XML NO)
968 set(DOXYGEN_GENERATE_HTML YES)
969 set(DOXYGEN_PROJECT_NAME Ceph)
970 set(DOXYGEN_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build-doc/doxygen")
971 set(DOXYGEN_STRIP_FROM_PATH "src/")
972 set(DOXYGEN_STRIP_FROM_INC_PATH "src/include")
973 set(DOXYGEN_JAVADOC_AUTOBRIEF YES)
974 set(DOXYGEN_HAVE_DOT NO)
975 set(DOXYGEN_VERBATIM_HEADERS YES)
976 doxygen_add_docs(doxygen
977 auth
978 client
979 cls
980 common
981 compressor
982 crimson
983 crush
984 crypto
985 erasure-code
986 global
987 include
988 journal
989 json_spirit
990 key_value_store
991 kv
992 librados
993 libradosstriper
994 librbd
995 log
996 mds
997 messages
998 mgr
999 mon
1000 mount
1001 msg
1002 objclass
1003 objsync
1004 os
1005 osd
1006 osdc
1007 perfglue
1008 rbd_fuse
1009 rbd_replay
1010 rgw
1011 COMMENT "Generate C++ documentation")
1012endif()