]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | include(GetGitRevisionDescription) |
2 | ||
3 | enable_language(C ASM) | |
4 | include(GNUInstallDirs) | |
5 | # for erasure and compressor plugins | |
6 | set(CMAKE_INSTALL_PKGLIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}) | |
7 | set(CMAKE_INSTALL_FULL_PKGLIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME}) | |
8 | # so libceph-common can be found | |
9 | set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) | |
10 | if(NOT CMAKE_INSTALL_RPATH) | |
11 | set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_PKGLIBDIR}") | |
12 | endif() | |
13 | ||
14 | # to be compatible with configure_files shared with autoconfig | |
15 | set(bindir ${CMAKE_INSTALL_FULL_BINDIR}) | |
16 | set(sbindir ${CMAKE_INSTALL_FULL_SBINDIR}) | |
17 | set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) | |
18 | set(sysconfdir ${CMAKE_INSTALL_FULL_SYSCONFDIR}) | |
19 | set(libexecdir ${CMAKE_INSTALL_FULL_LIBEXECDIR}) | |
20 | set(pkgdatadir ${CMAKE_INSTALL_FULL_DATADIR}) | |
21 | set(datadir ${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}) | |
22 | set(prefix ${CMAKE_INSTALL_PREFIX}) | |
23 | ||
24 | add_definitions("-DCEPH_LIBDIR=\"${CMAKE_INSTALL_FULL_LIBDIR}\"") | |
25 | add_definitions("-DCEPH_PKGLIBDIR=\"${CMAKE_INSTALL_FULL_PKGLIBDIR}\"") | |
26 | add_definitions("-DHAVE_CONFIG_H -D__CEPH__ -D_REENTRANT -D_THREAD_SAFE -D__STDC_FORMAT_MACROS") | |
27 | add_definitions("-D_FILE_OFFSET_BITS=64") | |
28 | if(LINUX) | |
29 | add_definitions("-D_GNU_SOURCE") | |
30 | endif() | |
31 | ||
32 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wtype-limits -Wignored-qualifiers -Winit-self") | |
33 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Werror=format-security -fno-strict-aliasing -fsigned-char") | |
34 | ||
35 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-1024 -Wno-invalid-offsetof") | |
36 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor") | |
37 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas") | |
38 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas") | |
39 | if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
40 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic") | |
41 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-null-sentinel -Woverloaded-virtual") | |
31f18b77 FG |
42 | if(NOT WITH_OSD_INSTRUMENT_FUNCTIONS) |
43 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") | |
44 | endif() | |
7c673cae FG |
45 | elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) |
46 | set(CMAKE_EXE_LINKER_FLAGS "-Wl,-export-dynamic") | |
47 | set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -rdynamic -Wl,-export-dynamic -export-dynamic") | |
48 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override -Wno-mismatched-tags") | |
49 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field") | |
50 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") | |
51 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-local-typedef") | |
52 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-varargs") | |
53 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-designator") | |
54 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-deprecated-register") | |
55 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
56 | set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") | |
57 | ||
58 | if(NOT CMAKE_BUILD_TYPE) | |
d2e6a577 | 59 | set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Default BUILD_TYPE is RelWithDebInfo, other options are: Debug, Release, and MinSizeRel." FORCE) |
7c673cae FG |
60 | endif() |
61 | ||
62 | if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) | |
63 | # we use assert(3) for testing, so scrub the -DNDEBUG defined by default | |
64 | string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_upper) | |
65 | foreach(flags | |
66 | CMAKE_CXX_FLAGS_${build_type_upper} | |
67 | CMAKE_C_FLAGS_${build_type_upper}) | |
68 | string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " "${flags}" "${${flags}}") | |
69 | endforeach() | |
70 | endif() | |
71 | ||
72 | include(CheckCCompilerFlag) | |
73 | if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
31f18b77 | 74 | CHECK_C_COMPILER_FLAG("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2" HAS_FORTIFY_SOURCE) |
7c673cae FG |
75 | if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) |
76 | if(HAS_FORTIFY_SOURCE) | |
31f18b77 FG |
77 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") |
78 | set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") | |
7c673cae FG |
79 | endif() |
80 | endif() | |
81 | CHECK_C_COMPILER_FLAG(-fstack-protector-strong HAS_STACK_PROTECT) | |
82 | if (HAS_STACK_PROTECT) | |
83 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong") | |
84 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") | |
85 | endif() | |
86 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
87 | ||
88 | include(SIMDExt) | |
89 | if(HAVE_INTEL) | |
90 | set(CMAKE_ASM_COMPILER ${PROJECT_SOURCE_DIR}/src/yasm-wrapper) | |
91 | set(CMAKE_ASM_FLAGS "-f elf64") | |
92 | endif() | |
93 | ||
94 | execute_process( | |
31f18b77 | 95 | COMMAND yasm -f elf64 ${CMAKE_SOURCE_DIR}/src/common/crc32c_intel_fast_asm.s -o /dev/null |
7c673cae FG |
96 | RESULT_VARIABLE no_yasm |
97 | OUTPUT_QUIET) | |
98 | if(no_yasm) | |
99 | message(STATUS " we do not have a modern/working yasm") | |
100 | else(no_yasm) | |
101 | message(STATUS " we have a modern and working yasm") | |
102 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") | |
103 | message(STATUS " we are x84_64") | |
104 | set(save_quiet ${CMAKE_REQUIRED_QUIET}) | |
105 | set(CMAKE_REQUIRED_QUIET true) | |
106 | include(CheckCXXSourceCompiles) | |
107 | check_cxx_source_compiles(" | |
108 | #if defined(__x86_64__) && defined(__ILP32__) | |
109 | #error x32 | |
110 | #endif | |
111 | int main() {} | |
112 | " not_arch_x32) | |
113 | set(CMAKE_REQUIRED_QUIET ${save_quiet}) | |
114 | if(not_arch_x32) | |
115 | message(STATUS " we are not x32") | |
116 | set(HAVE_GOOD_YASM_ELF64 1) | |
117 | execute_process(COMMAND yasm -f elf64 -i | |
31f18b77 FG |
118 | ${CMAKE_SOURCE_DIR}/src/isa-l/include/ |
119 | ${CMAKE_SOURCE_DIR}/src/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm | |
7c673cae FG |
120 | -o /dev/null |
121 | RESULT_VARIABLE rc | |
122 | OUTPUT_QUIET) | |
123 | if(NOT rc) | |
124 | set(HAVE_BETTER_YASM_ELF64 1) | |
125 | message(STATUS " yasm can also build the isa-l stuff") | |
126 | endif(NOT rc) | |
127 | else(not_arch_x32) | |
128 | message(STATUS " we are x32; no yasm for you") | |
129 | endif(not_arch_x32) | |
130 | else(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") | |
131 | message(STATUS " we are not x86_64 && !x32") | |
132 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64") | |
133 | endif(no_yasm) | |
134 | ||
135 | # require c++11 | |
136 | if(CMAKE_VERSION VERSION_LESS "3.1") | |
137 | include(CheckCXXCompilerFlag) | |
138 | CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) | |
139 | if(NOT COMPILER_SUPPORTS_CXX11) | |
140 | message(FATAL_ERROR | |
141 | "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support.") | |
142 | endif() | |
143 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") | |
144 | include(CheckCCompilerFlag) | |
145 | CHECK_C_COMPILER_FLAG("-std=gnu99" COMPILER_SUPPORTS_GNU99) | |
146 | if(NOT COMPILER_SUPPORTS_GNU99) | |
147 | message(FATAL_ERROR | |
148 | "The compiler ${CMAKE_C_COMPILER} has no GNU C99 support.") | |
149 | endif() | |
150 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") | |
151 | else() | |
152 | set(CMAKE_CXX_STANDARD 11) | |
153 | set(CMAKE_CXX_EXTENSIONS OFF) | |
154 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
155 | set(CMAKE_C_STANDARD 99) | |
156 | # we use `asm()` to inline assembly, so enable the GNU extension | |
157 | set(CMAKE_C_EXTENSIONS ON) | |
158 | set(C_STANDARD_REQUIRED ON) | |
159 | endif() | |
160 | ||
161 | ## Handle diagnostics color if compiler supports them. | |
162 | CHECK_C_COMPILER_FLAG("-fdiagnostics-color=always" | |
163 | COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) | |
164 | ||
165 | set(DIAGNOSTICS_COLOR "auto" | |
166 | 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.") | |
167 | ||
168 | if(COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) | |
169 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") | |
170 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") | |
171 | endif() | |
172 | ||
173 | set(EXTRALIBS rt ${CMAKE_DL_LIBS} ${ATOMIC_OPS_LIBRARIES}) | |
174 | if(LINUX) | |
175 | set(LIB_RESOLV resolv) | |
176 | list(APPEND EXTRALIBS ${LIB_RESOLV}) | |
177 | endif(LINUX) | |
178 | ||
179 | option(WITH_PROFILER "build extra profiler binaries" OFF) | |
180 | if(WITH_PROFILER) | |
181 | find_package(gperftools REQUIRED) | |
182 | list(APPEND EXTRALIBS profiler) | |
183 | endif(WITH_PROFILER) | |
184 | ||
185 | if(${ENABLE_COVERAGE}) | |
186 | find_program(HAVE_GCOV gcov) | |
187 | if(NOT HAVE_GCOV) | |
188 | message(FATAL_ERROR "Coverage Enabled but gcov Not Found") | |
189 | endif(NOT HAVE_GCOV) | |
190 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0") | |
191 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") | |
192 | list(APPEND EXTRALIBS gcov) | |
193 | endif(${ENABLE_COVERAGE}) | |
194 | ||
195 | if(USE_NSS) | |
196 | if(NSS_FOUND) | |
197 | if(NSPR_FOUND) | |
198 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${NSS_INCLUDE_DIR} -I${NSPR_INCLUDE_DIR}") | |
199 | endif(NSPR_FOUND) | |
200 | endif(NSS_FOUND) | |
201 | endif(USE_NSS) | |
202 | ||
203 | set(GCOV_PREFIX_STRIP 4) | |
204 | ||
31f18b77 FG |
205 | # the src/.git_version file may be written out by make-dist; otherwise |
206 | # we pull the git version from .git | |
7c673cae FG |
207 | option(ENABLE_GIT_VERSION "build Ceph with git version string" ON) |
208 | if(${ENABLE_GIT_VERSION}) | |
209 | get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER) | |
210 | git_describe(CEPH_GIT_NICE_VER --always) | |
211 | #if building from a source tarball via make-dist | |
212 | if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") | |
213 | message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER") | |
214 | file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG) | |
215 | list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER) | |
216 | list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER) | |
217 | endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") | |
218 | # remove 'v' prefix from raw git version | |
219 | string(SUBSTRING ${CEPH_GIT_NICE_VER} 1 -1 CEPH_GIT_NICE_VER) | |
220 | else(${ENABLE_GIT_VERSION}) | |
221 | set(CEPH_GIT_VER "no_version") | |
222 | set(CEPH_GIT_NICE_VER "Development") | |
223 | endif(${ENABLE_GIT_VERSION}) | |
224 | ||
31f18b77 FG |
225 | # the src/ceph_release file is 3 lines, |
226 | # <release number, e.g. '12' for luminous> | |
227 | # <release name, e.g. 'luminous'> | |
228 | # <release type: 'dev' for x.0.z, 'rc' or x.1.z, or 'stable' or x.2.z> | |
229 | # note that the release name is semi-redundant and must match CEPH_RELEASE_* | |
230 | # definitions in include/rados.h and common/ceph_strings.c. | |
231 | file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE) | |
232 | list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE) | |
233 | list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME) | |
234 | list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE) | |
235 | ||
7c673cae FG |
236 | option(WITH_OCF "build OCF-compliant cluster resource agent" OFF) |
237 | if(WITH_OCF) | |
238 | add_subdirectory(ocf) | |
239 | endif() | |
240 | ||
241 | option(WITH_CEPHFS_JAVA "build libcephfs Java bindings" OFF) | |
242 | if(WITH_CEPHFS_JAVA) | |
243 | add_subdirectory(java) | |
244 | endif() | |
245 | ||
246 | # Python stuff | |
247 | find_package(PythonInterp 2 REQUIRED) | |
248 | find_package(PythonLibs 2 REQUIRED) | |
249 | ||
250 | option(WITH_PYTHON3 "build python3 bindings" "CHECK") | |
251 | if(WITH_PYTHON3 MATCHES "check|CHECK") | |
252 | find_package(Python3Interp 3 QUIET) | |
253 | find_package(Python3Libs 3 QUIET) | |
254 | if(PYTHON3INTERP_FOUND AND PYTHON3LIBS_FOUND) | |
255 | set(WITH_PYTHON3 ON) | |
256 | else() | |
257 | set(WITH_PYTHON3 OFF) | |
258 | endif() | |
259 | elseif(WITH_PYTHON3) | |
260 | find_package(Python3Interp 3 REQUIRED) | |
261 | find_package(Python3Libs 3 REQUIRED) | |
262 | endif() | |
263 | ||
264 | if(HAVE_XIO) | |
265 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${XIO_INCLUDE_DIR}") | |
266 | list(APPEND EXTRALIBS ${XIO_LIBRARY} pthread rt) | |
267 | endif(HAVE_XIO) | |
268 | ||
269 | if(HAVE_RDMA) | |
270 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${RDMA_INCLUDE_DIR}") | |
271 | list(APPEND EXTRALIBS ${RDMA_LIBRARIES} pthread rt) | |
272 | endif(HAVE_RDMA) | |
273 | ||
274 | if(HAVE_DPDK) | |
275 | set(CMAKE_CXX_FLAGS "-march=native ${CMAKE_CXX_FLAGS} -I${DPDK_INCLUDE_DIR}") | |
276 | list(APPEND EXTRALIBS ${DPDK_LIBRARY}) | |
277 | if(NOT USE_CRYPTOPP) | |
278 | message(FATAL_ERROR "CRYPTOPP must be supported when enable DPDK.") | |
279 | endif(NOT USE_CRYPTOPP) | |
280 | list(APPEND EXTRALIBS ${DPDK_LIBRARIES}) | |
281 | endif(HAVE_DPDK) | |
282 | ||
283 | # sort out which allocator to use | |
284 | if(ALLOCATOR STREQUAL "tcmalloc") | |
285 | set(ALLOC_LIBS ${GPERFTOOLS_TCMALLOC_LIBRARY}) | |
286 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") | |
287 | set(TCMALLOC_srcs perfglue/heap_profiler.cc) | |
288 | elseif(ALLOCATOR STREQUAL "tcmalloc_minimal") | |
289 | set(ALLOC_LIBS ${GPERFTOOLS_TCMALLOC_MINIMAL_LIBRARY}) | |
290 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") | |
291 | set(TCMALLOC_srcs perfglue/disabled_heap_profiler.cc) | |
292 | elseif(ALLOCATOR STREQUAL "jemalloc") | |
293 | set(ALLOC_LIBS ${JEMALLOC_LIBRARIES}) | |
294 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") | |
295 | set(TCMALLOC_srcs perfglue/disabled_heap_profiler.cc) | |
296 | elseif(ALLOCATOR STREQUAL "libc") | |
297 | set(TCMALLOC_srcs perfglue/disabled_heap_profiler.cc) | |
298 | endif() | |
299 | ||
300 | # tcmalloc heap profiler | |
301 | set(heap_profiler_files ${TCMALLOC_srcs}) | |
302 | add_library(heap_profiler_objs OBJECT ${heap_profiler_files}) | |
303 | ||
304 | if (WITH_BLKIN) | |
305 | add_subdirectory(blkin/blkin-lib) | |
306 | endif(WITH_BLKIN) | |
307 | ||
308 | # Common infrastructure | |
309 | configure_file( | |
310 | ${CMAKE_SOURCE_DIR}/src/ceph_ver.h.in.cmake | |
311 | ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h | |
312 | @ONLY) | |
313 | ||
314 | set(auth_files | |
315 | auth/AuthAuthorizeHandler.cc | |
316 | auth/AuthClientHandler.cc | |
317 | auth/AuthSessionHandler.cc | |
318 | auth/AuthMethodList.cc | |
319 | auth/cephx/CephxAuthorizeHandler.cc | |
320 | auth/cephx/CephxClientHandler.cc | |
321 | auth/cephx/CephxProtocol.cc | |
322 | auth/cephx/CephxSessionHandler.cc | |
323 | auth/none/AuthNoneAuthorizeHandler.cc | |
324 | auth/unknown/AuthUnknownAuthorizeHandler.cc | |
325 | auth/Crypto.cc | |
326 | auth/KeyRing.cc | |
327 | auth/RotatingKeyRing.cc) | |
328 | ||
329 | set(mds_files) | |
330 | list(APPEND mds_files | |
331 | mds/MDSMap.cc | |
332 | mds/FSMap.cc | |
333 | mds/FSMapUser.cc | |
334 | mds/inode_backtrace.cc | |
335 | mds/mdstypes.cc | |
336 | mds/flock.cc) | |
337 | ||
338 | set(crush_srcs | |
339 | crush/builder.c | |
340 | crush/mapper.c | |
341 | crush/crush.c | |
342 | crush/hash.c | |
343 | crush/CrushWrapper.cc | |
344 | crush/CrushCompiler.cc | |
345 | crush/CrushTester.cc | |
346 | crush/CrushLocation.cc) | |
347 | ||
348 | add_library(crush_objs OBJECT ${crush_srcs}) | |
349 | ||
350 | add_subdirectory(json_spirit) | |
351 | ||
352 | include_directories("${CMAKE_SOURCE_DIR}/src/xxHash") | |
31f18b77 | 353 | include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include") |
7c673cae FG |
354 | |
355 | set(GMOCK_INCLUDE_DIRS | |
356 | "${CMAKE_SOURCE_DIR}/src/googletest/googletest/include/gmock") | |
357 | set(GTEST_INCLUDE_DIRS | |
358 | "${CMAKE_SOURCE_DIR}/src/googletest/googletest/include/gtest") | |
359 | ||
360 | include_directories("${CMAKE_SOURCE_DIR}/src/dmclock/src") | |
361 | include_directories("${CMAKE_SOURCE_DIR}/src/dmclock/support/src") | |
362 | ||
363 | # needed for source files that friend unit tests (e.g., using FRIEND_TEST) | |
364 | include_directories("${CMAKE_SOURCE_DIR}/src/googletest/googletest/include") | |
365 | ||
366 | set(xio_common_srcs) | |
367 | if(HAVE_XIO) | |
368 | list(APPEND xio_common_srcs | |
369 | msg/xio/XioConnection.cc | |
370 | msg/xio/XioMsg.cc | |
371 | msg/xio/XioPool.cc | |
372 | msg/xio/XioMessenger.cc | |
373 | msg/xio/XioPortal.cc) | |
374 | endif(HAVE_XIO) | |
375 | ||
376 | set(async_rdma_common_srcs) | |
377 | if(HAVE_RDMA) | |
378 | list(APPEND async_rdma_common_srcs | |
379 | msg/async/rdma/Infiniband.cc | |
7c673cae | 380 | msg/async/rdma/RDMAConnectedSocketImpl.cc |
7c673cae FG |
381 | msg/async/rdma/RDMAServerSocketImpl.cc |
382 | msg/async/rdma/RDMAStack.cc) | |
383 | endif(HAVE_RDMA) | |
384 | ||
385 | set(dpdk_common_srcs) | |
386 | if(HAVE_DPDK) | |
387 | list(APPEND dpdk_common_srcs | |
388 | msg/async/dpdk/ARP.cc | |
389 | msg/async/dpdk/DPDK.cc | |
390 | msg/async/dpdk/dpdk_rte.cc | |
391 | msg/async/dpdk/DPDKStack.cc | |
392 | msg/async/dpdk/EventDPDK.cc | |
393 | msg/async/dpdk/IP.cc | |
394 | msg/async/dpdk/net.cc | |
395 | msg/async/dpdk/IPChecksum.cc | |
396 | msg/async/dpdk/Packet.cc | |
397 | msg/async/dpdk/TCP.cc | |
398 | msg/async/dpdk/UserspaceEvent.cc | |
399 | msg/async/dpdk/ethernet.cc) | |
400 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${DPDK_INCLUDE_DIR}") | |
401 | endif(HAVE_DPDK) | |
402 | ||
403 | add_library(common_buffer_obj OBJECT | |
404 | common/buffer.cc) | |
405 | ||
406 | add_library(common_texttable_obj OBJECT | |
407 | common/TextTable.cc) | |
408 | ||
409 | set(libcommon_files | |
410 | ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h | |
411 | ceph_ver.c | |
412 | common/AsyncOpTracker.cc | |
413 | common/DecayCounter.cc | |
414 | common/LogClient.cc | |
415 | common/LogEntry.cc | |
416 | common/PrebufferedStreambuf.cc | |
417 | common/BackTrace.cc | |
418 | common/perf_counters.cc | |
419 | common/perf_histogram.cc | |
420 | common/mutex_debug.cc | |
421 | common/Mutex.cc | |
422 | common/OutputDataSocket.cc | |
423 | common/admin_socket.cc | |
424 | common/admin_socket_client.cc | |
425 | common/bloom_filter.cc | |
426 | common/Readahead.cc | |
427 | common/cmdparse.cc | |
428 | common/escape.c | |
429 | common/url_escape.cc | |
430 | common/io_priority.cc | |
431 | common/Clock.cc | |
432 | common/ceph_time.cc | |
433 | common/mempool.cc | |
434 | common/Throttle.cc | |
435 | common/Timer.cc | |
436 | common/Finisher.cc | |
437 | common/environment.cc | |
438 | common/sctp_crc32.c | |
439 | common/crc32c.cc | |
440 | common/crc32c_intel_baseline.c | |
441 | xxHash/xxhash.c | |
442 | common/assert.cc | |
443 | common/run_cmd.cc | |
444 | common/WorkQueue.cc | |
445 | common/ConfUtils.cc | |
446 | common/MemoryModel.cc | |
447 | common/fd.cc | |
448 | common/xattr.c | |
449 | common/str_list.cc | |
450 | common/str_map.cc | |
451 | common/snap_types.cc | |
452 | common/errno.cc | |
453 | common/TrackedOp.cc | |
454 | common/SloppyCRCMap.cc | |
455 | common/types.cc | |
31f18b77 | 456 | common/iso_8601.cc |
7c673cae FG |
457 | log/Log.cc |
458 | log/SubsystemMap.cc | |
459 | mon/MonCap.cc | |
460 | mon/MonClient.cc | |
461 | mon/MonMap.cc | |
462 | mgr/MgrClient.cc | |
463 | msg/simple/Accepter.cc | |
464 | msg/DispatchQueue.cc | |
465 | msg/Message.cc | |
31f18b77 | 466 | mon/PGMap.cc |
224ce89b | 467 | mgr/ServiceMap.cc |
7c673cae FG |
468 | osd/ECMsgTypes.cc |
469 | osd/HitSet.cc | |
470 | common/RefCountedObj.cc | |
471 | msg/Messenger.cc | |
472 | msg/simple/Pipe.cc | |
473 | msg/simple/PipeConnection.cc | |
474 | msg/simple/SimpleMessenger.cc | |
475 | msg/async/AsyncConnection.cc | |
476 | msg/async/AsyncMessenger.cc | |
477 | msg/async/Event.cc | |
478 | msg/async/EventSelect.cc | |
479 | msg/async/Stack.cc | |
480 | msg/async/PosixStack.cc | |
481 | msg/async/net_handler.cc | |
482 | msg/QueueStrategy.cc | |
483 | ${xio_common_srcs} | |
484 | ${async_rdma_common_srcs} | |
485 | ${dpdk_common_srcs} | |
486 | msg/msg_types.cc | |
31f18b77 | 487 | common/reverse.c |
7c673cae FG |
488 | common/hobject.cc |
489 | osd/OSDMap.cc | |
490 | osd/OSDMapMapping.cc | |
491 | common/histogram.cc | |
492 | osd/osd_types.cc | |
493 | osd/OpRequest.cc | |
494 | common/blkdev.cc | |
495 | common/common_init.cc | |
496 | common/pipe.c | |
497 | common/ceph_argparse.cc | |
498 | common/ceph_context.cc | |
499 | common/code_environment.cc | |
500 | common/dout.cc | |
501 | common/signal.cc | |
502 | common/Thread.cc | |
503 | common/Formatter.cc | |
504 | common/HTMLFormatter.cc | |
505 | common/HeartbeatMap.cc | |
506 | common/PluginRegistry.cc | |
507 | common/ceph_fs.cc | |
508 | common/ceph_hash.cc | |
509 | common/ceph_strings.cc | |
510 | common/ceph_frag.cc | |
c07f9fc5 | 511 | common/options.cc |
7c673cae | 512 | common/config.cc |
7c673cae FG |
513 | common/utf8.c |
514 | common/mime.c | |
515 | common/strtol.cc | |
516 | common/page.cc | |
517 | common/lockdep.cc | |
518 | common/version.cc | |
519 | common/hex.cc | |
520 | common/entity_name.cc | |
521 | common/ceph_crypto.cc | |
522 | common/ceph_crypto_cms.cc | |
523 | common/ceph_json.cc | |
524 | common/ipaddr.cc | |
525 | common/pick_address.cc | |
526 | common/address_helper.cc | |
527 | common/linux_version.c | |
528 | common/TracepointProvider.cc | |
529 | common/Cycles.cc | |
530 | common/scrub_types.cc | |
531 | common/bit_str.cc | |
532 | osdc/Striper.cc | |
533 | osdc/Objecter.cc | |
28e407b8 | 534 | common/compat.cc |
7c673cae FG |
535 | common/Graylog.cc |
536 | common/fs_types.cc | |
537 | common/dns_resolve.cc | |
538 | common/hostname.cc | |
31f18b77 | 539 | common/util.cc |
7c673cae FG |
540 | arch/probe.cc |
541 | ${auth_files} | |
542 | ${mds_files}) | |
543 | ||
3efd9988 | 544 | CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA) |
c07f9fc5 | 545 | if(HAS_VTA) |
3efd9988 FG |
546 | set_source_files_properties( |
547 | common/config.cc | |
548 | common/options.cc | |
c07f9fc5 FG |
549 | PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments) |
550 | endif() | |
551 | ||
31f18b77 FG |
552 | if(FREEBSD) |
553 | list(APPEND libcommon_files common/freebsd_errno.cc) | |
554 | elseif(DARWIN) | |
555 | list(APPEND libcommon_files common/darwin_errno.cc) | |
556 | elseif(SUN) | |
557 | list(APPEND libcommon_files common/solaris_errno.cc) | |
558 | elseif(AIX) | |
559 | list(APPEND libcommon_files common/aix_errno.cc) | |
560 | endif() | |
561 | ||
7c673cae FG |
562 | if(HAVE_ARM) |
563 | list(APPEND libcommon_files arch/arm.c) | |
564 | elseif(HAVE_INTEL) | |
565 | list(APPEND libcommon_files arch/intel.c) | |
566 | elseif(HAVE_POWER8) | |
567 | list(APPEND libcommon_files arch/ppc.c) | |
568 | endif() | |
569 | ||
570 | if(HAVE_INTEL) | |
571 | list(APPEND libcommon_files | |
572 | common/crc32c_intel_fast.c) | |
573 | if(HAVE_GOOD_YASM_ELF64) | |
574 | list(APPEND libcommon_files | |
31f18b77 FG |
575 | common/crc32c_intel_fast_asm.s |
576 | common/crc32c_intel_fast_zero_asm.s) | |
7c673cae FG |
577 | endif(HAVE_GOOD_YASM_ELF64) |
578 | elseif(HAVE_POWER8) | |
579 | list(APPEND libcommon_files | |
580 | common/crc32c_ppc.c | |
31f18b77 FG |
581 | common/crc32c_ppc_asm.S |
582 | common/crc32c_ppc_fast_zero_asm.S) | |
7c673cae FG |
583 | endif(HAVE_INTEL) |
584 | ||
585 | if(LINUX) | |
586 | list(APPEND libcommon_files msg/async/EventEpoll.cc) | |
587 | message(STATUS " Using EventEpoll for events.") | |
588 | elseif(FREEBSD OR APPLE) | |
589 | list(APPEND libcommon_files msg/async/EventKqueue.cc) | |
590 | message(STATUS " Using EventKqueue for events.") | |
591 | endif(LINUX) | |
592 | ||
593 | if(WITH_LTTNG AND WITH_EVENTTRACE) | |
594 | message(STATUS " Using EventTrace class.") | |
595 | add_definitions("-DWITH_EVENTTRACE") | |
596 | list(APPEND libcommon_files common/EventTrace.cc) | |
597 | endif() | |
598 | ||
7c673cae FG |
599 | set(common_mountcephfs_files |
600 | common/armor.c | |
601 | common/safe_io.c | |
602 | common/module.c | |
603 | common/addr_parsing.c) | |
604 | add_library(common_mountcephfs_objs OBJECT | |
605 | ${common_mountcephfs_files}) | |
606 | ||
607 | if(WITH_PROFILER) | |
608 | list(APPEND libcommon_files | |
609 | perfglue/cpu_profiler.cc) | |
610 | else() | |
611 | list(APPEND libcommon_files | |
612 | perfglue/disabled_stubs.cc) | |
613 | endif() | |
614 | ||
615 | add_library(common-objs OBJECT ${libcommon_files}) | |
616 | set(ceph_common_objs | |
617 | $<TARGET_OBJECTS:common_buffer_obj> | |
618 | $<TARGET_OBJECTS:common_texttable_obj> | |
619 | $<TARGET_OBJECTS:compressor_objs> | |
620 | $<TARGET_OBJECTS:common-objs> | |
621 | $<TARGET_OBJECTS:common_mountcephfs_objs> | |
622 | $<TARGET_OBJECTS:global_common_objs> | |
623 | $<TARGET_OBJECTS:crush_objs>) | |
624 | set(ceph_common_deps | |
625 | json_spirit erasure_code rt ${LIB_RESOLV} | |
31f18b77 FG |
626 | Boost::thread |
627 | Boost::system | |
628 | Boost::regex | |
629 | Boost::random | |
630 | Boost::program_options | |
631 | Boost::date_time | |
632 | Boost::iostreams | |
7c673cae FG |
633 | ${BLKID_LIBRARIES} |
634 | ${Backtrace_LIBRARIES} | |
635 | ${BLKIN_LIBRARIES} | |
636 | ${CRYPTO_LIBS} | |
637 | ${CMAKE_THREAD_LIBS_INIT} | |
638 | ${CMAKE_DL_LIBS}) | |
639 | if(HAVE_RDMA) | |
640 | list(APPEND ceph_common_deps ${RDMA_LIBRARY}) | |
641 | endif() | |
642 | if(NOT WITH_SYSTEM_BOOST) | |
643 | list(APPEND ceph_common_deps ${ZLIB_LIBRARIES}) | |
644 | endif() | |
645 | ||
646 | set_source_files_properties(${CMAKE_SOURCE_DIR}/src/ceph_ver.c | |
647 | ${CMAKE_SOURCE_DIR}/src/common/version.cc | |
648 | ${CMAKE_SOURCE_DIR}/src/test/encoding/ceph_dencoder.cc | |
649 | APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h) | |
650 | ||
651 | if(HAVE_ARMV8_CRC) | |
652 | add_library(common_crc_aarch64 STATIC common/crc32c_aarch64.c) | |
653 | set_target_properties(common_crc_aarch64 PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}") | |
654 | list(APPEND ceph_common_deps common_crc_aarch64) | |
655 | endif(HAVE_ARMV8_CRC) | |
656 | ||
657 | add_library(common STATIC ${ceph_common_objs}) | |
658 | target_link_libraries(common ${ceph_common_deps}) | |
659 | ||
660 | add_library(ceph-common SHARED ${ceph_common_objs}) | |
661 | target_link_libraries(ceph-common ${ceph_common_deps}) | |
662 | # appease dpkg-shlibdeps | |
663 | set_target_properties(ceph-common PROPERTIES | |
664 | SOVERSION 0 | |
665 | INSTALL_RPATH "") | |
666 | install(TARGETS ceph-common DESTINATION ${CMAKE_INSTALL_PKGLIBDIR}) | |
667 | ||
668 | add_library(common_utf8 STATIC common/utf8.c) | |
669 | ||
7c673cae FG |
670 | if(${WITH_LTTNG}) |
671 | add_subdirectory(tracing) | |
672 | add_dependencies(common-objs oprequest-tp) | |
673 | endif(${WITH_LTTNG}) | |
674 | ||
675 | add_subdirectory(global) | |
676 | ||
677 | add_subdirectory(lua) | |
678 | ||
679 | # rados object classes | |
680 | add_subdirectory(cls) | |
681 | ||
682 | # RADOS client/library | |
683 | add_subdirectory(osdc) | |
684 | ||
685 | add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc) | |
686 | ||
687 | add_subdirectory(include) | |
688 | add_subdirectory(librados) | |
689 | add_subdirectory(libradosstriper) | |
690 | ||
691 | if (WITH_MGR) | |
692 | set(mgr_srcs | |
693 | ceph_mgr.cc | |
694 | mon/PGMap.cc | |
695 | mgr/DaemonState.cc | |
696 | mgr/DaemonServer.cc | |
697 | mgr/ClusterState.cc | |
3efd9988 | 698 | mgr/ActivePyModules.cc |
b32b8144 | 699 | mgr/OSDHealthMetricCollector.cc |
3efd9988 FG |
700 | mgr/StandbyPyModules.cc |
701 | mgr/PyModuleRegistry.cc | |
702 | mgr/PyModuleRunner.cc | |
7c673cae | 703 | mgr/PyFormatter.cc |
3efd9988 FG |
704 | mgr/PyOSDMap.cc |
705 | mgr/BaseMgrModule.cc | |
706 | mgr/BaseMgrStandbyModule.cc | |
707 | mgr/ActivePyModule.cc | |
7c673cae | 708 | mgr/MgrStandby.cc |
c07f9fc5 | 709 | mgr/Mgr.cc |
3efd9988 | 710 | mgr/Gil.cc |
c07f9fc5 | 711 | mgr/mgr_commands.cc) |
7c673cae FG |
712 | add_executable(ceph-mgr ${mgr_srcs} |
713 | $<TARGET_OBJECTS:heap_profiler_objs>) | |
714 | target_include_directories(ceph-mgr PRIVATE "${PYTHON_INCLUDE_DIRS}") | |
715 | target_link_libraries(ceph-mgr osdc client global-static common | |
31f18b77 | 716 | Boost::python ${PYTHON_LIBRARIES} ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${ALLOC_LIBS}) |
7c673cae FG |
717 | install(TARGETS ceph-mgr DESTINATION bin) |
718 | endif (WITH_MGR) | |
719 | ||
720 | set(librados_config_srcs | |
721 | librados-config.cc) | |
722 | add_executable(librados-config ${librados_config_srcs}) | |
723 | target_link_libraries(librados-config librados global ${BLKID_LIBRARIES} ${RDMA_LIBRARIES} | |
724 | ${CMAKE_DL_LIBS}) | |
725 | ||
726 | install(TARGETS librados-config DESTINATION bin) | |
727 | ||
728 | # virtualenv base directory for ceph-disk and ceph-detect-init | |
729 | set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR}) | |
730 | if(NOT CEPH_BUILD_VIRTUALENV) | |
731 | set(CEPH_BUILD_VIRTUALENV /tmp) | |
732 | endif() | |
733 | ||
734 | add_subdirectory(pybind) | |
735 | add_subdirectory(ceph-disk) | |
d2e6a577 | 736 | add_subdirectory(ceph-volume) |
7c673cae FG |
737 | add_subdirectory(ceph-detect-init) |
738 | ||
739 | ## dencoder | |
7c673cae FG |
740 | if(HAS_VTA) |
741 | set_source_files_properties(test/encoding/ceph_dencoder.cc | |
742 | PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments) | |
743 | endif() | |
744 | ||
745 | set(dencoder_srcs | |
746 | test/encoding/ceph_dencoder.cc | |
747 | $<TARGET_OBJECTS:common_texttable_obj> | |
748 | ) | |
749 | if(${WITH_RADOSGW}) | |
750 | list(APPEND dencoder_srcs | |
751 | rgw/rgw_dencoder.cc | |
752 | ) | |
753 | set(DENCODER_EXTRALIBS | |
754 | rgw_a | |
755 | cls_rgw_client | |
756 | ) | |
757 | endif(${WITH_RADOSGW}) | |
758 | if(WITH_RBD) | |
759 | set(DENCODER_EXTRALIBS | |
760 | ${DENCODER_EXTRALIBS} | |
761 | cls_rbd_client | |
762 | rbd_mirror_types | |
763 | rbd_types | |
764 | rbd_replay_types) | |
765 | if(WITH_KRBD) | |
766 | set(DENCODER_EXTRALIBS | |
767 | ${DENCODER_EXTRALIBS} | |
768 | krbd) | |
769 | endif() | |
770 | endif(WITH_RBD) | |
771 | ||
772 | add_executable(ceph-dencoder ${dencoder_srcs}) | |
773 | target_link_libraries(ceph-dencoder | |
774 | global | |
775 | os | |
776 | osd | |
777 | mds | |
778 | mon | |
779 | journal | |
780 | ${DENCODER_EXTRALIBS} | |
781 | cls_lock_client | |
782 | cls_refcount_client | |
783 | cls_log_client | |
784 | cls_statelog_client | |
785 | cls_version_client | |
786 | cls_replica_log_client | |
787 | cls_user_client | |
788 | cls_journal_client | |
789 | cls_timeindex_client | |
790 | ${EXTRALIBS} | |
791 | ${CMAKE_DL_LIBS} | |
792 | ) | |
793 | install(TARGETS ceph-dencoder DESTINATION bin) | |
794 | ||
795 | # Monitor | |
7c673cae FG |
796 | add_subdirectory(mon) |
797 | set(ceph_mon_srcs | |
798 | ceph_mon.cc) | |
799 | add_executable(ceph-mon ${ceph_mon_srcs} | |
800 | $<TARGET_OBJECTS:common_texttable_obj>) | |
801 | add_dependencies(ceph-mon erasure_code_plugins) | |
802 | target_link_libraries(ceph-mon mon common os global-static common | |
803 | ${EXTRALIBS} | |
804 | ${CMAKE_DL_LIBS}) | |
805 | install(TARGETS ceph-mon DESTINATION bin) | |
806 | ||
807 | # OSD/ObjectStore | |
808 | # make rocksdb statically | |
809 | ||
810 | if (NOT WITH_SYSTEM_ROCKSDB) | |
811 | set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON) | |
812 | ||
813 | if(ALLOCATOR STREQUAL "jemalloc") | |
814 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_JEMALLOC=ON) | |
815 | endif() | |
816 | ||
817 | if (WITH_CCACHE AND CCACHE_FOUND) | |
818 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=ccache) | |
819 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=${CMAKE_CXX_COMPILER}) | |
820 | else(WITH_CCACHE AND CCACHE_FOUND) | |
821 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) | |
822 | endif(WITH_CCACHE AND CCACHE_FOUND) | |
823 | ||
28e407b8 AA |
824 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_SNAPPY=${SNAPPY_FOUND}) |
825 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_LZ4=${LZ4_FOUND}) | |
826 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_ZLIB=${ZLIB_FOUND}) | |
827 | ||
181888fb FG |
828 | # SSE 4.2 is enabled by default in rocksdb's crc32c. For details refer to |
829 | # rocksdb/util/crc32c.cc. | |
7c673cae FG |
830 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_AR=${CMAKE_AR}) |
831 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) | |
28e407b8 | 832 | list(APPEND ROCKSDB_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF) |
7c673cae FG |
833 | |
834 | # we use an external project and copy the sources to bin directory to ensure | |
835 | # that object files are built outside of the source tree. | |
836 | include(ExternalProject) | |
837 | ExternalProject_Add(rocksdb_ext | |
838 | SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb | |
839 | CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} | |
840 | BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rocksdb | |
841 | BUILD_COMMAND $(MAKE) rocksdb | |
842 | INSTALL_COMMAND "true") | |
843 | ||
844 | # force rocksdb make to be called on each time | |
845 | ExternalProject_Add_Step(rocksdb_ext forcebuild | |
846 | DEPENDEES configure | |
847 | DEPENDERS build | |
848 | COMMAND "true" | |
849 | ALWAYS 1) | |
850 | ||
851 | set(ROCKSDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include) | |
852 | ||
853 | add_library(rocksdb STATIC IMPORTED) | |
854 | add_dependencies(rocksdb rocksdb_ext) | |
855 | set_property(TARGET rocksdb PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rocksdb/librocksdb.a") | |
856 | set(ROCKSDB_LIBRARIES rocksdb) | |
857 | ||
858 | endif(NOT WITH_SYSTEM_ROCKSDB) | |
859 | ||
860 | include(TestBigEndian) | |
861 | test_big_endian(CEPH_BIG_ENDIAN) | |
862 | if(NOT CEPH_BIG_ENDIAN) | |
863 | set(CEPH_LITTLE_ENDIAN 1) | |
864 | endif() | |
865 | ||
866 | add_subdirectory(kv) | |
867 | add_subdirectory(os) | |
868 | ||
869 | set(cls_references_files objclass/class_api.cc) | |
870 | add_library(cls_references_objs OBJECT ${cls_references_files}) | |
871 | ||
872 | add_subdirectory(osd) | |
873 | ||
874 | set(ceph_osd_srcs | |
875 | ceph_osd.cc) | |
31f18b77 | 876 | add_executable(ceph-osd ${ceph_osd_srcs}) |
7c673cae FG |
877 | add_dependencies(ceph-osd erasure_code_plugins) |
878 | target_link_libraries(ceph-osd osd os global-static common | |
879 | ${BLKID_LIBRARIES} ${RDMA_LIBRARIES}) | |
880 | if(WITH_FUSE) | |
881 | target_link_libraries(ceph-osd ${FUSE_LIBRARIES}) | |
882 | endif() | |
883 | install(TARGETS ceph-osd DESTINATION bin) | |
884 | ||
885 | add_subdirectory(mds) | |
886 | set(ceph_mds_srcs | |
887 | ceph_mds.cc) | |
31f18b77 | 888 | add_executable(ceph-mds ${ceph_mds_srcs}) |
7c673cae | 889 | target_link_libraries(ceph-mds mds ${CMAKE_DL_LIBS} global-static common |
31f18b77 | 890 | Boost::thread) |
7c673cae FG |
891 | install(TARGETS ceph-mds DESTINATION bin) |
892 | ||
893 | add_subdirectory(erasure-code) | |
894 | ||
895 | # Support/Tools | |
896 | if(WITH_TESTS) | |
897 | add_subdirectory(googletest/googlemock) | |
898 | add_subdirectory(test) | |
899 | endif(WITH_TESTS) | |
900 | ||
901 | add_subdirectory(compressor) | |
902 | ||
903 | add_subdirectory(tools) | |
904 | ||
31f18b77 | 905 | # dmClock (after gmock) |
7c673cae | 906 | |
31f18b77 | 907 | add_subdirectory(dmclock/src) |
7c673cae | 908 | |
31f18b77 FG |
909 | option(WITH_DMCLOCK_TESTS |
910 | "enable the build of dmclock-tests and dmclock-data-struct tests binaries" | |
911 | OFF) | |
912 | if(WITH_TESTS AND WITH_DMCLOCK_TESTS) | |
913 | # note: add_test is not being called, so dmclock tests aren't part | |
914 | # of ceph tests | |
915 | add_subdirectory(dmclock/test) | |
916 | add_subdirectory(dmclock/support/test) | |
917 | endif(WITH_TESTS AND WITH_DMCLOCK_TESTS) | |
7c673cae | 918 | |
31f18b77 | 919 | if(HAVE_INTEL AND HAVE_BETTER_YASM_ELF64) |
7c673cae | 920 | add_subdirectory(crypto/isa-l) |
31f18b77 | 921 | endif(HAVE_INTEL AND HAVE_BETTER_YASM_ELF64) |
7c673cae FG |
922 | |
923 | if(WITH_TESTS) | |
924 | ||
925 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in | |
926 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY) | |
927 | ||
928 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in | |
929 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY) | |
930 | endif(WITH_TESTS) | |
931 | ||
932 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in | |
933 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) | |
934 | ||
935 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-crush-location.in | |
936 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crush-location @ONLY) | |
937 | ||
938 | configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in | |
939 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) | |
940 | ||
941 | configure_file(ceph-post-file.in | |
942 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) | |
943 | ||
944 | if(WITH_TESTS) | |
945 | install(PROGRAMS | |
946 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack | |
947 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage | |
948 | DESTINATION bin) | |
949 | endif(WITH_TESTS) | |
950 | ||
951 | install(PROGRAMS | |
952 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph | |
953 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crush-location | |
954 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file | |
955 | ${CMAKE_SOURCE_DIR}/src/ceph-run | |
956 | ${CMAKE_SOURCE_DIR}/src/ceph-rest-api | |
957 | ${CMAKE_SOURCE_DIR}/src/ceph-clsinfo | |
958 | DESTINATION bin) | |
959 | install(PROGRAMS | |
960 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph | |
961 | DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d | |
962 | RENAME ceph) | |
963 | ||
964 | install(FILES | |
965 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com | |
966 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com.pub | |
967 | ${CMAKE_SOURCE_DIR}/share/known_hosts_drop.ceph.com | |
968 | DESTINATION ${CMAKE_INSTALL_DATADIR}/ceph) | |
969 | ||
970 | install(PROGRAMS | |
971 | ceph_common.sh | |
972 | ceph-osd-prestart.sh | |
973 | DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph) | |
974 | ||
975 | install(PROGRAMS | |
976 | ${CMAKE_SOURCE_DIR}/src/ceph-create-keys | |
977 | # ${CMAKE_SOURCE_DIR}/src/ceph-disk | |
7c673cae FG |
978 | DESTINATION sbin) |
979 | ||
980 | add_subdirectory(bash_completion) | |
981 | ||
982 | if(WITH_LIBCEPHFS OR WITH_KRBD) | |
983 | set(parse_secret_files | |
984 | common/secret.c) | |
985 | add_library(parse_secret_objs OBJECT ${parse_secret_files}) | |
986 | endif() | |
987 | ||
988 | add_subdirectory(client) | |
989 | ||
990 | if(WITH_LIBCEPHFS) | |
991 | set(libcephfs_srcs libcephfs.cc) | |
992 | add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs}) | |
993 | target_link_libraries(cephfs LINK_PRIVATE client ceph-common | |
994 | ${CRYPTO_LIBS} ${EXTRALIBS}) | |
995 | if(ENABLE_SHARED) | |
996 | foreach(name ceph-common client osdc) | |
997 | set(CEPHFS_LINK_FLAGS "${CEPHFS_LINK_FLAGS} -Wl,--exclude-libs,lib${name}.a") | |
998 | endforeach() | |
999 | set_target_properties(cephfs PROPERTIES | |
1000 | OUTPUT_NAME cephfs | |
1001 | VERSION 2.0.0 | |
1002 | SOVERSION 2 | |
1003 | LINK_FLAGS ${CEPHFS_LINK_FLAGS}) | |
1004 | endif(ENABLE_SHARED) | |
1005 | install(TARGETS cephfs DESTINATION ${CMAKE_INSTALL_LIBDIR}) | |
1006 | install(DIRECTORY | |
1007 | "${CMAKE_SOURCE_DIR}/src/include/cephfs" | |
c07f9fc5 | 1008 | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
7c673cae FG |
1009 | set(ceph_syn_srcs |
1010 | ceph_syn.cc | |
1011 | client/SyntheticClient.cc) | |
1012 | add_executable(ceph-syn ${ceph_syn_srcs}) | |
1013 | target_link_libraries(ceph-syn client global-static common) | |
1014 | ||
1015 | set(mount_ceph_srcs | |
1016 | mount/mount.ceph.c) | |
1017 | add_executable(mount.ceph ${mount_ceph_srcs} | |
1018 | $<TARGET_OBJECTS:parse_secret_objs> | |
1019 | $<TARGET_OBJECTS:common_mountcephfs_objs>) | |
1020 | set_target_properties(mount.ceph PROPERTIES | |
1021 | INSTALL_RPATH "") | |
1022 | target_link_libraries(mount.ceph ${KEYUTILS_LIBRARIES}) | |
1023 | ||
1024 | install(TARGETS ceph-syn DESTINATION bin) | |
1025 | install(TARGETS mount.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) | |
1026 | endif(WITH_LIBCEPHFS) | |
1027 | ||
1028 | if(WITH_FUSE) | |
1029 | set(ceph_fuse_srcs | |
1030 | ceph_fuse.cc | |
1031 | client/fuse_ll.cc) | |
1032 | add_executable(ceph-fuse ${ceph_fuse_srcs}) | |
1033 | target_link_libraries(ceph-fuse ${ALLOC_LIBS} ${FUSE_LIBRARIES} | |
1034 | client common global-static) | |
1035 | set_target_properties(ceph-fuse PROPERTIES COMPILE_FLAGS "-I${FUSE_INCLUDE_DIRS}") | |
1036 | install(TARGETS ceph-fuse DESTINATION bin) | |
1037 | install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) | |
1038 | endif(WITH_FUSE) | |
1039 | ||
1040 | add_subdirectory(journal) | |
1041 | ||
1042 | if(WITH_RBD) | |
1043 | if(WITH_KRBD) | |
1044 | add_library(krbd STATIC krbd.cc | |
1045 | $<TARGET_OBJECTS:parse_secret_objs>) | |
1046 | target_link_libraries(krbd ${KEYUTILS_LIBRARIES} ${UDEV_LIBRARIES}) | |
1047 | endif() | |
1048 | add_subdirectory(librbd) | |
1049 | if(WITH_FUSE) | |
1050 | add_subdirectory(rbd_fuse) | |
1051 | endif() | |
1052 | ||
1053 | install(PROGRAMS | |
1054 | ${CMAKE_SOURCE_DIR}/src/ceph-rbdnamer | |
1055 | ${CMAKE_SOURCE_DIR}/src/rbd-replay-many | |
1056 | ${CMAKE_SOURCE_DIR}/src/rbdmap | |
1057 | DESTINATION ${CMAKE_INSTALL_BINDIR}) | |
1058 | add_subdirectory(rbd_replay) | |
1059 | endif(WITH_RBD) | |
1060 | ||
1061 | # RadosGW | |
1062 | if(WITH_KVS) | |
1063 | add_subdirectory(key_value_store) | |
1064 | endif(WITH_KVS) | |
1065 | ||
1066 | if(WITH_RADOSGW) | |
1067 | set(civetweb_common_files civetweb/src/civetweb.c) | |
1068 | add_library(civetweb_common_objs OBJECT ${civetweb_common_files}) | |
1069 | target_include_directories(civetweb_common_objs PRIVATE | |
1070 | "${CMAKE_SOURCE_DIR}/src/civetweb/include") | |
1071 | set_property(TARGET civetweb_common_objs | |
1072 | APPEND PROPERTY COMPILE_DEFINITIONS USE_IPV6=1) | |
1073 | if(USE_OPENSSL) | |
1074 | set_property(TARGET civetweb_common_objs | |
1075 | APPEND PROPERTY COMPILE_DEFINITIONS NO_SSL_DL=1) | |
1076 | target_include_directories(civetweb_common_objs PRIVATE | |
1077 | "${SSL_INCLUDE_DIR}") | |
1078 | endif(USE_OPENSSL) | |
1079 | if (LIBSSL_SONAME) | |
1080 | set_property(TARGET civetweb_common_objs | |
1081 | APPEND PROPERTY COMPILE_DEFINITIONS SSL_LIB="${LIBSSL_SONAME}") | |
1082 | set_property(TARGET civetweb_common_objs | |
1083 | APPEND PROPERTY COMPILE_DEFINITIONS CRYPTO_LIB="${LIBCRYPTO_SONAME}") | |
1084 | endif() | |
1085 | ||
1086 | add_subdirectory(rgw) | |
1087 | ||
1088 | endif(WITH_RADOSGW) | |
1089 | ||
1090 | install(FILES | |
1091 | sample.ceph.conf | |
1092 | DESTINATION ${CMAKE_INSTALL_DOCDIR}) | |
7c673cae FG |
1093 | |
1094 | # Now create a useable config.h | |
1095 | configure_file( | |
1096 | ${CMAKE_SOURCE_DIR}/src/include/config-h.in.cmake | |
1097 | ${CMAKE_BINARY_DIR}/include/acconfig.h | |
1098 | ) | |
1099 | ||
1100 | add_subdirectory(brag) | |
1101 | ||
1102 | # Everything you need to spin up a cluster with vstart.sh | |
1103 | add_custom_target(vstart-base DEPENDS | |
1104 | ceph-osd | |
1105 | ceph-mon | |
1106 | ceph-mgr | |
1107 | ceph-authtool | |
1108 | ceph-conf | |
1109 | monmaptool | |
1110 | crushtool | |
1111 | rados | |
1112 | cython_rados | |
1113 | ) | |
1114 | ||
1115 | add_custom_target(vstart DEPENDS | |
1116 | vstart-base | |
1117 | ceph-mds) | |
1118 | if(WITH_RADOSGW) | |
1119 | add_dependencies(vstart radosgw radosgw-admin) | |
1120 | endif(WITH_RADOSGW) | |
1121 | ||
1122 | if(WITH_LTTNG) | |
1123 | add_dependencies(vstart tracepoint_libraries) | |
1124 | endif(WITH_LTTNG) | |
1125 | ||
1126 | # Everything you need to run CephFS tests | |
1127 | add_custom_target(cephfs_testing DEPENDS | |
1128 | vstart | |
1129 | rados | |
1130 | cython_modules | |
1131 | cephfs | |
1132 | cls_cephfs | |
1133 | ceph-fuse | |
1134 | ceph-dencoder | |
1135 | cephfs-journal-tool | |
1136 | cephfs-data-scan | |
1137 | cephfs-table-tool) | |
1138 | ||
1139 | if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git") | |
1140 | add_custom_target( | |
1141 | git-update | |
1142 | COMMAND git submodule sync | |
1143 | COMMAND git submodule update --force --init --recursive | |
1144 | WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") | |
1145 | endif() | |
1146 | ||
1147 | add_subdirectory(script) | |
1148 | ||
1149 | if(WITH_EMBEDDED) | |
1150 | add_subdirectory(libcephd) | |
1151 | endif() |