]>
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) | |
59 | set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Default BUILD_TYPE is RelWithDebInfo, other options are: Debug, Release, and MinSizeRel." FORCE) | |
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 | |
534 | common/Graylog.cc | |
535 | common/fs_types.cc | |
536 | common/dns_resolve.cc | |
537 | common/hostname.cc | |
31f18b77 | 538 | common/util.cc |
7c673cae FG |
539 | arch/probe.cc |
540 | ${auth_files} | |
541 | ${mds_files}) | |
542 | ||
c07f9fc5 FG |
543 | if(HAS_VTA) |
544 | set_source_files_properties(common/config.cc | |
545 | PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments) | |
546 | endif() | |
547 | ||
31f18b77 FG |
548 | if(FREEBSD) |
549 | list(APPEND libcommon_files common/freebsd_errno.cc) | |
550 | elseif(DARWIN) | |
551 | list(APPEND libcommon_files common/darwin_errno.cc) | |
552 | elseif(SUN) | |
553 | list(APPEND libcommon_files common/solaris_errno.cc) | |
554 | elseif(AIX) | |
555 | list(APPEND libcommon_files common/aix_errno.cc) | |
556 | endif() | |
557 | ||
7c673cae FG |
558 | if(HAVE_ARM) |
559 | list(APPEND libcommon_files arch/arm.c) | |
560 | elseif(HAVE_INTEL) | |
561 | list(APPEND libcommon_files arch/intel.c) | |
562 | elseif(HAVE_POWER8) | |
563 | list(APPEND libcommon_files arch/ppc.c) | |
564 | endif() | |
565 | ||
566 | if(HAVE_INTEL) | |
567 | list(APPEND libcommon_files | |
568 | common/crc32c_intel_fast.c) | |
569 | if(HAVE_GOOD_YASM_ELF64) | |
570 | list(APPEND libcommon_files | |
31f18b77 FG |
571 | common/crc32c_intel_fast_asm.s |
572 | common/crc32c_intel_fast_zero_asm.s) | |
7c673cae FG |
573 | endif(HAVE_GOOD_YASM_ELF64) |
574 | elseif(HAVE_POWER8) | |
575 | list(APPEND libcommon_files | |
576 | common/crc32c_ppc.c | |
31f18b77 FG |
577 | common/crc32c_ppc_asm.S |
578 | common/crc32c_ppc_fast_zero_asm.S) | |
7c673cae FG |
579 | endif(HAVE_INTEL) |
580 | ||
581 | if(LINUX) | |
582 | list(APPEND libcommon_files msg/async/EventEpoll.cc) | |
583 | message(STATUS " Using EventEpoll for events.") | |
584 | elseif(FREEBSD OR APPLE) | |
585 | list(APPEND libcommon_files msg/async/EventKqueue.cc) | |
586 | message(STATUS " Using EventKqueue for events.") | |
587 | endif(LINUX) | |
588 | ||
589 | if(WITH_LTTNG AND WITH_EVENTTRACE) | |
590 | message(STATUS " Using EventTrace class.") | |
591 | add_definitions("-DWITH_EVENTTRACE") | |
592 | list(APPEND libcommon_files common/EventTrace.cc) | |
593 | endif() | |
594 | ||
7c673cae FG |
595 | set(common_mountcephfs_files |
596 | common/armor.c | |
597 | common/safe_io.c | |
598 | common/module.c | |
599 | common/addr_parsing.c) | |
600 | add_library(common_mountcephfs_objs OBJECT | |
601 | ${common_mountcephfs_files}) | |
602 | ||
603 | if(WITH_PROFILER) | |
604 | list(APPEND libcommon_files | |
605 | perfglue/cpu_profiler.cc) | |
606 | else() | |
607 | list(APPEND libcommon_files | |
608 | perfglue/disabled_stubs.cc) | |
609 | endif() | |
610 | ||
611 | add_library(common-objs OBJECT ${libcommon_files}) | |
612 | set(ceph_common_objs | |
613 | $<TARGET_OBJECTS:common_buffer_obj> | |
614 | $<TARGET_OBJECTS:common_texttable_obj> | |
615 | $<TARGET_OBJECTS:compressor_objs> | |
616 | $<TARGET_OBJECTS:common-objs> | |
617 | $<TARGET_OBJECTS:common_mountcephfs_objs> | |
618 | $<TARGET_OBJECTS:global_common_objs> | |
619 | $<TARGET_OBJECTS:crush_objs>) | |
620 | set(ceph_common_deps | |
621 | json_spirit erasure_code rt ${LIB_RESOLV} | |
31f18b77 FG |
622 | Boost::thread |
623 | Boost::system | |
624 | Boost::regex | |
625 | Boost::random | |
626 | Boost::program_options | |
627 | Boost::date_time | |
628 | Boost::iostreams | |
7c673cae FG |
629 | ${BLKID_LIBRARIES} |
630 | ${Backtrace_LIBRARIES} | |
631 | ${BLKIN_LIBRARIES} | |
632 | ${CRYPTO_LIBS} | |
633 | ${CMAKE_THREAD_LIBS_INIT} | |
634 | ${CMAKE_DL_LIBS}) | |
635 | if(HAVE_RDMA) | |
636 | list(APPEND ceph_common_deps ${RDMA_LIBRARY}) | |
637 | endif() | |
638 | if(NOT WITH_SYSTEM_BOOST) | |
639 | list(APPEND ceph_common_deps ${ZLIB_LIBRARIES}) | |
640 | endif() | |
641 | ||
642 | set_source_files_properties(${CMAKE_SOURCE_DIR}/src/ceph_ver.c | |
643 | ${CMAKE_SOURCE_DIR}/src/common/version.cc | |
644 | ${CMAKE_SOURCE_DIR}/src/test/encoding/ceph_dencoder.cc | |
645 | APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h) | |
646 | ||
647 | if(HAVE_ARMV8_CRC) | |
648 | add_library(common_crc_aarch64 STATIC common/crc32c_aarch64.c) | |
649 | set_target_properties(common_crc_aarch64 PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} ${ARMV8_CRC_COMPILE_FLAGS}") | |
650 | list(APPEND ceph_common_deps common_crc_aarch64) | |
651 | endif(HAVE_ARMV8_CRC) | |
652 | ||
653 | add_library(common STATIC ${ceph_common_objs}) | |
654 | target_link_libraries(common ${ceph_common_deps}) | |
655 | ||
656 | add_library(ceph-common SHARED ${ceph_common_objs}) | |
657 | target_link_libraries(ceph-common ${ceph_common_deps}) | |
658 | # appease dpkg-shlibdeps | |
659 | set_target_properties(ceph-common PROPERTIES | |
660 | SOVERSION 0 | |
661 | INSTALL_RPATH "") | |
662 | install(TARGETS ceph-common DESTINATION ${CMAKE_INSTALL_PKGLIBDIR}) | |
663 | ||
664 | add_library(common_utf8 STATIC common/utf8.c) | |
665 | ||
7c673cae FG |
666 | if(${WITH_LTTNG}) |
667 | add_subdirectory(tracing) | |
668 | add_dependencies(common-objs oprequest-tp) | |
669 | endif(${WITH_LTTNG}) | |
670 | ||
671 | add_subdirectory(global) | |
672 | ||
673 | add_subdirectory(lua) | |
674 | ||
675 | # rados object classes | |
676 | add_subdirectory(cls) | |
677 | ||
678 | # RADOS client/library | |
679 | add_subdirectory(osdc) | |
680 | ||
681 | add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc) | |
682 | ||
683 | add_subdirectory(include) | |
684 | add_subdirectory(librados) | |
685 | add_subdirectory(libradosstriper) | |
686 | ||
687 | if (WITH_MGR) | |
688 | set(mgr_srcs | |
689 | ceph_mgr.cc | |
690 | mon/PGMap.cc | |
691 | mgr/DaemonState.cc | |
692 | mgr/DaemonServer.cc | |
693 | mgr/ClusterState.cc | |
694 | mgr/PyModules.cc | |
695 | mgr/PyFormatter.cc | |
696 | mgr/PyState.cc | |
697 | mgr/MgrPyModule.cc | |
698 | mgr/MgrStandby.cc | |
c07f9fc5 FG |
699 | mgr/Mgr.cc |
700 | mgr/mgr_commands.cc) | |
7c673cae FG |
701 | add_executable(ceph-mgr ${mgr_srcs} |
702 | $<TARGET_OBJECTS:heap_profiler_objs>) | |
703 | target_include_directories(ceph-mgr PRIVATE "${PYTHON_INCLUDE_DIRS}") | |
704 | target_link_libraries(ceph-mgr osdc client global-static common | |
31f18b77 | 705 | Boost::python ${PYTHON_LIBRARIES} ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${ALLOC_LIBS}) |
7c673cae FG |
706 | install(TARGETS ceph-mgr DESTINATION bin) |
707 | endif (WITH_MGR) | |
708 | ||
709 | set(librados_config_srcs | |
710 | librados-config.cc) | |
711 | add_executable(librados-config ${librados_config_srcs}) | |
712 | target_link_libraries(librados-config librados global ${BLKID_LIBRARIES} ${RDMA_LIBRARIES} | |
713 | ${CMAKE_DL_LIBS}) | |
714 | ||
715 | install(TARGETS librados-config DESTINATION bin) | |
716 | ||
717 | # virtualenv base directory for ceph-disk and ceph-detect-init | |
718 | set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR}) | |
719 | if(NOT CEPH_BUILD_VIRTUALENV) | |
720 | set(CEPH_BUILD_VIRTUALENV /tmp) | |
721 | endif() | |
722 | ||
723 | add_subdirectory(pybind) | |
724 | add_subdirectory(ceph-disk) | |
725 | add_subdirectory(ceph-detect-init) | |
726 | ||
727 | ## dencoder | |
728 | CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA) | |
729 | if(HAS_VTA) | |
730 | set_source_files_properties(test/encoding/ceph_dencoder.cc | |
731 | PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments) | |
732 | endif() | |
733 | ||
734 | set(dencoder_srcs | |
735 | test/encoding/ceph_dencoder.cc | |
736 | $<TARGET_OBJECTS:common_texttable_obj> | |
737 | ) | |
738 | if(${WITH_RADOSGW}) | |
739 | list(APPEND dencoder_srcs | |
740 | rgw/rgw_dencoder.cc | |
741 | ) | |
742 | set(DENCODER_EXTRALIBS | |
743 | rgw_a | |
744 | cls_rgw_client | |
745 | ) | |
746 | endif(${WITH_RADOSGW}) | |
747 | if(WITH_RBD) | |
748 | set(DENCODER_EXTRALIBS | |
749 | ${DENCODER_EXTRALIBS} | |
750 | cls_rbd_client | |
751 | rbd_mirror_types | |
752 | rbd_types | |
753 | rbd_replay_types) | |
754 | if(WITH_KRBD) | |
755 | set(DENCODER_EXTRALIBS | |
756 | ${DENCODER_EXTRALIBS} | |
757 | krbd) | |
758 | endif() | |
759 | endif(WITH_RBD) | |
760 | ||
761 | add_executable(ceph-dencoder ${dencoder_srcs}) | |
762 | target_link_libraries(ceph-dencoder | |
763 | global | |
764 | os | |
765 | osd | |
766 | mds | |
767 | mon | |
768 | journal | |
769 | ${DENCODER_EXTRALIBS} | |
770 | cls_lock_client | |
771 | cls_refcount_client | |
772 | cls_log_client | |
773 | cls_statelog_client | |
774 | cls_version_client | |
775 | cls_replica_log_client | |
776 | cls_user_client | |
777 | cls_journal_client | |
778 | cls_timeindex_client | |
779 | ${EXTRALIBS} | |
780 | ${CMAKE_DL_LIBS} | |
781 | ) | |
782 | install(TARGETS ceph-dencoder DESTINATION bin) | |
783 | ||
784 | # Monitor | |
7c673cae FG |
785 | add_subdirectory(mon) |
786 | set(ceph_mon_srcs | |
787 | ceph_mon.cc) | |
788 | add_executable(ceph-mon ${ceph_mon_srcs} | |
789 | $<TARGET_OBJECTS:common_texttable_obj>) | |
790 | add_dependencies(ceph-mon erasure_code_plugins) | |
791 | target_link_libraries(ceph-mon mon common os global-static common | |
792 | ${EXTRALIBS} | |
793 | ${CMAKE_DL_LIBS}) | |
794 | install(TARGETS ceph-mon DESTINATION bin) | |
795 | ||
796 | # OSD/ObjectStore | |
797 | # make rocksdb statically | |
798 | ||
799 | if (NOT WITH_SYSTEM_ROCKSDB) | |
800 | set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON) | |
801 | ||
802 | if(ALLOCATOR STREQUAL "jemalloc") | |
803 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_JEMALLOC=ON) | |
804 | endif() | |
805 | ||
806 | if (WITH_CCACHE AND CCACHE_FOUND) | |
807 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=ccache) | |
808 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=${CMAKE_CXX_COMPILER}) | |
809 | else(WITH_CCACHE AND CCACHE_FOUND) | |
810 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) | |
811 | endif(WITH_CCACHE AND CCACHE_FOUND) | |
812 | ||
813 | # We really want to have the CRC32 calculation in RocksDB accelerated | |
814 | # with SSE 4.2. For details refer to rocksdb/util/crc32c.cc. | |
815 | if (HAVE_INTEL_SSE4_2) | |
816 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${SIMD_COMPILE_FLAGS}) | |
817 | else() | |
818 | list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_SSE42=OFF) | |
819 | endif() | |
820 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_AR=${CMAKE_AR}) | |
821 | list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) | |
822 | ||
823 | if (CMAKE_CXX_COMPILER_ID STREQUAL Clang) | |
824 | list(APPEND ROCKSDB_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF) | |
825 | endif() | |
826 | ||
827 | # we use an external project and copy the sources to bin directory to ensure | |
828 | # that object files are built outside of the source tree. | |
829 | include(ExternalProject) | |
830 | ExternalProject_Add(rocksdb_ext | |
831 | SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb | |
832 | CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS} | |
833 | BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rocksdb | |
834 | BUILD_COMMAND $(MAKE) rocksdb | |
835 | INSTALL_COMMAND "true") | |
836 | ||
837 | # force rocksdb make to be called on each time | |
838 | ExternalProject_Add_Step(rocksdb_ext forcebuild | |
839 | DEPENDEES configure | |
840 | DEPENDERS build | |
841 | COMMAND "true" | |
842 | ALWAYS 1) | |
843 | ||
844 | set(ROCKSDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include) | |
845 | ||
846 | add_library(rocksdb STATIC IMPORTED) | |
847 | add_dependencies(rocksdb rocksdb_ext) | |
848 | set_property(TARGET rocksdb PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rocksdb/librocksdb.a") | |
849 | set(ROCKSDB_LIBRARIES rocksdb) | |
850 | ||
851 | endif(NOT WITH_SYSTEM_ROCKSDB) | |
852 | ||
853 | include(TestBigEndian) | |
854 | test_big_endian(CEPH_BIG_ENDIAN) | |
855 | if(NOT CEPH_BIG_ENDIAN) | |
856 | set(CEPH_LITTLE_ENDIAN 1) | |
857 | endif() | |
858 | ||
859 | add_subdirectory(kv) | |
860 | add_subdirectory(os) | |
861 | ||
862 | set(cls_references_files objclass/class_api.cc) | |
863 | add_library(cls_references_objs OBJECT ${cls_references_files}) | |
864 | ||
865 | add_subdirectory(osd) | |
866 | ||
867 | set(ceph_osd_srcs | |
868 | ceph_osd.cc) | |
31f18b77 | 869 | add_executable(ceph-osd ${ceph_osd_srcs}) |
7c673cae FG |
870 | add_dependencies(ceph-osd erasure_code_plugins) |
871 | target_link_libraries(ceph-osd osd os global-static common | |
872 | ${BLKID_LIBRARIES} ${RDMA_LIBRARIES}) | |
873 | if(WITH_FUSE) | |
874 | target_link_libraries(ceph-osd ${FUSE_LIBRARIES}) | |
875 | endif() | |
876 | install(TARGETS ceph-osd DESTINATION bin) | |
877 | ||
878 | add_subdirectory(mds) | |
879 | set(ceph_mds_srcs | |
880 | ceph_mds.cc) | |
31f18b77 | 881 | add_executable(ceph-mds ${ceph_mds_srcs}) |
7c673cae | 882 | target_link_libraries(ceph-mds mds ${CMAKE_DL_LIBS} global-static common |
31f18b77 | 883 | Boost::thread) |
7c673cae FG |
884 | install(TARGETS ceph-mds DESTINATION bin) |
885 | ||
886 | add_subdirectory(erasure-code) | |
887 | ||
888 | # Support/Tools | |
889 | if(WITH_TESTS) | |
890 | add_subdirectory(googletest/googlemock) | |
891 | add_subdirectory(test) | |
892 | endif(WITH_TESTS) | |
893 | ||
894 | add_subdirectory(compressor) | |
895 | ||
896 | add_subdirectory(tools) | |
897 | ||
31f18b77 | 898 | # dmClock (after gmock) |
7c673cae | 899 | |
31f18b77 | 900 | add_subdirectory(dmclock/src) |
7c673cae | 901 | |
31f18b77 FG |
902 | option(WITH_DMCLOCK_TESTS |
903 | "enable the build of dmclock-tests and dmclock-data-struct tests binaries" | |
904 | OFF) | |
905 | if(WITH_TESTS AND WITH_DMCLOCK_TESTS) | |
906 | # note: add_test is not being called, so dmclock tests aren't part | |
907 | # of ceph tests | |
908 | add_subdirectory(dmclock/test) | |
909 | add_subdirectory(dmclock/support/test) | |
910 | endif(WITH_TESTS AND WITH_DMCLOCK_TESTS) | |
7c673cae | 911 | |
31f18b77 | 912 | if(HAVE_INTEL AND HAVE_BETTER_YASM_ELF64) |
7c673cae | 913 | add_subdirectory(crypto/isa-l) |
31f18b77 | 914 | endif(HAVE_INTEL AND HAVE_BETTER_YASM_ELF64) |
7c673cae FG |
915 | |
916 | if(WITH_TESTS) | |
917 | ||
918 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in | |
919 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY) | |
920 | ||
921 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in | |
922 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY) | |
923 | endif(WITH_TESTS) | |
924 | ||
925 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in | |
926 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) | |
927 | ||
928 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-crush-location.in | |
929 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crush-location @ONLY) | |
930 | ||
931 | configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in | |
932 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) | |
933 | ||
934 | configure_file(ceph-post-file.in | |
935 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) | |
936 | ||
937 | if(WITH_TESTS) | |
938 | install(PROGRAMS | |
939 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack | |
940 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage | |
941 | DESTINATION bin) | |
942 | endif(WITH_TESTS) | |
943 | ||
944 | install(PROGRAMS | |
945 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph | |
946 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crush-location | |
947 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file | |
948 | ${CMAKE_SOURCE_DIR}/src/ceph-run | |
949 | ${CMAKE_SOURCE_DIR}/src/ceph-rest-api | |
950 | ${CMAKE_SOURCE_DIR}/src/ceph-clsinfo | |
951 | DESTINATION bin) | |
952 | install(PROGRAMS | |
953 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph | |
954 | DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d | |
955 | RENAME ceph) | |
956 | ||
957 | install(FILES | |
958 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com | |
959 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com.pub | |
960 | ${CMAKE_SOURCE_DIR}/share/known_hosts_drop.ceph.com | |
961 | DESTINATION ${CMAKE_INSTALL_DATADIR}/ceph) | |
962 | ||
963 | install(PROGRAMS | |
964 | ceph_common.sh | |
965 | ceph-osd-prestart.sh | |
966 | DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph) | |
967 | ||
968 | install(PROGRAMS | |
969 | ${CMAKE_SOURCE_DIR}/src/ceph-create-keys | |
970 | # ${CMAKE_SOURCE_DIR}/src/ceph-disk | |
7c673cae FG |
971 | DESTINATION sbin) |
972 | ||
973 | add_subdirectory(bash_completion) | |
974 | ||
975 | if(WITH_LIBCEPHFS OR WITH_KRBD) | |
976 | set(parse_secret_files | |
977 | common/secret.c) | |
978 | add_library(parse_secret_objs OBJECT ${parse_secret_files}) | |
979 | endif() | |
980 | ||
981 | add_subdirectory(client) | |
982 | ||
983 | if(WITH_LIBCEPHFS) | |
984 | set(libcephfs_srcs libcephfs.cc) | |
985 | add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs}) | |
986 | target_link_libraries(cephfs LINK_PRIVATE client ceph-common | |
987 | ${CRYPTO_LIBS} ${EXTRALIBS}) | |
988 | if(ENABLE_SHARED) | |
989 | foreach(name ceph-common client osdc) | |
990 | set(CEPHFS_LINK_FLAGS "${CEPHFS_LINK_FLAGS} -Wl,--exclude-libs,lib${name}.a") | |
991 | endforeach() | |
992 | set_target_properties(cephfs PROPERTIES | |
993 | OUTPUT_NAME cephfs | |
994 | VERSION 2.0.0 | |
995 | SOVERSION 2 | |
996 | LINK_FLAGS ${CEPHFS_LINK_FLAGS}) | |
997 | endif(ENABLE_SHARED) | |
998 | install(TARGETS cephfs DESTINATION ${CMAKE_INSTALL_LIBDIR}) | |
999 | install(DIRECTORY | |
1000 | "${CMAKE_SOURCE_DIR}/src/include/cephfs" | |
c07f9fc5 | 1001 | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
7c673cae FG |
1002 | set(ceph_syn_srcs |
1003 | ceph_syn.cc | |
1004 | client/SyntheticClient.cc) | |
1005 | add_executable(ceph-syn ${ceph_syn_srcs}) | |
1006 | target_link_libraries(ceph-syn client global-static common) | |
1007 | ||
1008 | set(mount_ceph_srcs | |
1009 | mount/mount.ceph.c) | |
1010 | add_executable(mount.ceph ${mount_ceph_srcs} | |
1011 | $<TARGET_OBJECTS:parse_secret_objs> | |
1012 | $<TARGET_OBJECTS:common_mountcephfs_objs>) | |
1013 | set_target_properties(mount.ceph PROPERTIES | |
1014 | INSTALL_RPATH "") | |
1015 | target_link_libraries(mount.ceph ${KEYUTILS_LIBRARIES}) | |
1016 | ||
1017 | install(TARGETS ceph-syn DESTINATION bin) | |
1018 | install(TARGETS mount.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) | |
1019 | endif(WITH_LIBCEPHFS) | |
1020 | ||
1021 | if(WITH_FUSE) | |
1022 | set(ceph_fuse_srcs | |
1023 | ceph_fuse.cc | |
1024 | client/fuse_ll.cc) | |
1025 | add_executable(ceph-fuse ${ceph_fuse_srcs}) | |
1026 | target_link_libraries(ceph-fuse ${ALLOC_LIBS} ${FUSE_LIBRARIES} | |
1027 | client common global-static) | |
1028 | set_target_properties(ceph-fuse PROPERTIES COMPILE_FLAGS "-I${FUSE_INCLUDE_DIRS}") | |
1029 | install(TARGETS ceph-fuse DESTINATION bin) | |
1030 | install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) | |
1031 | endif(WITH_FUSE) | |
1032 | ||
1033 | add_subdirectory(journal) | |
1034 | ||
1035 | if(WITH_RBD) | |
1036 | if(WITH_KRBD) | |
1037 | add_library(krbd STATIC krbd.cc | |
1038 | $<TARGET_OBJECTS:parse_secret_objs>) | |
1039 | target_link_libraries(krbd ${KEYUTILS_LIBRARIES} ${UDEV_LIBRARIES}) | |
1040 | endif() | |
1041 | add_subdirectory(librbd) | |
1042 | if(WITH_FUSE) | |
1043 | add_subdirectory(rbd_fuse) | |
1044 | endif() | |
1045 | ||
1046 | install(PROGRAMS | |
1047 | ${CMAKE_SOURCE_DIR}/src/ceph-rbdnamer | |
1048 | ${CMAKE_SOURCE_DIR}/src/rbd-replay-many | |
1049 | ${CMAKE_SOURCE_DIR}/src/rbdmap | |
1050 | DESTINATION ${CMAKE_INSTALL_BINDIR}) | |
1051 | add_subdirectory(rbd_replay) | |
1052 | endif(WITH_RBD) | |
1053 | ||
1054 | # RadosGW | |
1055 | if(WITH_KVS) | |
1056 | add_subdirectory(key_value_store) | |
1057 | endif(WITH_KVS) | |
1058 | ||
1059 | if(WITH_RADOSGW) | |
1060 | set(civetweb_common_files civetweb/src/civetweb.c) | |
1061 | add_library(civetweb_common_objs OBJECT ${civetweb_common_files}) | |
1062 | target_include_directories(civetweb_common_objs PRIVATE | |
1063 | "${CMAKE_SOURCE_DIR}/src/civetweb/include") | |
1064 | set_property(TARGET civetweb_common_objs | |
1065 | APPEND PROPERTY COMPILE_DEFINITIONS USE_IPV6=1) | |
1066 | if(USE_OPENSSL) | |
1067 | set_property(TARGET civetweb_common_objs | |
1068 | APPEND PROPERTY COMPILE_DEFINITIONS NO_SSL_DL=1) | |
1069 | target_include_directories(civetweb_common_objs PRIVATE | |
1070 | "${SSL_INCLUDE_DIR}") | |
1071 | endif(USE_OPENSSL) | |
1072 | if (LIBSSL_SONAME) | |
1073 | set_property(TARGET civetweb_common_objs | |
1074 | APPEND PROPERTY COMPILE_DEFINITIONS SSL_LIB="${LIBSSL_SONAME}") | |
1075 | set_property(TARGET civetweb_common_objs | |
1076 | APPEND PROPERTY COMPILE_DEFINITIONS CRYPTO_LIB="${LIBCRYPTO_SONAME}") | |
1077 | endif() | |
1078 | ||
1079 | add_subdirectory(rgw) | |
1080 | ||
1081 | endif(WITH_RADOSGW) | |
1082 | ||
1083 | install(FILES | |
1084 | sample.ceph.conf | |
1085 | DESTINATION ${CMAKE_INSTALL_DOCDIR}) | |
7c673cae FG |
1086 | |
1087 | # Now create a useable config.h | |
1088 | configure_file( | |
1089 | ${CMAKE_SOURCE_DIR}/src/include/config-h.in.cmake | |
1090 | ${CMAKE_BINARY_DIR}/include/acconfig.h | |
1091 | ) | |
1092 | ||
1093 | add_subdirectory(brag) | |
1094 | ||
1095 | # Everything you need to spin up a cluster with vstart.sh | |
1096 | add_custom_target(vstart-base DEPENDS | |
1097 | ceph-osd | |
1098 | ceph-mon | |
1099 | ceph-mgr | |
1100 | ceph-authtool | |
1101 | ceph-conf | |
1102 | monmaptool | |
1103 | crushtool | |
1104 | rados | |
1105 | cython_rados | |
1106 | ) | |
1107 | ||
1108 | add_custom_target(vstart DEPENDS | |
1109 | vstart-base | |
1110 | ceph-mds) | |
1111 | if(WITH_RADOSGW) | |
1112 | add_dependencies(vstart radosgw radosgw-admin) | |
1113 | endif(WITH_RADOSGW) | |
1114 | ||
1115 | if(WITH_LTTNG) | |
1116 | add_dependencies(vstart tracepoint_libraries) | |
1117 | endif(WITH_LTTNG) | |
1118 | ||
1119 | # Everything you need to run CephFS tests | |
1120 | add_custom_target(cephfs_testing DEPENDS | |
1121 | vstart | |
1122 | rados | |
1123 | cython_modules | |
1124 | cephfs | |
1125 | cls_cephfs | |
1126 | ceph-fuse | |
1127 | ceph-dencoder | |
1128 | cephfs-journal-tool | |
1129 | cephfs-data-scan | |
1130 | cephfs-table-tool) | |
1131 | ||
1132 | if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git") | |
1133 | add_custom_target( | |
1134 | git-update | |
1135 | COMMAND git submodule sync | |
1136 | COMMAND git submodule update --force --init --recursive | |
1137 | WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") | |
1138 | endif() | |
1139 | ||
1140 | add_subdirectory(script) | |
1141 | ||
1142 | if(WITH_EMBEDDED) | |
1143 | add_subdirectory(libcephd) | |
1144 | endif() |