]> git.proxmox.com Git - ceph.git/blame - ceph/src/CMakeLists.txt
import ceph quincy 17.2.6
[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
279if (WITH_BLKIN)
280 add_subdirectory(blkin/blkin-lib)
281endif(WITH_BLKIN)
282
7c673cae
FG
283set(mds_files)
284list(APPEND mds_files
285 mds/MDSMap.cc
286 mds/FSMap.cc
287 mds/FSMapUser.cc
288 mds/inode_backtrace.cc
289 mds/mdstypes.cc
f67539c2
TL
290 mds/flock.cc
291 mds/cephfs_features.cc)
7c673cae 292
7c673cae
FG
293add_subdirectory(json_spirit)
294
11fdf7f2 295include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash")
31f18b77 296include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include")
7c673cae 297
522d829b 298option(WITH_FMT_HEADER_ONLY "use header-only version of fmt library" OFF)
f67539c2 299find_package(fmt 6.0.0 QUIET)
9f95a23c
TL
300if(fmt_FOUND)
301 include_directories(SYSTEM "${fmt_INCLUDE_DIR}")
302else()
303 message(STATUS "Could not find fmt, will build it")
522d829b
TL
304 set(old_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
305 set(BUILD_SHARED_LIBS FALSE)
9f95a23c 306 add_subdirectory(fmt)
522d829b
TL
307 set(BUILD_SHARED_LIBS ${old_BUILD_SHARED_LIBS})
308 unset(old_BUILD_SHARED_LIBS)
9f95a23c
TL
309 include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/fmt/include")
310endif()
311
f67539c2
TL
312# in osd/PeeringState.h, the number of elements in PeeringState::Active::reactions
313# is now 21 which exceeds the default value of BOOST_MPL_LIMIT_VECTOR_SIZE, which
314# is 20. so we need to override it. see
315# https://www.boost.org/doc/libs/1_74_0/libs/mpl/doc/refmanual/limit-list-size.html
316# link with this library, if your code includes osd/PeeringState.h (indirectly)
317add_library(Boost::MPL INTERFACE IMPORTED)
318set_target_properties(Boost::MPL PROPERTIES
319 INTERFACE_COMPILE_DEFINITIONS
320 "BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS;BOOST_MPL_LIMIT_LIST_SIZE=30")
321
11fdf7f2 322if(WITH_SEASTAR)
11fdf7f2
TL
323 find_package(c-ares 1.13.0 QUIET)
324 if(NOT c-ares_FOUND)
325 message(STATUS "Could not find c-ares, will build it")
326 include(Buildc-ares)
327 build_c_ares()
328 endif()
329 macro(find_package name)
330 if(NOT TARGET ${name})
331 _find_package(${ARGV})
332 endif()
333 endmacro ()
f67539c2 334 set(Seastar_API_LEVEL "6" CACHE STRING "" FORCE)
11fdf7f2
TL
335 set(Seastar_HWLOC OFF CACHE BOOL "" FORCE)
336 set(Seastar_STD_OPTIONAL_VARIANT_STRINGVIEW ON CACHE BOOL "" FORCE)
9f95a23c
TL
337 if(Seastar_DPDK)
338 find_package(dpdk QUIET)
339 if(NOT DPDK_FOUND)
340 include(BuildDPDK)
341 build_dpdk(${CMAKE_BINARY_DIR}/src/dpdk)
342 endif()
343 endif()
f67539c2
TL
344 list(APPEND Seastar_CXX_FLAGS
345 "-Wno-error"
346 "-Wno-sign-compare"
347 "-Wno-attributes"
348 "-Wno-pessimizing-move"
349 "-Wno-address-of-packed-member"
350 "-Wno-non-virtual-dtor")
351 set(Seastar_CXX_FLAGS "${Seastar_CXX_FLAGS}" CACHE STRING "" FORCE)
11fdf7f2
TL
352 add_subdirectory(seastar)
353 # create the directory so cmake won't complain when looking at the imported
354 # target: Seastar exports this directory created at build-time
355 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen/include")
356 add_subdirectory(crimson)
357endif()
7c673cae 358
20effc67
TL
359include(CheckTypeSize)
360set(CMAKE_EXTRA_INCLUDE_FILES "sys/time.h")
361CHECK_TYPE_SIZE(suseconds_t SUSECONDS_T)
362unset(CMAKE_EXTRA_INCLUDE_FILES)
522d829b 363
7c673cae
FG
364set(libcommon_files
365 ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h
366 ceph_ver.c
9f95a23c 367 global/global_context.cc
7c673cae 368 xxHash/xxhash.c
f67539c2 369 common/error_code.cc
20effc67 370 common/tracer.cc
7c673cae 371 log/Log.cc
7c673cae
FG
372 mon/MonCap.cc
373 mon/MonClient.cc
374 mon/MonMap.cc
11fdf7f2 375 mon/MonSub.cc
f67539c2 376 mon/error_code.cc
7c673cae 377 mgr/MgrClient.cc
31f18b77 378 mon/PGMap.cc
224ce89b 379 mgr/ServiceMap.cc
7c673cae
FG
380 osd/ECMsgTypes.cc
381 osd/HitSet.cc
7c673cae
FG
382 osd/OSDMap.cc
383 osd/OSDMapMapping.cc
7c673cae 384 osd/osd_types.cc
f67539c2 385 osd/error_code.cc
11fdf7f2 386 osd/PGPeeringEvent.cc
7c673cae 387 osd/OpRequest.cc
9f95a23c
TL
388 osd/ClassHandler.cc
389 osd/osd_op_util.cc
7c673cae
FG
390 osdc/Striper.cc
391 osdc/Objecter.cc
f67539c2 392 osdc/error_code.cc
11fdf7f2 393 librbd/Features.cc
20effc67 394 librbd/io/IoOperations.cc
7c673cae 395 ${mds_files})
20effc67 396
11fdf7f2
TL
397set_source_files_properties(ceph_ver.c
398 APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h)
399add_library(common-objs OBJECT ${libcommon_files})
20effc67
TL
400target_compile_definitions(common-objs PRIVATE
401 $<TARGET_PROPERTY:fmt::fmt,INTERFACE_COMPILE_DEFINITIONS>)
402add_dependencies(common-objs legacy-option-headers)
7c673cae 403
f67539c2 404if(WITH_JAEGER)
20effc67
TL
405 find_package(thrift 0.13.0 REQUIRED)
406 include(BuildOpentelemetry)
407 build_opentelemetry()
408 set(jaeger_base opentelemetry::libopentelemetry thrift::libthrift)
409 add_dependencies(common-objs ${jaeger_base})
410 target_link_libraries(common-objs ${jaeger_base})
f67539c2
TL
411endif()
412
3efd9988 413CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA)
11fdf7f2
TL
414add_subdirectory(auth)
415add_subdirectory(common)
416add_subdirectory(crush)
417add_subdirectory(msg)
418add_subdirectory(arch)
7c673cae 419
7c673cae 420set(ceph_common_objs
11fdf7f2
TL
421 $<TARGET_OBJECTS:common-auth-objs>
422 $<TARGET_OBJECTS:common-common-objs>
20effc67 423 $<TARGET_OBJECTS:common-options-objs>
11fdf7f2 424 $<TARGET_OBJECTS:common-msg-objs>
7c673cae
FG
425 $<TARGET_OBJECTS:common_buffer_obj>
426 $<TARGET_OBJECTS:common_texttable_obj>
427 $<TARGET_OBJECTS:compressor_objs>
428 $<TARGET_OBJECTS:common-objs>
429 $<TARGET_OBJECTS:common_mountcephfs_objs>
7c673cae
FG
430 $<TARGET_OBJECTS:crush_objs>)
431set(ceph_common_deps
11fdf7f2
TL
432 json_spirit erasure_code arch crc32
433 ${LIB_RESOLV}
31f18b77
FG
434 Boost::thread
435 Boost::system
31f18b77
FG
436 Boost::random
437 Boost::program_options
438 Boost::date_time
439 Boost::iostreams
9f95a23c
TL
440 StdFilesystem::filesystem
441 fmt::fmt
7c673cae
FG
442 ${BLKID_LIBRARIES}
443 ${Backtrace_LIBRARIES}
444 ${BLKIN_LIBRARIES}
445 ${CRYPTO_LIBS}
11fdf7f2 446 ${GSSAPI_LIBRARIES}
7c673cae
FG
447 ${CMAKE_THREAD_LIBS_INIT}
448 ${CMAKE_DL_LIBS})
11fdf7f2
TL
449if(HAVE_UDEV)
450 list(APPEND ceph_common_deps ${UDEV_LIBRARIES})
451endif()
452
453if(HAVE_VERBS)
454 list(APPEND ceph_common_deps IBVerbs::verbs)
7c673cae 455endif()
11fdf7f2
TL
456
457if(HAVE_RDMACM)
458 list(APPEND ceph_common_deps RDMA::RDMAcm)
459endif()
460
7c673cae
FG
461if(NOT WITH_SYSTEM_BOOST)
462 list(APPEND ceph_common_deps ${ZLIB_LIBRARIES})
463endif()
464
11fdf7f2 465if(HAVE_QATZIP)
1d09f67e 466 list(APPEND ceph_common_deps ${qatzip_LIBRARIES})
11fdf7f2 467endif()
7c673cae 468
11fdf7f2
TL
469if(WITH_DPDK)
470 list(APPEND ceph_common_deps common_async_dpdk)
471endif()
7c673cae 472
f67539c2 473if(WITH_JAEGER)
20effc67 474 list(APPEND ceph_common_deps ${jaeger_base})
f67539c2
TL
475endif()
476
9f95a23c 477if(WIN32)
f67539c2
TL
478 list(APPEND ceph_common_deps ws2_32 mswsock iphlpapi bcrypt)
479 list(APPEND ceph_common_deps dlfcn_win32)
9f95a23c
TL
480endif()
481
482if(WITH_BLUESTORE_PMEM OR WITH_RBD_RWL)
483 if(WITH_SYSTEM_PMDK)
20effc67 484 set(pmem_COMPONENTS)
9f95a23c 485 if(WITH_BLUESTORE_PMEM)
20effc67 486 list(APPEND pmem_COMPONENTS pmem)
9f95a23c
TL
487 endif()
488 if(WITH_RBD_RWL)
20effc67 489 list(APPEND pmem_COMPONENTS pmemobj)
9f95a23c 490 endif()
a4b75251 491 find_package(pmem 1.10 REQUIRED COMPONENTS ${pmem_COMPONENTS})
9f95a23c
TL
492 else()
493 include(Buildpmem)
494 build_pmem()
495 endif()
496endif()
497
7c673cae
FG
498add_library(common STATIC ${ceph_common_objs})
499target_link_libraries(common ${ceph_common_deps})
20effc67 500add_dependencies(common legacy-option-headers ${jaeger_base})
7c673cae
FG
501
502add_library(ceph-common SHARED ${ceph_common_objs})
503target_link_libraries(ceph-common ${ceph_common_deps})
20effc67 504add_dependencies(ceph-common legacy-option-headers ${jaeger_base})
7c673cae
FG
505# appease dpkg-shlibdeps
506set_target_properties(ceph-common PROPERTIES
9f95a23c
TL
507 SOVERSION 2
508 SKIP_RPATH TRUE)
11fdf7f2 509if(NOT APPLE AND NOT FREEBSD)
91327a77
AA
510 # Apple uses Mach-O, not ELF. so this option does not apply to APPLE.
511 #
512 # prefer the local symbol definitions when binding references to global
513 # symbols. otherwise we could reference the symbols defined by the application
514 # with the same name, instead of using the one defined in libceph-common.
515 # in other words, we require libceph-common to use local symbols, even if redefined
516 # in application".
517 set_property(
518 TARGET ceph-common
519 APPEND APPEND_STRING
520 PROPERTY LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions")
521endif()
522
9f95a23c
TL
523if(MINGW)
524 install(
525 TARGETS ceph-common
526 RUNTIME
527 DESTINATION ${CEPH_INSTALL_PKGLIBDIR})
528else()
529 install(
530 TARGETS ceph-common
531 LIBRARY
532 DESTINATION ${CEPH_INSTALL_PKGLIBDIR}
533 NAMELINK_SKIP)
534endif()
7c673cae 535
7c673cae
FG
536if(${WITH_LTTNG})
537 add_subdirectory(tracing)
538 add_dependencies(common-objs oprequest-tp)
539endif(${WITH_LTTNG})
540
541add_subdirectory(global)
542
20effc67
TL
543# RGW also support Lua scripting
544if(WITH_CEPHFS OR WITH_RADOSGW)
f67539c2
TL
545 find_package(Lua 5.3 REQUIRED)
546endif()
7c673cae
FG
547
548# rados object classes
549add_subdirectory(cls)
550
551# RADOS client/library
552add_subdirectory(osdc)
553
11fdf7f2
TL
554# heal_profiler
555add_subdirectory(perfglue)
556
7c673cae
FG
557add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc)
558
11fdf7f2
TL
559option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON)
560
7c673cae
FG
561add_subdirectory(include)
562add_subdirectory(librados)
f67539c2 563add_subdirectory(neorados)
7c673cae 564
11fdf7f2
TL
565if(WITH_LIBRADOSSTRIPER)
566 add_subdirectory(libradosstriper)
567endif()
568
20effc67
TL
569# make rocksdb statically
570
571if(NOT WITH_SYSTEM_ROCKSDB)
572 include(BuildRocksDB)
573 build_rocksdb()
574endif(NOT WITH_SYSTEM_ROCKSDB)
575
576if(WITH_MGR)
577 add_subdirectory(mgr)
2a845540 578 add_subdirectory(exporter)
20effc67 579endif()
7c673cae
FG
580
581set(librados_config_srcs
582 librados-config.cc)
583add_executable(librados-config ${librados_config_srcs})
9f95a23c 584target_link_libraries(librados-config librados Boost::program_options)
7c673cae
FG
585
586install(TARGETS librados-config DESTINATION bin)
587
588# virtualenv base directory for ceph-disk and ceph-detect-init
589set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR})
590if(NOT CEPH_BUILD_VIRTUALENV)
a8e16298 591 set(CEPH_BUILD_VIRTUALENV ${CMAKE_BINARY_DIR})
7c673cae
FG
592endif()
593
f67539c2 594if(NOT WIN32)
7c673cae 595add_subdirectory(pybind)
d2e6a577 596add_subdirectory(ceph-volume)
9f95a23c
TL
597add_subdirectory(python-common)
598add_subdirectory(cephadm)
f67539c2 599endif(NOT WIN32)
7c673cae
FG
600
601# Monitor
7c673cae
FG
602add_subdirectory(mon)
603set(ceph_mon_srcs
604 ceph_mon.cc)
605add_executable(ceph-mon ${ceph_mon_srcs}
606 $<TARGET_OBJECTS:common_texttable_obj>)
607add_dependencies(ceph-mon erasure_code_plugins)
11fdf7f2 608target_link_libraries(ceph-mon mon os global-static ceph-common
39ae355f 609 ${ALLOC_LIBS}
7c673cae 610 ${EXTRALIBS}
39ae355f
TL
611 ${CMAKE_DL_LIBS}
612 ${GSSAPI_LIBRARIES})
7c673cae
FG
613install(TARGETS ceph-mon DESTINATION bin)
614
615# OSD/ObjectStore
7c673cae
FG
616
617include(TestBigEndian)
618test_big_endian(CEPH_BIG_ENDIAN)
619if(NOT CEPH_BIG_ENDIAN)
620 set(CEPH_LITTLE_ENDIAN 1)
621endif()
622
623add_subdirectory(kv)
624add_subdirectory(os)
625
f67539c2
TL
626if(NOT WIN32)
627add_subdirectory(blk)
7c673cae
FG
628add_subdirectory(osd)
629
630set(ceph_osd_srcs
9f95a23c
TL
631 # Link the Object Class API implementation directly as intermediary
632 # static library (like libosd.a) nullifies the effect of `-rdynamic`.
633 osd/objclass.cc
634 objclass/class_api.cc
7c673cae 635 ceph_osd.cc)
20effc67 636
31f18b77 637add_executable(ceph-osd ${ceph_osd_srcs})
7c673cae
FG
638add_dependencies(ceph-osd erasure_code_plugins)
639target_link_libraries(ceph-osd osd os global-static common
39ae355f 640 ${ALLOC_LIBS}
11fdf7f2 641 ${BLKID_LIBRARIES})
7c673cae 642if(WITH_FUSE)
1911f103 643 target_link_libraries(ceph-osd FUSE::FUSE)
7c673cae 644endif()
11fdf7f2 645set_target_properties(ceph-osd PROPERTIES
81eedcae
TL
646 POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE}
647 INSTALL_RPATH "")
7c673cae
FG
648install(TARGETS ceph-osd DESTINATION bin)
649
f67539c2
TL
650endif(NOT WIN32)
651
11fdf7f2
TL
652if (WITH_CEPHFS)
653 add_subdirectory(mds)
654 set(ceph_mds_srcs
655 ceph_mds.cc)
656 add_executable(ceph-mds ${ceph_mds_srcs})
657 target_link_libraries(ceph-mds mds ${CMAKE_DL_LIBS} global-static ceph-common
39ae355f
TL
658 Boost::thread
659 ${ALLOC_LIBS})
11fdf7f2
TL
660 install(TARGETS ceph-mds DESTINATION bin)
661endif()
7c673cae
FG
662
663add_subdirectory(erasure-code)
664
665# Support/Tools
666if(WITH_TESTS)
11fdf7f2
TL
667 option(WITH_SYSTEM_GTEST "require and build with system gtest and gmock" OFF)
668 if(WITH_SYSTEM_GTEST)
669 find_package(GTest REQUIRED)
670 find_package(GMock REQUIRED)
671 else()
9f95a23c
TL
672 set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
673 add_subdirectory(googletest)
11fdf7f2
TL
674 add_library(GMock::GMock ALIAS gmock)
675 add_library(GMock::Main ALIAS gmock_main)
676 target_include_directories(gmock INTERFACE
677 $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>)
678 target_include_directories(gmock_main INTERFACE
679 $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>)
680 add_library(GTest::GTest ALIAS gtest)
681 add_library(GTest::Main ALIAS gtest_main)
682 endif()
7c673cae
FG
683endif(WITH_TESTS)
684
31f18b77 685# dmClock (after gmock)
31f18b77
FG
686option(WITH_DMCLOCK_TESTS
687 "enable the build of dmclock-tests and dmclock-data-struct tests binaries"
688 OFF)
689if(WITH_TESTS AND WITH_DMCLOCK_TESTS)
690 # note: add_test is not being called, so dmclock tests aren't part
691 # of ceph tests
11fdf7f2
TL
692 set(dmclock_TEST ON CACHE BOOL "" FORCE)
693endif()
694add_subdirectory(dmclock)
7c673cae 695
11fdf7f2
TL
696add_subdirectory(compressor)
697
698add_subdirectory(tools)
7c673cae
FG
699
700if(WITH_TESTS)
11fdf7f2
TL
701 add_subdirectory(test)
702endif()
7c673cae 703
11fdf7f2 704add_subdirectory(crypto)
7c673cae 705
7c673cae 706if(WITH_TESTS)
11fdf7f2
TL
707 install(PROGRAMS
708 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack
709 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage
710 DESTINATION bin)
711endif()
7c673cae
FG
712
713install(PROGRAMS
714 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph
7c673cae 715 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file
11fdf7f2 716 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash
20effc67
TL
717 ceph-run
718 ceph-clsinfo
7c673cae
FG
719 DESTINATION bin)
720install(PROGRAMS
721 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph
722 DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d
723 RENAME ceph)
724
725install(FILES
726 ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com
727 ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com.pub
728 ${CMAKE_SOURCE_DIR}/share/known_hosts_drop.ceph.com
729 DESTINATION ${CMAKE_INSTALL_DATADIR}/ceph)
730
731install(PROGRAMS
732 ceph_common.sh
733 ceph-osd-prestart.sh
734 DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph)
735
736install(PROGRAMS
20effc67 737 ceph-create-keys
7c673cae
FG
738 DESTINATION sbin)
739
740add_subdirectory(bash_completion)
7c673cae
FG
741add_subdirectory(client)
742
743if(WITH_LIBCEPHFS)
744 set(libcephfs_srcs libcephfs.cc)
745 add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs})
11fdf7f2 746 target_link_libraries(cephfs PRIVATE client ceph-common
7c673cae
FG
747 ${CRYPTO_LIBS} ${EXTRALIBS})
748 if(ENABLE_SHARED)
7c673cae
FG
749 set_target_properties(cephfs PROPERTIES
750 OUTPUT_NAME cephfs
751 VERSION 2.0.0
11fdf7f2
TL
752 SOVERSION 2)
753 if(NOT APPLE)
754 foreach(name ceph-common client osdc)
755 set_property(TARGET cephfs APPEND_STRING PROPERTY
756 LINK_FLAGS " -Wl,--exclude-libs,lib${name}.a")
757 endforeach()
758 endif()
7c673cae
FG
759 endif(ENABLE_SHARED)
760 install(TARGETS cephfs DESTINATION ${CMAKE_INSTALL_LIBDIR})
761 install(DIRECTORY
20effc67 762 "include/cephfs"
c07f9fc5 763 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
7c673cae
FG
764 set(ceph_syn_srcs
765 ceph_syn.cc
766 client/SyntheticClient.cc)
767 add_executable(ceph-syn ${ceph_syn_srcs})
11fdf7f2 768 target_link_libraries(ceph-syn client global-static ceph-common)
7c673cae 769 install(TARGETS ceph-syn DESTINATION bin)
eafe8130
TL
770 if(LINUX)
771 add_subdirectory(mount)
772 endif()
7c673cae
FG
773endif(WITH_LIBCEPHFS)
774
f67539c2
TL
775if(WITH_LIBCEPHSQLITE)
776 set(cephsqlite_srcs libcephsqlite.cc SimpleRADOSStriper.cc)
777 add_library(cephsqlite ${CEPH_SHARED} ${cephsqlite_srcs})
778 target_link_libraries(cephsqlite PRIVATE cls_lock_client librados ceph-common SQLite3::SQLite3 ${EXTRALIBS})
b3b6e05e
TL
779 set_target_properties(cephsqlite PROPERTIES
780 CXX_VISIBILITY_PRESET hidden
781 VISIBILITY_INLINES_HIDDEN ON)
782 if(NOT APPLE AND NOT WIN32)
783 set_property(TARGET cephsqlite APPEND_STRING PROPERTY
784 LINK_FLAGS " -Wl,--exclude-libs,ALL")
785 endif()
f67539c2
TL
786 install(TARGETS cephsqlite DESTINATION ${CMAKE_INSTALL_LIBDIR})
787endif(WITH_LIBCEPHSQLITE)
788
7c673cae
FG
789if(WITH_FUSE)
790 set(ceph_fuse_srcs
791 ceph_fuse.cc
792 client/fuse_ll.cc)
793 add_executable(ceph-fuse ${ceph_fuse_srcs})
1911f103 794 target_link_libraries(ceph-fuse FUSE::FUSE
9f95a23c 795 ${GSSAPI_LIBRARIES} client ceph-common global-static ${EXTRALIBS})
11fdf7f2 796 set_target_properties(ceph-fuse PROPERTIES
11fdf7f2 797 POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE})
7c673cae
FG
798 install(TARGETS ceph-fuse DESTINATION bin)
799 install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR})
800endif(WITH_FUSE)
801
f67539c2
TL
802if(WITH_DOKAN)
803 add_subdirectory(dokan)
804endif(WITH_DOKAN)
805
7c673cae
FG
806add_subdirectory(journal)
807
808if(WITH_RBD)
809 if(WITH_KRBD)
810 add_library(krbd STATIC krbd.cc
811 $<TARGET_OBJECTS:parse_secret_objs>)
11fdf7f2 812 target_link_libraries(krbd keyutils::keyutils)
7c673cae
FG
813 endif()
814 add_subdirectory(librbd)
815 if(WITH_FUSE)
816 add_subdirectory(rbd_fuse)
817 endif()
818
819 install(PROGRAMS
20effc67
TL
820 ceph-rbdnamer
821 rbd-replay-many
822 rbdmap
7c673cae
FG
823 DESTINATION ${CMAKE_INSTALL_BINDIR})
824 add_subdirectory(rbd_replay)
825endif(WITH_RBD)
826
f67539c2
TL
827set(SPAWN_BUILD_TESTS OFF CACHE INTERNAL "disable building of spawn unit tests")
828set(SPAWN_INSTALL OFF CACHE INTERNAL "disable installation of spawn headers")
829add_subdirectory(spawn)
9f95a23c 830
7c673cae
FG
831# RadosGW
832if(WITH_KVS)
833 add_subdirectory(key_value_store)
834endif(WITH_KVS)
835
836if(WITH_RADOSGW)
1d09f67e
TL
837 if(WITH_RADOSGW_SELECT_PARQUET)
838 if(WITH_SYSTEM_ARROW)
839 find_package(Arrow 4 REQUIRED QUIET)
840 find_package(Parquet 4 REQUIRED QUIET)
841 else()
842 # find arrow's dependencies
843 if (WITH_SYSTEM_UTF8PROC)
844 find_package(utf8proc 2.2.0 REQUIRED)
845 else()
846 include(BuildUtf8proc)
847 build_utf8proc()
848 endif()
849 find_package(thrift 0.13 REQUIRED)
850
851 include(BuildArrow)
852 build_arrow()
853 endif()
854 endif()
855
f67539c2 856 add_subdirectory(libkmip)
7c673cae 857 add_subdirectory(rgw)
7c673cae
FG
858endif(WITH_RADOSGW)
859
860install(FILES
861 sample.ceph.conf
862 DESTINATION ${CMAKE_INSTALL_DOCDIR})
7c673cae 863
11fdf7f2 864# Now create a usable config.h
7c673cae
FG
865configure_file(
866 ${CMAKE_SOURCE_DIR}/src/include/config-h.in.cmake
867 ${CMAKE_BINARY_DIR}/include/acconfig.h
868)
869
7c673cae
FG
870# Everything you need to spin up a cluster with vstart.sh
871add_custom_target(vstart-base DEPENDS
872 ceph-osd
873 ceph-mon
7c673cae
FG
874 ceph-authtool
875 ceph-conf
2a845540 876 ceph-exporter
7c673cae
FG
877 monmaptool
878 crushtool
20effc67
TL
879 rados)
880if(NOT WIN32)
881 # WIN32 port does not build python bindings
882 # TODO: introduce an option for enabling python binding
883 add_dependencies(vstart-base
9f95a23c 884 cython_rados)
20effc67
TL
885endif()
886
11fdf7f2
TL
887if (WITH_MGR)
888 add_dependencies(vstart-base ceph-mgr)
2a845540 889 add_dependencies(vstart-base ceph-exporter)
11fdf7f2 890endif()
7c673cae 891
11fdf7f2 892add_custom_target(vstart DEPENDS vstart-base)
20effc67 893if(WITH_RBD AND NOT WIN32)
9f95a23c 894 add_dependencies(vstart cython_rbd)
11fdf7f2
TL
895endif()
896if (WITH_CEPHFS)
9f95a23c 897 add_dependencies(vstart ceph-mds cephfs cython_cephfs)
11fdf7f2 898endif()
7c673cae 899if(WITH_RADOSGW)
9f95a23c
TL
900 add_dependencies(vstart radosgwd radosgw-admin)
901endif()
7c673cae
FG
902
903if(WITH_LTTNG)
904 add_dependencies(vstart tracepoint_libraries)
905endif(WITH_LTTNG)
906
11fdf7f2
TL
907if(WITH_MGR AND WITH_MGR_DASHBOARD_FRONTEND AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
908 add_dependencies(vstart mgr-dashboard-frontend-build)
909endif()
910
911if(WITH_MGR)
912 add_dependencies(vstart ceph-volume-venv-setup)
913endif()
914
7c673cae
FG
915# Everything you need to run CephFS tests
916add_custom_target(cephfs_testing DEPENDS
917 vstart
918 rados
9f95a23c 919 cython_modules
7c673cae
FG
920 cephfs
921 cls_cephfs
922 ceph-fuse
923 ceph-dencoder
20effc67 924 ceph-dencoder-modules
7c673cae 925 cephfs-journal-tool
f67539c2 926 cephfs-meta-injection
7c673cae
FG
927 cephfs-data-scan
928 cephfs-table-tool)
929
930if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git")
931 add_custom_target(
932 git-update
933 COMMAND git submodule sync
934 COMMAND git submodule update --force --init --recursive
935 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
936endif()
937
938add_subdirectory(script)
f67539c2
TL
939
940# add doxygen target
941find_package(Doxygen)
942if(DOXYGEN_FOUND)
943 set(DOXYGEN_FILE_PATTERNS *.cc *.c *.cpp *.C *.cxx *.c++ *.CC *.H *.h *.hh *.hpp)
944 set(DOXYGEN_SOURCE_BROWSER YES)
945 set(DOXYGEN_WARN_IF_UNDOCUMENTED NO)
946 # enabling clang slows down doxygen significantly
947 set(DOXYGEN_CLANG_ASSISTED_PARSING NO)
948 set(DOXYGEN_CLANG_DATABASE_PATH "${PROJECT_BINARY_DIR}")
949 set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
950 set(DOXYGEN_RECURSIVE YES)
951 set(DOXYGEN_QUIET YES)
952 set(DOXYGEN_GENERATE_LATEX NO)
953 set(DOXYGEN_GENERATE_XML NO)
954 set(DOXYGEN_GENERATE_HTML YES)
955 set(DOXYGEN_PROJECT_NAME Ceph)
956 set(DOXYGEN_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build-doc/doxygen")
957 set(DOXYGEN_STRIP_FROM_PATH "src/")
958 set(DOXYGEN_STRIP_FROM_INC_PATH "src/include")
959 set(DOXYGEN_JAVADOC_AUTOBRIEF YES)
960 set(DOXYGEN_HAVE_DOT NO)
961 set(DOXYGEN_VERBATIM_HEADERS YES)
962 doxygen_add_docs(doxygen
963 auth
964 client
965 cls
966 common
967 compressor
968 crimson
969 crush
970 crypto
971 erasure-code
972 global
973 include
974 journal
975 json_spirit
976 key_value_store
977 kv
978 librados
979 libradosstriper
980 librbd
981 log
982 mds
983 messages
984 mgr
985 mon
986 mount
987 msg
988 objclass
989 objsync
990 os
991 osd
992 osdc
993 perfglue
994 rbd_fuse
995 rbd_replay
996 rgw
997 COMMENT "Generate C++ documentation")
998endif()