]>
Commit | Line | Data |
---|---|---|
7c673cae | 1 | include(GetGitRevisionDescription) |
9f95a23c | 2 | include(CheckCXXCompilerFlag) |
7c673cae | 3 | |
7c673cae | 4 | # for erasure and compressor plugins |
11fdf7f2 TL |
5 | set(CEPH_INSTALL_PKGLIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) |
6 | set(CEPH_INSTALL_FULL_PKGLIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME}) | |
7 | # for mgr plugins | |
8 | set(CEPH_INSTALL_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}) | |
7c673cae FG |
9 | # so libceph-common can be found |
10 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) | |
11 | if(NOT CMAKE_INSTALL_RPATH) | |
11fdf7f2 | 12 | set(CMAKE_INSTALL_RPATH "${CEPH_INSTALL_FULL_PKGLIBDIR}") |
7c673cae FG |
13 | endif() |
14 | ||
15 | # to be compatible with configure_files shared with autoconfig | |
16 | set(bindir ${CMAKE_INSTALL_FULL_BINDIR}) | |
17 | set(sbindir ${CMAKE_INSTALL_FULL_SBINDIR}) | |
18 | set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) | |
19 | set(sysconfdir ${CMAKE_INSTALL_FULL_SYSCONFDIR}) | |
20 | set(libexecdir ${CMAKE_INSTALL_FULL_LIBEXECDIR}) | |
21 | set(pkgdatadir ${CMAKE_INSTALL_FULL_DATADIR}) | |
11fdf7f2 | 22 | set(datadir ${CEPH_INSTALL_DATADIR}) |
7c673cae FG |
23 | set(prefix ${CMAKE_INSTALL_PREFIX}) |
24 | ||
20effc67 TL |
25 | configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in |
26 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) | |
27 | ||
28 | configure_file(ceph-post-file.in | |
29 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) | |
30 | ||
31 | configure_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 | |
36 | option(ENABLE_GIT_VERSION "build Ceph with git version string" ON) | |
37 | if(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") | |
49 | else(ENABLE_GIT_VERSION) | |
50 | set(CEPH_GIT_VER "no_version") | |
51 | set(CEPH_GIT_NICE_VER "Development") | |
52 | endif(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. | |
60 | file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE) | |
61 | list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE) | |
62 | list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME) | |
63 | list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE) | |
64 | ||
65 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in | |
66 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) | |
67 | ||
68 | # Common infrastructure | |
69 | configure_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 |
74 | add_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) | |
82 | if(Boost_VERSION VERSION_GREATER_EQUAL 1.74) | |
83 | add_definitions(-DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) | |
84 | endif() | |
85 | ||
7c673cae FG |
86 | if(LINUX) |
87 | add_definitions("-D_GNU_SOURCE") | |
88 | endif() | |
89 | ||
f67539c2 TL |
90 | add_compile_options( |
91 | -Wall | |
92 | -fno-strict-aliasing | |
93 | -fsigned-char) | |
9f95a23c TL |
94 | |
95 | if(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 | 105 | endif() |
7c673cae | 106 | |
f67539c2 | 107 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-ftemplate-depth-1024>) |
9f95a23c TL |
108 | |
109 | CHECK_CXX_COMPILER_FLAG("-Wpessimizing-move" COMPILER_SUPPORTS_PESSIMIZING_MOVE) | |
110 | if(COMPILER_SUPPORTS_PESSIMIZING_MOVE) | |
f67539c2 | 111 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wpessimizing-move>) |
9f95a23c TL |
112 | endif() |
113 | CHECK_CXX_COMPILER_FLAG("-Wredundant-move" COMPILER_SUPPORTS_REDUNDANT_MOVE) | |
114 | if(COMPILER_SUPPORTS_REDUNDANT_MOVE) | |
f67539c2 | 115 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wredundant-move>) |
9f95a23c | 116 | endif() |
7c673cae | 117 | if(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 | 135 | elseif(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 | 159 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) |
7c673cae | 160 | |
20effc67 | 161 | if(WITH_CEPH_DEBUG_MUTEX) |
f67539c2 | 162 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-DCEPH_DEBUG_MUTEX>) |
7c673cae FG |
163 | endif() |
164 | ||
165 | include(CheckCCompilerFlag) | |
166 | if(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 |
181 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) |
182 | ||
9f95a23c TL |
183 | CHECK_C_COMPILER_FLAG("-D_GLIBCXX_ASSERTIONS" HAS_GLIBCXX_ASSERTIONS) |
184 | if(HAS_GLIBCXX_ASSERTIONS AND CMAKE_BUILD_TYPE STREQUAL Debug) | |
f67539c2 | 185 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-D_GLIBCXX_ASSERTIONS>) |
9f95a23c TL |
186 | endif() |
187 | ||
7c673cae FG |
188 | include(SIMDExt) |
189 | if(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 |
206 | endif() |
207 | ||
11fdf7f2 | 208 | # require c++17 |
9f95a23c TL |
209 | set(CMAKE_CXX_STANDARD 17) |
210 | set(CMAKE_CXX_EXTENSIONS OFF) | |
211 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
212 | set(CMAKE_C_STANDARD 99) | |
213 | # we use `asm()` to inline assembly, so enable the GNU extension | |
214 | set(CMAKE_C_EXTENSIONS ON) | |
215 | set(C_STANDARD_REQUIRED ON) | |
7c673cae | 216 | |
11fdf7f2 TL |
217 | include(CheckCXXSourceCompiles) |
218 | CHECK_CXX_SOURCE_COMPILES(" | |
219 | #include <map> | |
220 | using Map = std::map<int, int>; | |
221 | int 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. |
228 | CHECK_C_COMPILER_FLAG("-fdiagnostics-color=always" | |
229 | COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) | |
230 | ||
231 | set(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 | ||
234 | if(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 |
238 | endif() |
239 | ||
11fdf7f2 | 240 | set(EXTRALIBS ${CMAKE_DL_LIBS}) |
9f95a23c TL |
241 | if(HAVE_POSIX_TIMERS) |
242 | list(APPEND EXTRALIBS ${RT_LIBRARY}) | |
11fdf7f2 TL |
243 | endif() |
244 | if(LINUX OR APPLE) | |
7c673cae FG |
245 | set(LIB_RESOLV resolv) |
246 | list(APPEND EXTRALIBS ${LIB_RESOLV}) | |
11fdf7f2 | 247 | endif() |
7c673cae FG |
248 | |
249 | if(${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) |
259 | endif(${ENABLE_COVERAGE}) | |
260 | ||
20effc67 TL |
261 | if(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) | |
267 | endif() | |
31f18b77 | 268 | |
7c673cae FG |
269 | option(WITH_OCF "build OCF-compliant cluster resource agent" OFF) |
270 | if(WITH_OCF) | |
271 | add_subdirectory(ocf) | |
272 | endif() | |
273 | ||
274 | option(WITH_CEPHFS_JAVA "build libcephfs Java bindings" OFF) | |
275 | if(WITH_CEPHFS_JAVA) | |
276 | add_subdirectory(java) | |
277 | endif() | |
278 | ||
7c673cae FG |
279 | if (WITH_BLKIN) |
280 | add_subdirectory(blkin/blkin-lib) | |
281 | endif(WITH_BLKIN) | |
282 | ||
7c673cae FG |
283 | set(mds_files) |
284 | list(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 |
293 | add_subdirectory(json_spirit) |
294 | ||
11fdf7f2 | 295 | include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash") |
31f18b77 | 296 | include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include") |
7c673cae | 297 | |
522d829b | 298 | option(WITH_FMT_HEADER_ONLY "use header-only version of fmt library" OFF) |
f67539c2 | 299 | find_package(fmt 6.0.0 QUIET) |
9f95a23c TL |
300 | if(fmt_FOUND) |
301 | include_directories(SYSTEM "${fmt_INCLUDE_DIR}") | |
302 | else() | |
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") |
310 | endif() | |
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) | |
317 | add_library(Boost::MPL INTERFACE IMPORTED) | |
318 | set_target_properties(Boost::MPL PROPERTIES | |
319 | INTERFACE_COMPILE_DEFINITIONS | |
320 | "BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS;BOOST_MPL_LIMIT_LIST_SIZE=30") | |
321 | ||
11fdf7f2 | 322 | if(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) | |
357 | endif() | |
7c673cae | 358 | |
20effc67 TL |
359 | include(CheckTypeSize) |
360 | set(CMAKE_EXTRA_INCLUDE_FILES "sys/time.h") | |
361 | CHECK_TYPE_SIZE(suseconds_t SUSECONDS_T) | |
362 | unset(CMAKE_EXTRA_INCLUDE_FILES) | |
522d829b | 363 | |
7c673cae FG |
364 | set(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 |
397 | set_source_files_properties(ceph_ver.c |
398 | APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h) | |
399 | add_library(common-objs OBJECT ${libcommon_files}) | |
20effc67 TL |
400 | target_compile_definitions(common-objs PRIVATE |
401 | $<TARGET_PROPERTY:fmt::fmt,INTERFACE_COMPILE_DEFINITIONS>) | |
402 | add_dependencies(common-objs legacy-option-headers) | |
7c673cae | 403 | |
f67539c2 | 404 | if(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 |
411 | endif() |
412 | ||
3efd9988 | 413 | CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA) |
11fdf7f2 TL |
414 | add_subdirectory(auth) |
415 | add_subdirectory(common) | |
416 | add_subdirectory(crush) | |
417 | add_subdirectory(msg) | |
418 | add_subdirectory(arch) | |
7c673cae | 419 | |
7c673cae | 420 | set(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>) |
431 | set(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 |
449 | if(HAVE_UDEV) |
450 | list(APPEND ceph_common_deps ${UDEV_LIBRARIES}) | |
451 | endif() | |
452 | ||
453 | if(HAVE_VERBS) | |
454 | list(APPEND ceph_common_deps IBVerbs::verbs) | |
7c673cae | 455 | endif() |
11fdf7f2 TL |
456 | |
457 | if(HAVE_RDMACM) | |
458 | list(APPEND ceph_common_deps RDMA::RDMAcm) | |
459 | endif() | |
460 | ||
7c673cae FG |
461 | if(NOT WITH_SYSTEM_BOOST) |
462 | list(APPEND ceph_common_deps ${ZLIB_LIBRARIES}) | |
463 | endif() | |
464 | ||
11fdf7f2 | 465 | if(HAVE_QATZIP) |
1d09f67e | 466 | list(APPEND ceph_common_deps ${qatzip_LIBRARIES}) |
11fdf7f2 | 467 | endif() |
7c673cae | 468 | |
11fdf7f2 TL |
469 | if(WITH_DPDK) |
470 | list(APPEND ceph_common_deps common_async_dpdk) | |
471 | endif() | |
7c673cae | 472 | |
f67539c2 | 473 | if(WITH_JAEGER) |
20effc67 | 474 | list(APPEND ceph_common_deps ${jaeger_base}) |
f67539c2 TL |
475 | endif() |
476 | ||
9f95a23c | 477 | if(WIN32) |
f67539c2 TL |
478 | list(APPEND ceph_common_deps ws2_32 mswsock iphlpapi bcrypt) |
479 | list(APPEND ceph_common_deps dlfcn_win32) | |
9f95a23c TL |
480 | endif() |
481 | ||
482 | if(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() | |
496 | endif() | |
497 | ||
7c673cae FG |
498 | add_library(common STATIC ${ceph_common_objs}) |
499 | target_link_libraries(common ${ceph_common_deps}) | |
20effc67 | 500 | add_dependencies(common legacy-option-headers ${jaeger_base}) |
7c673cae FG |
501 | |
502 | add_library(ceph-common SHARED ${ceph_common_objs}) | |
503 | target_link_libraries(ceph-common ${ceph_common_deps}) | |
20effc67 | 504 | add_dependencies(ceph-common legacy-option-headers ${jaeger_base}) |
7c673cae FG |
505 | # appease dpkg-shlibdeps |
506 | set_target_properties(ceph-common PROPERTIES | |
9f95a23c TL |
507 | SOVERSION 2 |
508 | SKIP_RPATH TRUE) | |
11fdf7f2 | 509 | if(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") | |
521 | endif() | |
522 | ||
9f95a23c TL |
523 | if(MINGW) |
524 | install( | |
525 | TARGETS ceph-common | |
526 | RUNTIME | |
527 | DESTINATION ${CEPH_INSTALL_PKGLIBDIR}) | |
528 | else() | |
529 | install( | |
530 | TARGETS ceph-common | |
531 | LIBRARY | |
532 | DESTINATION ${CEPH_INSTALL_PKGLIBDIR} | |
533 | NAMELINK_SKIP) | |
534 | endif() | |
7c673cae | 535 | |
7c673cae FG |
536 | if(${WITH_LTTNG}) |
537 | add_subdirectory(tracing) | |
538 | add_dependencies(common-objs oprequest-tp) | |
539 | endif(${WITH_LTTNG}) | |
540 | ||
541 | add_subdirectory(global) | |
542 | ||
20effc67 TL |
543 | # RGW also support Lua scripting |
544 | if(WITH_CEPHFS OR WITH_RADOSGW) | |
f67539c2 TL |
545 | find_package(Lua 5.3 REQUIRED) |
546 | endif() | |
7c673cae FG |
547 | |
548 | # rados object classes | |
549 | add_subdirectory(cls) | |
550 | ||
551 | # RADOS client/library | |
552 | add_subdirectory(osdc) | |
553 | ||
11fdf7f2 TL |
554 | # heal_profiler |
555 | add_subdirectory(perfglue) | |
556 | ||
7c673cae FG |
557 | add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc) |
558 | ||
11fdf7f2 TL |
559 | option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON) |
560 | ||
7c673cae FG |
561 | add_subdirectory(include) |
562 | add_subdirectory(librados) | |
f67539c2 | 563 | add_subdirectory(neorados) |
7c673cae | 564 | |
11fdf7f2 TL |
565 | if(WITH_LIBRADOSSTRIPER) |
566 | add_subdirectory(libradosstriper) | |
567 | endif() | |
568 | ||
20effc67 TL |
569 | # make rocksdb statically |
570 | ||
571 | if(NOT WITH_SYSTEM_ROCKSDB) | |
572 | include(BuildRocksDB) | |
573 | build_rocksdb() | |
574 | endif(NOT WITH_SYSTEM_ROCKSDB) | |
575 | ||
576 | if(WITH_MGR) | |
577 | add_subdirectory(mgr) | |
2a845540 | 578 | add_subdirectory(exporter) |
20effc67 | 579 | endif() |
7c673cae FG |
580 | |
581 | set(librados_config_srcs | |
582 | librados-config.cc) | |
583 | add_executable(librados-config ${librados_config_srcs}) | |
9f95a23c | 584 | target_link_libraries(librados-config librados Boost::program_options) |
7c673cae FG |
585 | |
586 | install(TARGETS librados-config DESTINATION bin) | |
587 | ||
588 | # virtualenv base directory for ceph-disk and ceph-detect-init | |
589 | set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR}) | |
590 | if(NOT CEPH_BUILD_VIRTUALENV) | |
a8e16298 | 591 | set(CEPH_BUILD_VIRTUALENV ${CMAKE_BINARY_DIR}) |
7c673cae FG |
592 | endif() |
593 | ||
f67539c2 | 594 | if(NOT WIN32) |
7c673cae | 595 | add_subdirectory(pybind) |
d2e6a577 | 596 | add_subdirectory(ceph-volume) |
9f95a23c TL |
597 | add_subdirectory(python-common) |
598 | add_subdirectory(cephadm) | |
f67539c2 | 599 | endif(NOT WIN32) |
7c673cae FG |
600 | |
601 | # Monitor | |
7c673cae FG |
602 | add_subdirectory(mon) |
603 | set(ceph_mon_srcs | |
604 | ceph_mon.cc) | |
605 | add_executable(ceph-mon ${ceph_mon_srcs} | |
606 | $<TARGET_OBJECTS:common_texttable_obj>) | |
607 | add_dependencies(ceph-mon erasure_code_plugins) | |
11fdf7f2 | 608 | target_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 |
613 | install(TARGETS ceph-mon DESTINATION bin) |
614 | ||
615 | # OSD/ObjectStore | |
7c673cae FG |
616 | |
617 | include(TestBigEndian) | |
618 | test_big_endian(CEPH_BIG_ENDIAN) | |
619 | if(NOT CEPH_BIG_ENDIAN) | |
620 | set(CEPH_LITTLE_ENDIAN 1) | |
621 | endif() | |
622 | ||
623 | add_subdirectory(kv) | |
624 | add_subdirectory(os) | |
625 | ||
f67539c2 TL |
626 | if(NOT WIN32) |
627 | add_subdirectory(blk) | |
7c673cae FG |
628 | add_subdirectory(osd) |
629 | ||
630 | set(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 | 637 | add_executable(ceph-osd ${ceph_osd_srcs}) |
7c673cae FG |
638 | add_dependencies(ceph-osd erasure_code_plugins) |
639 | target_link_libraries(ceph-osd osd os global-static common | |
39ae355f | 640 | ${ALLOC_LIBS} |
11fdf7f2 | 641 | ${BLKID_LIBRARIES}) |
7c673cae | 642 | if(WITH_FUSE) |
1911f103 | 643 | target_link_libraries(ceph-osd FUSE::FUSE) |
7c673cae | 644 | endif() |
11fdf7f2 | 645 | set_target_properties(ceph-osd PROPERTIES |
81eedcae TL |
646 | POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE} |
647 | INSTALL_RPATH "") | |
7c673cae FG |
648 | install(TARGETS ceph-osd DESTINATION bin) |
649 | ||
f67539c2 TL |
650 | endif(NOT WIN32) |
651 | ||
11fdf7f2 TL |
652 | if (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) |
661 | endif() | |
7c673cae FG |
662 | |
663 | add_subdirectory(erasure-code) | |
664 | ||
665 | # Support/Tools | |
666 | if(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 |
683 | endif(WITH_TESTS) |
684 | ||
31f18b77 | 685 | # dmClock (after gmock) |
31f18b77 FG |
686 | option(WITH_DMCLOCK_TESTS |
687 | "enable the build of dmclock-tests and dmclock-data-struct tests binaries" | |
688 | OFF) | |
689 | if(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) |
693 | endif() | |
694 | add_subdirectory(dmclock) | |
7c673cae | 695 | |
11fdf7f2 TL |
696 | add_subdirectory(compressor) |
697 | ||
698 | add_subdirectory(tools) | |
7c673cae FG |
699 | |
700 | if(WITH_TESTS) | |
11fdf7f2 TL |
701 | add_subdirectory(test) |
702 | endif() | |
7c673cae | 703 | |
11fdf7f2 | 704 | add_subdirectory(crypto) |
7c673cae | 705 | |
7c673cae | 706 | if(WITH_TESTS) |
11fdf7f2 TL |
707 | install(PROGRAMS |
708 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack | |
709 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage | |
710 | DESTINATION bin) | |
711 | endif() | |
7c673cae FG |
712 | |
713 | install(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) |
720 | install(PROGRAMS | |
721 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph | |
722 | DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d | |
723 | RENAME ceph) | |
724 | ||
725 | install(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 | ||
731 | install(PROGRAMS | |
732 | ceph_common.sh | |
733 | ceph-osd-prestart.sh | |
734 | DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph) | |
735 | ||
736 | install(PROGRAMS | |
20effc67 | 737 | ceph-create-keys |
7c673cae FG |
738 | DESTINATION sbin) |
739 | ||
740 | add_subdirectory(bash_completion) | |
7c673cae FG |
741 | add_subdirectory(client) |
742 | ||
743 | if(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 |
773 | endif(WITH_LIBCEPHFS) |
774 | ||
f67539c2 TL |
775 | if(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}) |
787 | endif(WITH_LIBCEPHSQLITE) | |
788 | ||
7c673cae FG |
789 | if(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}) | |
800 | endif(WITH_FUSE) | |
801 | ||
f67539c2 TL |
802 | if(WITH_DOKAN) |
803 | add_subdirectory(dokan) | |
804 | endif(WITH_DOKAN) | |
805 | ||
7c673cae FG |
806 | add_subdirectory(journal) |
807 | ||
808 | if(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) | |
825 | endif(WITH_RBD) | |
826 | ||
f67539c2 TL |
827 | set(SPAWN_BUILD_TESTS OFF CACHE INTERNAL "disable building of spawn unit tests") |
828 | set(SPAWN_INSTALL OFF CACHE INTERNAL "disable installation of spawn headers") | |
829 | add_subdirectory(spawn) | |
9f95a23c | 830 | |
7c673cae FG |
831 | # RadosGW |
832 | if(WITH_KVS) | |
833 | add_subdirectory(key_value_store) | |
834 | endif(WITH_KVS) | |
835 | ||
836 | if(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 |
858 | endif(WITH_RADOSGW) |
859 | ||
860 | install(FILES | |
861 | sample.ceph.conf | |
862 | DESTINATION ${CMAKE_INSTALL_DOCDIR}) | |
7c673cae | 863 | |
11fdf7f2 | 864 | # Now create a usable config.h |
7c673cae FG |
865 | configure_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 |
871 | add_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) |
880 | if(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 |
885 | endif() |
886 | ||
11fdf7f2 TL |
887 | if (WITH_MGR) |
888 | add_dependencies(vstart-base ceph-mgr) | |
2a845540 | 889 | add_dependencies(vstart-base ceph-exporter) |
11fdf7f2 | 890 | endif() |
7c673cae | 891 | |
11fdf7f2 | 892 | add_custom_target(vstart DEPENDS vstart-base) |
20effc67 | 893 | if(WITH_RBD AND NOT WIN32) |
9f95a23c | 894 | add_dependencies(vstart cython_rbd) |
11fdf7f2 TL |
895 | endif() |
896 | if (WITH_CEPHFS) | |
9f95a23c | 897 | add_dependencies(vstart ceph-mds cephfs cython_cephfs) |
11fdf7f2 | 898 | endif() |
7c673cae | 899 | if(WITH_RADOSGW) |
9f95a23c TL |
900 | add_dependencies(vstart radosgwd radosgw-admin) |
901 | endif() | |
7c673cae FG |
902 | |
903 | if(WITH_LTTNG) | |
904 | add_dependencies(vstart tracepoint_libraries) | |
905 | endif(WITH_LTTNG) | |
906 | ||
11fdf7f2 TL |
907 | if(WITH_MGR AND WITH_MGR_DASHBOARD_FRONTEND AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64") |
908 | add_dependencies(vstart mgr-dashboard-frontend-build) | |
909 | endif() | |
910 | ||
911 | if(WITH_MGR) | |
912 | add_dependencies(vstart ceph-volume-venv-setup) | |
913 | endif() | |
914 | ||
7c673cae FG |
915 | # Everything you need to run CephFS tests |
916 | add_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 | ||
930 | if (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}") | |
936 | endif() | |
937 | ||
938 | add_subdirectory(script) | |
f67539c2 TL |
939 | |
940 | # add doxygen target | |
941 | find_package(Doxygen) | |
942 | if(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") | |
998 | endif() |