]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | include(GetGitRevisionDescription) |
2 | ||
7c673cae FG |
3 | include(GNUInstallDirs) |
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 | ||
7c673cae FG |
25 | add_definitions("-DHAVE_CONFIG_H -D__CEPH__ -D_REENTRANT -D_THREAD_SAFE -D__STDC_FORMAT_MACROS") |
26 | add_definitions("-D_FILE_OFFSET_BITS=64") | |
27 | if(LINUX) | |
28 | add_definitions("-D_GNU_SOURCE") | |
29 | endif() | |
30 | ||
31 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wtype-limits -Wignored-qualifiers -Winit-self") | |
32 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Werror=format-security -fno-strict-aliasing -fsigned-char") | |
33 | ||
11fdf7f2 | 34 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-1024") |
7c673cae FG |
35 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor") |
36 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas") | |
11fdf7f2 | 37 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-ignored-qualifiers") |
7c673cae FG |
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") | |
11fdf7f2 TL |
42 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-new-ttp-matching") |
43 | # cmake does not add '-pie' for executables even if | |
44 | # CMAKE_POSITION_INDEPENDENT_CODE is TRUE. | |
45 | if(EXE_LINKER_USE_PIE) | |
46 | if (NOT WITH_OSD_INSTRUMENT_FUNCTIONS AND NOT HAVE_SEASTAR) | |
47 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") | |
48 | endif() | |
31f18b77 | 49 | endif() |
7c673cae | 50 | elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) |
11fdf7f2 TL |
51 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_EXPORTS_C_FLAG}") |
52 | set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -rdynamic -export-dynamic ${CMAKE_EXE_EXPORTS_C_FLAG}") | |
7c673cae FG |
53 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override -Wno-mismatched-tags") |
54 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field") | |
11fdf7f2 | 55 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-address-of-packed-member") |
7c673cae FG |
56 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") |
57 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-local-typedef") | |
58 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-varargs") | |
59 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-designator") | |
60 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-deprecated-register") | |
11fdf7f2 TL |
61 | if(APPLE) |
62 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup") | |
63 | endif() | |
7c673cae FG |
64 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) |
65 | set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") | |
66 | ||
67 | if(NOT CMAKE_BUILD_TYPE) | |
d2e6a577 | 68 | set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Default BUILD_TYPE is RelWithDebInfo, other options are: Debug, Release, and MinSizeRel." FORCE) |
7c673cae FG |
69 | endif() |
70 | ||
11fdf7f2 TL |
71 | if(WITH_CEPH_DEBUG_MUTEX OR CMAKE_BUILD_TYPE STREQUAL Debug) |
72 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCEPH_DEBUG_MUTEX") | |
7c673cae FG |
73 | endif() |
74 | ||
75 | include(CheckCCompilerFlag) | |
76 | if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
31f18b77 | 77 | CHECK_C_COMPILER_FLAG("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2" HAS_FORTIFY_SOURCE) |
7c673cae FG |
78 | if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) |
79 | if(HAS_FORTIFY_SOURCE) | |
31f18b77 | 80 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") |
11fdf7f2 | 81 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") |
7c673cae FG |
82 | endif() |
83 | endif() | |
84 | CHECK_C_COMPILER_FLAG(-fstack-protector-strong HAS_STACK_PROTECT) | |
85 | if (HAS_STACK_PROTECT) | |
86 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong") | |
87 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") | |
88 | endif() | |
89 | endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) | |
90 | ||
91 | include(SIMDExt) | |
92 | if(HAVE_INTEL) | |
93 | set(CMAKE_ASM_COMPILER ${PROJECT_SOURCE_DIR}/src/yasm-wrapper) | |
11fdf7f2 TL |
94 | if(APPLE) |
95 | set(object_format "macho64") | |
96 | else() | |
97 | set(object_format "elf64") | |
98 | endif() | |
99 | set(CMAKE_ASM_FLAGS "-f ${object_format}") | |
100 | include(CheckYasm) | |
101 | check_yasm_support(${object_format} | |
102 | HAVE_GOOD_YASM_ELF64 | |
103 | HAVE_BETTER_YASM_ELF64) | |
7c673cae FG |
104 | endif() |
105 | ||
11fdf7f2 TL |
106 | |
107 | # require c++17 | |
108 | if(CMAKE_VERSION VERSION_LESS "3.8") | |
7c673cae | 109 | include(CheckCXXCompilerFlag) |
11fdf7f2 TL |
110 | CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17) |
111 | if(NOT COMPILER_SUPPORTS_CXX17) | |
7c673cae | 112 | message(FATAL_ERROR |
11fdf7f2 | 113 | "The compiler ${CMAKE_CXX_COMPILER} has no C++17 support.") |
7c673cae | 114 | endif() |
11fdf7f2 | 115 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") |
7c673cae FG |
116 | include(CheckCCompilerFlag) |
117 | CHECK_C_COMPILER_FLAG("-std=gnu99" COMPILER_SUPPORTS_GNU99) | |
118 | if(NOT COMPILER_SUPPORTS_GNU99) | |
119 | message(FATAL_ERROR | |
120 | "The compiler ${CMAKE_C_COMPILER} has no GNU C99 support.") | |
121 | endif() | |
122 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") | |
123 | else() | |
11fdf7f2 | 124 | set(CMAKE_CXX_STANDARD 17) |
7c673cae FG |
125 | set(CMAKE_CXX_EXTENSIONS OFF) |
126 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
127 | set(CMAKE_C_STANDARD 99) | |
128 | # we use `asm()` to inline assembly, so enable the GNU extension | |
129 | set(CMAKE_C_EXTENSIONS ON) | |
130 | set(C_STANDARD_REQUIRED ON) | |
131 | endif() | |
132 | ||
11fdf7f2 TL |
133 | include(CheckCXXSourceCompiles) |
134 | CHECK_CXX_SOURCE_COMPILES(" | |
135 | #include <map> | |
136 | using Map = std::map<int, int>; | |
137 | int main() { | |
138 | Map m; | |
139 | m.merge(Map{}); | |
140 | } | |
141 | " HAVE_STDLIB_MAP_SPLICING) | |
142 | ||
7c673cae FG |
143 | ## Handle diagnostics color if compiler supports them. |
144 | CHECK_C_COMPILER_FLAG("-fdiagnostics-color=always" | |
145 | COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) | |
146 | ||
147 | set(DIAGNOSTICS_COLOR "auto" | |
148 | 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.") | |
149 | ||
150 | if(COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) | |
151 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") | |
152 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") | |
153 | endif() | |
154 | ||
11fdf7f2 TL |
155 | set(EXTRALIBS ${CMAKE_DL_LIBS}) |
156 | if(NOT APPLE) | |
157 | list(APPEND EXTRALIBS rt) | |
158 | endif() | |
159 | if(LINUX OR APPLE) | |
7c673cae FG |
160 | set(LIB_RESOLV resolv) |
161 | list(APPEND EXTRALIBS ${LIB_RESOLV}) | |
11fdf7f2 | 162 | endif() |
7c673cae FG |
163 | |
164 | if(${ENABLE_COVERAGE}) | |
165 | find_program(HAVE_GCOV gcov) | |
166 | if(NOT HAVE_GCOV) | |
167 | message(FATAL_ERROR "Coverage Enabled but gcov Not Found") | |
168 | endif(NOT HAVE_GCOV) | |
169 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0") | |
170 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") | |
171 | list(APPEND EXTRALIBS gcov) | |
172 | endif(${ENABLE_COVERAGE}) | |
173 | ||
11fdf7f2 | 174 | include_directories(${NSS_INCLUDE_DIR} ${NSPR_INCLUDE_DIR}) |
7c673cae FG |
175 | |
176 | set(GCOV_PREFIX_STRIP 4) | |
177 | ||
31f18b77 FG |
178 | # the src/.git_version file may be written out by make-dist; otherwise |
179 | # we pull the git version from .git | |
7c673cae FG |
180 | option(ENABLE_GIT_VERSION "build Ceph with git version string" ON) |
181 | if(${ENABLE_GIT_VERSION}) | |
182 | get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER) | |
183 | git_describe(CEPH_GIT_NICE_VER --always) | |
184 | #if building from a source tarball via make-dist | |
185 | if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") | |
186 | message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER") | |
187 | file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG) | |
188 | list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER) | |
189 | list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER) | |
190 | endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND") | |
191 | # remove 'v' prefix from raw git version | |
192 | string(SUBSTRING ${CEPH_GIT_NICE_VER} 1 -1 CEPH_GIT_NICE_VER) | |
193 | else(${ENABLE_GIT_VERSION}) | |
194 | set(CEPH_GIT_VER "no_version") | |
195 | set(CEPH_GIT_NICE_VER "Development") | |
196 | endif(${ENABLE_GIT_VERSION}) | |
197 | ||
31f18b77 FG |
198 | # the src/ceph_release file is 3 lines, |
199 | # <release number, e.g. '12' for luminous> | |
200 | # <release name, e.g. 'luminous'> | |
201 | # <release type: 'dev' for x.0.z, 'rc' or x.1.z, or 'stable' or x.2.z> | |
202 | # note that the release name is semi-redundant and must match CEPH_RELEASE_* | |
203 | # definitions in include/rados.h and common/ceph_strings.c. | |
204 | file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/ceph_release CEPH_RELEASE_FILE) | |
205 | list(GET CEPH_RELEASE_FILE 0 CEPH_RELEASE) | |
206 | list(GET CEPH_RELEASE_FILE 1 CEPH_RELEASE_NAME) | |
207 | list(GET CEPH_RELEASE_FILE 2 CEPH_RELEASE_TYPE) | |
208 | ||
7c673cae FG |
209 | option(WITH_OCF "build OCF-compliant cluster resource agent" OFF) |
210 | if(WITH_OCF) | |
211 | add_subdirectory(ocf) | |
212 | endif() | |
213 | ||
214 | option(WITH_CEPHFS_JAVA "build libcephfs Java bindings" OFF) | |
215 | if(WITH_CEPHFS_JAVA) | |
216 | add_subdirectory(java) | |
217 | endif() | |
218 | ||
219 | # Python stuff | |
11fdf7f2 TL |
220 | option(WITH_PYTHON2 "build python2 bindings" ON) |
221 | if(WITH_PYTHON2) | |
222 | find_package(PythonInterp 2 REQUIRED) | |
223 | find_package(PythonLibs ${PYTHON_VERSION_STRING} EXACT REQUIRED) | |
224 | endif() | |
225 | ||
226 | set(WITH_PYTHON3 "OFF" CACHE STRING "build python3 bindings with specified python3 version") | |
227 | if(WITH_PYTHON3) | |
228 | if(WITH_PYTHON3 MATCHES "^(1|ON|YES|TRUE|Y)$") | |
229 | set(WITH_PYTHON3 "3") | |
7c673cae | 230 | endif() |
11fdf7f2 TL |
231 | find_package(Python3Interp ${WITH_PYTHON3} REQUIRED) |
232 | find_package(Python3Libs ${PYTHON3_VERSION_STRING} EXACT REQUIRED) | |
233 | endif() | |
234 | ||
235 | # the major version of the python bindings as a dependency of other | |
236 | # targets | |
237 | if(WITH_PYTHON2) | |
238 | set(PY_BINDING_INFIX "") | |
239 | else() | |
240 | set(PY_BINDING_INFIX 3) | |
7c673cae FG |
241 | endif() |
242 | ||
243 | if(HAVE_XIO) | |
244 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${XIO_INCLUDE_DIR}") | |
11fdf7f2 | 245 | list(APPEND EXTRALIBS ${XIO_LIBRARY} pthread) |
7c673cae FG |
246 | endif(HAVE_XIO) |
247 | ||
7c673cae FG |
248 | # sort out which allocator to use |
249 | if(ALLOCATOR STREQUAL "tcmalloc") | |
11fdf7f2 | 250 | set(ALLOC_LIBS gperftools::tcmalloc) |
7c673cae | 251 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") |
7c673cae | 252 | elseif(ALLOCATOR STREQUAL "tcmalloc_minimal") |
11fdf7f2 | 253 | set(ALLOC_LIBS gperftools::tcmalloc_minimal) |
7c673cae | 254 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") |
7c673cae | 255 | elseif(ALLOCATOR STREQUAL "jemalloc") |
11fdf7f2 | 256 | set(ALLOC_LIBS JeMalloc::JeMalloc) |
7c673cae | 257 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") |
7c673cae FG |
258 | endif() |
259 | ||
7c673cae FG |
260 | if (WITH_BLKIN) |
261 | add_subdirectory(blkin/blkin-lib) | |
262 | endif(WITH_BLKIN) | |
263 | ||
264 | # Common infrastructure | |
265 | configure_file( | |
266 | ${CMAKE_SOURCE_DIR}/src/ceph_ver.h.in.cmake | |
267 | ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h | |
268 | @ONLY) | |
269 | ||
7c673cae FG |
270 | set(mds_files) |
271 | list(APPEND mds_files | |
272 | mds/MDSMap.cc | |
273 | mds/FSMap.cc | |
274 | mds/FSMapUser.cc | |
275 | mds/inode_backtrace.cc | |
276 | mds/mdstypes.cc | |
277 | mds/flock.cc) | |
278 | ||
7c673cae FG |
279 | add_subdirectory(json_spirit) |
280 | ||
11fdf7f2 | 281 | include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/xxHash") |
31f18b77 | 282 | include_directories(SYSTEM "${CMAKE_SOURCE_DIR}/src/rapidjson/include") |
7c673cae | 283 | |
11fdf7f2 TL |
284 | if(WITH_SEASTAR) |
285 | find_package(fmt 5.2.1 QUIET) | |
286 | if(NOT fmt_FOUND) | |
287 | message(STATUS "Could not find fmt, will build it") | |
288 | add_subdirectory(seastar/fmt) | |
289 | endif() | |
290 | find_package(c-ares 1.13.0 QUIET) | |
291 | if(NOT c-ares_FOUND) | |
292 | message(STATUS "Could not find c-ares, will build it") | |
293 | include(Buildc-ares) | |
294 | build_c_ares() | |
295 | endif() | |
296 | macro(find_package name) | |
297 | if(NOT TARGET ${name}) | |
298 | _find_package(${ARGV}) | |
299 | endif() | |
300 | endmacro () | |
301 | set(Seastar_HWLOC OFF CACHE BOOL "" FORCE) | |
302 | set(Seastar_STD_OPTIONAL_VARIANT_STRINGVIEW ON CACHE BOOL "" FORCE) | |
303 | set(Seastar_CXX_FLAGS "-Wno-sign-compare;-Wno-attributes;-Wno-pessimizing-move;-Wno-address-of-packed-member" CACHE STRING "" FORCE) | |
304 | add_subdirectory(seastar) | |
305 | # create the directory so cmake won't complain when looking at the imported | |
306 | # target: Seastar exports this directory created at build-time | |
307 | file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen/include") | |
308 | add_subdirectory(crimson) | |
309 | endif() | |
7c673cae FG |
310 | |
311 | set(libcommon_files | |
312 | ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h | |
313 | ceph_ver.c | |
7c673cae | 314 | xxHash/xxhash.c |
7c673cae | 315 | log/Log.cc |
7c673cae FG |
316 | mon/MonCap.cc |
317 | mon/MonClient.cc | |
318 | mon/MonMap.cc | |
11fdf7f2 | 319 | mon/MonSub.cc |
7c673cae | 320 | mgr/MgrClient.cc |
31f18b77 | 321 | mon/PGMap.cc |
224ce89b | 322 | mgr/ServiceMap.cc |
7c673cae FG |
323 | osd/ECMsgTypes.cc |
324 | osd/HitSet.cc | |
7c673cae FG |
325 | osd/OSDMap.cc |
326 | osd/OSDMapMapping.cc | |
7c673cae | 327 | osd/osd_types.cc |
11fdf7f2 | 328 | osd/PGPeeringEvent.cc |
7c673cae | 329 | osd/OpRequest.cc |
7c673cae FG |
330 | osdc/Striper.cc |
331 | osdc/Objecter.cc | |
11fdf7f2 | 332 | librbd/Features.cc |
7c673cae | 333 | ${mds_files}) |
11fdf7f2 TL |
334 | set_source_files_properties(ceph_ver.c |
335 | APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/include/ceph_ver.h) | |
336 | add_library(common-objs OBJECT ${libcommon_files}) | |
7c673cae | 337 | |
3efd9988 | 338 | CHECK_C_COMPILER_FLAG("-fvar-tracking-assignments" HAS_VTA) |
11fdf7f2 TL |
339 | add_subdirectory(auth) |
340 | add_subdirectory(common) | |
341 | add_subdirectory(crush) | |
342 | add_subdirectory(msg) | |
343 | add_subdirectory(arch) | |
7c673cae | 344 | |
7c673cae | 345 | set(ceph_common_objs |
11fdf7f2 TL |
346 | $<TARGET_OBJECTS:common-auth-objs> |
347 | $<TARGET_OBJECTS:common-common-objs> | |
348 | $<TARGET_OBJECTS:common-msg-objs> | |
7c673cae FG |
349 | $<TARGET_OBJECTS:common_buffer_obj> |
350 | $<TARGET_OBJECTS:common_texttable_obj> | |
351 | $<TARGET_OBJECTS:compressor_objs> | |
352 | $<TARGET_OBJECTS:common-objs> | |
353 | $<TARGET_OBJECTS:common_mountcephfs_objs> | |
354 | $<TARGET_OBJECTS:global_common_objs> | |
355 | $<TARGET_OBJECTS:crush_objs>) | |
356 | set(ceph_common_deps | |
11fdf7f2 TL |
357 | json_spirit erasure_code arch crc32 |
358 | ${LIB_RESOLV} | |
31f18b77 FG |
359 | Boost::thread |
360 | Boost::system | |
31f18b77 FG |
361 | Boost::random |
362 | Boost::program_options | |
363 | Boost::date_time | |
364 | Boost::iostreams | |
7c673cae FG |
365 | ${BLKID_LIBRARIES} |
366 | ${Backtrace_LIBRARIES} | |
367 | ${BLKIN_LIBRARIES} | |
368 | ${CRYPTO_LIBS} | |
11fdf7f2 | 369 | ${GSSAPI_LIBRARIES} |
7c673cae FG |
370 | ${CMAKE_THREAD_LIBS_INIT} |
371 | ${CMAKE_DL_LIBS}) | |
11fdf7f2 TL |
372 | if(HAVE_UDEV) |
373 | list(APPEND ceph_common_deps ${UDEV_LIBRARIES}) | |
374 | endif() | |
375 | ||
376 | if(HAVE_VERBS) | |
377 | list(APPEND ceph_common_deps IBVerbs::verbs) | |
7c673cae | 378 | endif() |
11fdf7f2 TL |
379 | |
380 | if(HAVE_RDMACM) | |
381 | list(APPEND ceph_common_deps RDMA::RDMAcm) | |
382 | endif() | |
383 | ||
7c673cae FG |
384 | if(NOT WITH_SYSTEM_BOOST) |
385 | list(APPEND ceph_common_deps ${ZLIB_LIBRARIES}) | |
386 | endif() | |
387 | ||
11fdf7f2 TL |
388 | if(HAVE_QATZIP) |
389 | list(APPEND ceph_common_deps ${QATZIP_LIBRARIES}) | |
390 | endif() | |
7c673cae | 391 | |
11fdf7f2 TL |
392 | if(WITH_DPDK) |
393 | list(APPEND ceph_common_deps common_async_dpdk) | |
394 | endif() | |
7c673cae FG |
395 | |
396 | add_library(common STATIC ${ceph_common_objs}) | |
397 | target_link_libraries(common ${ceph_common_deps}) | |
398 | ||
399 | add_library(ceph-common SHARED ${ceph_common_objs}) | |
400 | target_link_libraries(ceph-common ${ceph_common_deps}) | |
401 | # appease dpkg-shlibdeps | |
402 | set_target_properties(ceph-common PROPERTIES | |
403 | SOVERSION 0 | |
404 | INSTALL_RPATH "") | |
11fdf7f2 | 405 | if(NOT APPLE AND NOT FREEBSD) |
91327a77 AA |
406 | # Apple uses Mach-O, not ELF. so this option does not apply to APPLE. |
407 | # | |
408 | # prefer the local symbol definitions when binding references to global | |
409 | # symbols. otherwise we could reference the symbols defined by the application | |
410 | # with the same name, instead of using the one defined in libceph-common. | |
411 | # in other words, we require libceph-common to use local symbols, even if redefined | |
412 | # in application". | |
413 | set_property( | |
414 | TARGET ceph-common | |
415 | APPEND APPEND_STRING | |
416 | PROPERTY LINK_FLAGS "-Wl,-Bsymbolic -Wl,-Bsymbolic-functions") | |
417 | endif() | |
418 | ||
11fdf7f2 TL |
419 | install( |
420 | TARGETS ceph-common | |
421 | LIBRARY | |
422 | DESTINATION ${CEPH_INSTALL_PKGLIBDIR} | |
423 | NAMELINK_SKIP) | |
7c673cae | 424 | |
7c673cae FG |
425 | if(${WITH_LTTNG}) |
426 | add_subdirectory(tracing) | |
427 | add_dependencies(common-objs oprequest-tp) | |
428 | endif(${WITH_LTTNG}) | |
429 | ||
430 | add_subdirectory(global) | |
431 | ||
432 | add_subdirectory(lua) | |
433 | ||
434 | # rados object classes | |
435 | add_subdirectory(cls) | |
436 | ||
437 | # RADOS client/library | |
438 | add_subdirectory(osdc) | |
439 | ||
11fdf7f2 TL |
440 | # heal_profiler |
441 | add_subdirectory(perfglue) | |
442 | ||
7c673cae FG |
443 | add_library(rados_snap_set_diff_obj OBJECT librados/snap_set_diff.cc) |
444 | ||
11fdf7f2 TL |
445 | option(WITH_LIBRADOSSTRIPER "build with libradosstriper support" ON) |
446 | ||
7c673cae FG |
447 | add_subdirectory(include) |
448 | add_subdirectory(librados) | |
7c673cae | 449 | |
11fdf7f2 TL |
450 | if(WITH_LIBRADOSSTRIPER) |
451 | add_subdirectory(libradosstriper) | |
452 | endif() | |
453 | ||
454 | if(WITH_MGR) | |
455 | add_subdirectory(mgr) | |
456 | endif() | |
7c673cae FG |
457 | |
458 | set(librados_config_srcs | |
459 | librados-config.cc) | |
460 | add_executable(librados-config ${librados_config_srcs}) | |
11fdf7f2 | 461 | target_link_libraries(librados-config librados global ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${GSSAPI_LIBRARIES}) |
7c673cae FG |
462 | |
463 | install(TARGETS librados-config DESTINATION bin) | |
464 | ||
465 | # virtualenv base directory for ceph-disk and ceph-detect-init | |
466 | set(CEPH_BUILD_VIRTUALENV $ENV{TMPDIR}) | |
467 | if(NOT CEPH_BUILD_VIRTUALENV) | |
a8e16298 | 468 | set(CEPH_BUILD_VIRTUALENV ${CMAKE_BINARY_DIR}) |
7c673cae FG |
469 | endif() |
470 | ||
471 | add_subdirectory(pybind) | |
d2e6a577 | 472 | add_subdirectory(ceph-volume) |
7c673cae FG |
473 | |
474 | # Monitor | |
7c673cae FG |
475 | add_subdirectory(mon) |
476 | set(ceph_mon_srcs | |
477 | ceph_mon.cc) | |
478 | add_executable(ceph-mon ${ceph_mon_srcs} | |
479 | $<TARGET_OBJECTS:common_texttable_obj>) | |
480 | add_dependencies(ceph-mon erasure_code_plugins) | |
11fdf7f2 | 481 | target_link_libraries(ceph-mon mon os global-static ceph-common |
7c673cae | 482 | ${EXTRALIBS} |
11fdf7f2 | 483 | ${CMAKE_DL_LIBS} ${GSSAPI_LIBRARIES}) |
7c673cae FG |
484 | install(TARGETS ceph-mon DESTINATION bin) |
485 | ||
486 | # OSD/ObjectStore | |
487 | # make rocksdb statically | |
488 | ||
11fdf7f2 TL |
489 | if(NOT WITH_SYSTEM_ROCKSDB) |
490 | include(BuildRocksDB) | |
491 | build_rocksdb() | |
7c673cae FG |
492 | endif(NOT WITH_SYSTEM_ROCKSDB) |
493 | ||
494 | include(TestBigEndian) | |
495 | test_big_endian(CEPH_BIG_ENDIAN) | |
496 | if(NOT CEPH_BIG_ENDIAN) | |
497 | set(CEPH_LITTLE_ENDIAN 1) | |
498 | endif() | |
499 | ||
500 | add_subdirectory(kv) | |
501 | add_subdirectory(os) | |
502 | ||
7c673cae FG |
503 | add_subdirectory(osd) |
504 | ||
505 | set(ceph_osd_srcs | |
506 | ceph_osd.cc) | |
31f18b77 | 507 | add_executable(ceph-osd ${ceph_osd_srcs}) |
7c673cae FG |
508 | add_dependencies(ceph-osd erasure_code_plugins) |
509 | target_link_libraries(ceph-osd osd os global-static common | |
11fdf7f2 | 510 | ${BLKID_LIBRARIES}) |
7c673cae FG |
511 | if(WITH_FUSE) |
512 | target_link_libraries(ceph-osd ${FUSE_LIBRARIES}) | |
513 | endif() | |
11fdf7f2 TL |
514 | set_target_properties(ceph-osd PROPERTIES |
515 | POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE}) | |
7c673cae FG |
516 | install(TARGETS ceph-osd DESTINATION bin) |
517 | ||
11fdf7f2 TL |
518 | if (WITH_CEPHFS) |
519 | add_subdirectory(mds) | |
520 | set(ceph_mds_srcs | |
521 | ceph_mds.cc) | |
522 | add_executable(ceph-mds ${ceph_mds_srcs}) | |
523 | target_link_libraries(ceph-mds mds ${CMAKE_DL_LIBS} global-static ceph-common | |
524 | Boost::thread) | |
525 | install(TARGETS ceph-mds DESTINATION bin) | |
526 | endif() | |
7c673cae FG |
527 | |
528 | add_subdirectory(erasure-code) | |
529 | ||
530 | # Support/Tools | |
531 | if(WITH_TESTS) | |
11fdf7f2 TL |
532 | option(WITH_SYSTEM_GTEST "require and build with system gtest and gmock" OFF) |
533 | if(WITH_SYSTEM_GTEST) | |
534 | find_package(GTest REQUIRED) | |
535 | find_package(GMock REQUIRED) | |
536 | else() | |
537 | add_subdirectory(googletest/googlemock) | |
538 | add_library(GMock::GMock ALIAS gmock) | |
539 | add_library(GMock::Main ALIAS gmock_main) | |
540 | target_include_directories(gmock INTERFACE | |
541 | $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>) | |
542 | target_include_directories(gmock_main INTERFACE | |
543 | $<TARGET_PROPERTY:gtest,INTERFACE_INCLUDE_DIRECTORIES>) | |
544 | add_library(GTest::GTest ALIAS gtest) | |
545 | add_library(GTest::Main ALIAS gtest_main) | |
546 | endif() | |
7c673cae FG |
547 | endif(WITH_TESTS) |
548 | ||
31f18b77 | 549 | # dmClock (after gmock) |
31f18b77 FG |
550 | option(WITH_DMCLOCK_TESTS |
551 | "enable the build of dmclock-tests and dmclock-data-struct tests binaries" | |
552 | OFF) | |
553 | if(WITH_TESTS AND WITH_DMCLOCK_TESTS) | |
554 | # note: add_test is not being called, so dmclock tests aren't part | |
555 | # of ceph tests | |
11fdf7f2 TL |
556 | set(dmclock_TEST ON CACHE BOOL "" FORCE) |
557 | endif() | |
558 | add_subdirectory(dmclock) | |
7c673cae | 559 | |
11fdf7f2 TL |
560 | add_subdirectory(compressor) |
561 | ||
562 | add_subdirectory(tools) | |
7c673cae FG |
563 | |
564 | if(WITH_TESTS) | |
11fdf7f2 TL |
565 | add_subdirectory(test) |
566 | endif() | |
7c673cae | 567 | |
11fdf7f2 | 568 | add_subdirectory(crypto) |
7c673cae | 569 | |
11fdf7f2 TL |
570 | if(WITH_TESTS) |
571 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-coverage.in | |
572 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage @ONLY) | |
573 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph-debugpack.in | |
574 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack @ONLY) | |
575 | endif() | |
7c673cae FG |
576 | |
577 | configure_file(${CMAKE_SOURCE_DIR}/src/ceph.in | |
578 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph @ONLY) | |
579 | ||
7c673cae FG |
580 | configure_file(${CMAKE_SOURCE_DIR}/src/init-ceph.in |
581 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph @ONLY) | |
582 | ||
583 | configure_file(ceph-post-file.in | |
584 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file @ONLY) | |
585 | ||
11fdf7f2 TL |
586 | configure_file(ceph-crash.in |
587 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash @ONLY) | |
588 | ||
7c673cae | 589 | if(WITH_TESTS) |
11fdf7f2 TL |
590 | install(PROGRAMS |
591 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-debugpack | |
592 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-coverage | |
593 | DESTINATION bin) | |
594 | endif() | |
7c673cae FG |
595 | |
596 | install(PROGRAMS | |
597 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph | |
7c673cae | 598 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-post-file |
11fdf7f2 | 599 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ceph-crash |
7c673cae | 600 | ${CMAKE_SOURCE_DIR}/src/ceph-run |
7c673cae FG |
601 | ${CMAKE_SOURCE_DIR}/src/ceph-clsinfo |
602 | DESTINATION bin) | |
603 | install(PROGRAMS | |
604 | ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/init-ceph | |
605 | DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d | |
606 | RENAME ceph) | |
607 | ||
608 | install(FILES | |
609 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com | |
610 | ${CMAKE_SOURCE_DIR}/share/id_rsa_drop.ceph.com.pub | |
611 | ${CMAKE_SOURCE_DIR}/share/known_hosts_drop.ceph.com | |
612 | DESTINATION ${CMAKE_INSTALL_DATADIR}/ceph) | |
613 | ||
614 | install(PROGRAMS | |
615 | ceph_common.sh | |
616 | ceph-osd-prestart.sh | |
617 | DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/ceph) | |
618 | ||
619 | install(PROGRAMS | |
620 | ${CMAKE_SOURCE_DIR}/src/ceph-create-keys | |
7c673cae FG |
621 | DESTINATION sbin) |
622 | ||
623 | add_subdirectory(bash_completion) | |
7c673cae FG |
624 | add_subdirectory(client) |
625 | ||
626 | if(WITH_LIBCEPHFS) | |
627 | set(libcephfs_srcs libcephfs.cc) | |
628 | add_library(cephfs ${CEPH_SHARED} ${libcephfs_srcs}) | |
11fdf7f2 | 629 | target_link_libraries(cephfs PRIVATE client ceph-common |
7c673cae FG |
630 | ${CRYPTO_LIBS} ${EXTRALIBS}) |
631 | if(ENABLE_SHARED) | |
7c673cae FG |
632 | set_target_properties(cephfs PROPERTIES |
633 | OUTPUT_NAME cephfs | |
634 | VERSION 2.0.0 | |
11fdf7f2 TL |
635 | SOVERSION 2) |
636 | if(NOT APPLE) | |
637 | foreach(name ceph-common client osdc) | |
638 | set_property(TARGET cephfs APPEND_STRING PROPERTY | |
639 | LINK_FLAGS " -Wl,--exclude-libs,lib${name}.a") | |
640 | endforeach() | |
641 | endif() | |
7c673cae FG |
642 | endif(ENABLE_SHARED) |
643 | install(TARGETS cephfs DESTINATION ${CMAKE_INSTALL_LIBDIR}) | |
644 | install(DIRECTORY | |
645 | "${CMAKE_SOURCE_DIR}/src/include/cephfs" | |
c07f9fc5 | 646 | DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
7c673cae FG |
647 | set(ceph_syn_srcs |
648 | ceph_syn.cc | |
649 | client/SyntheticClient.cc) | |
650 | add_executable(ceph-syn ${ceph_syn_srcs}) | |
11fdf7f2 | 651 | target_link_libraries(ceph-syn client global-static ceph-common) |
7c673cae | 652 | install(TARGETS ceph-syn DESTINATION bin) |
11fdf7f2 | 653 | add_subdirectory(mount) |
7c673cae FG |
654 | endif(WITH_LIBCEPHFS) |
655 | ||
656 | if(WITH_FUSE) | |
657 | set(ceph_fuse_srcs | |
658 | ceph_fuse.cc | |
659 | client/fuse_ll.cc) | |
660 | add_executable(ceph-fuse ${ceph_fuse_srcs}) | |
11fdf7f2 TL |
661 | target_link_libraries(ceph-fuse ${FUSE_LIBRARIES} |
662 | ${GSSAPI_LIBRARIES} client ceph-common global-static) | |
663 | set_target_properties(ceph-fuse PROPERTIES | |
664 | COMPILE_FLAGS "-I${FUSE_INCLUDE_DIRS}" | |
665 | POSITION_INDEPENDENT_CODE ${EXE_LINKER_USE_PIE}) | |
7c673cae FG |
666 | install(TARGETS ceph-fuse DESTINATION bin) |
667 | install(PROGRAMS mount.fuse.ceph DESTINATION ${CMAKE_INSTALL_SBINDIR}) | |
668 | endif(WITH_FUSE) | |
669 | ||
670 | add_subdirectory(journal) | |
671 | ||
672 | if(WITH_RBD) | |
673 | if(WITH_KRBD) | |
674 | add_library(krbd STATIC krbd.cc | |
675 | $<TARGET_OBJECTS:parse_secret_objs>) | |
11fdf7f2 | 676 | target_link_libraries(krbd keyutils::keyutils) |
7c673cae FG |
677 | endif() |
678 | add_subdirectory(librbd) | |
679 | if(WITH_FUSE) | |
680 | add_subdirectory(rbd_fuse) | |
681 | endif() | |
682 | ||
683 | install(PROGRAMS | |
684 | ${CMAKE_SOURCE_DIR}/src/ceph-rbdnamer | |
685 | ${CMAKE_SOURCE_DIR}/src/rbd-replay-many | |
686 | ${CMAKE_SOURCE_DIR}/src/rbdmap | |
687 | DESTINATION ${CMAKE_INSTALL_BINDIR}) | |
688 | add_subdirectory(rbd_replay) | |
689 | endif(WITH_RBD) | |
690 | ||
691 | # RadosGW | |
692 | if(WITH_KVS) | |
693 | add_subdirectory(key_value_store) | |
694 | endif(WITH_KVS) | |
695 | ||
696 | if(WITH_RADOSGW) | |
697 | set(civetweb_common_files civetweb/src/civetweb.c) | |
698 | add_library(civetweb_common_objs OBJECT ${civetweb_common_files}) | |
11fdf7f2 | 699 | target_include_directories(civetweb_common_objs SYSTEM PRIVATE |
7c673cae FG |
700 | "${CMAKE_SOURCE_DIR}/src/civetweb/include") |
701 | set_property(TARGET civetweb_common_objs | |
702 | APPEND PROPERTY COMPILE_DEFINITIONS USE_IPV6=1) | |
7c673cae FG |
703 | if (LIBSSL_SONAME) |
704 | set_property(TARGET civetweb_common_objs | |
705 | APPEND PROPERTY COMPILE_DEFINITIONS SSL_LIB="${LIBSSL_SONAME}") | |
706 | set_property(TARGET civetweb_common_objs | |
707 | APPEND PROPERTY COMPILE_DEFINITIONS CRYPTO_LIB="${LIBCRYPTO_SONAME}") | |
708 | endif() | |
709 | ||
11fdf7f2 TL |
710 | if (OPENSSL_FOUND) |
711 | # Use cmake to determine openssl version, a TODO is to make | |
712 | # civetweb itself do this based on openssl_api_compat strings | |
713 | if (NOT (OPENSSL_VERSION VERSION_LESS "1.1")) | |
714 | message(STATUS "Setting civetweb to use OPENSSL >= 1.1") | |
715 | set_property(TARGET civetweb_common_objs | |
716 | APPEND PROPERTY COMPILE_DEFINITIONS OPENSSL_API_1_1=1) | |
717 | endif() | |
718 | endif(OPENSSL_FOUND) | |
7c673cae FG |
719 | add_subdirectory(rgw) |
720 | ||
721 | endif(WITH_RADOSGW) | |
722 | ||
723 | install(FILES | |
724 | sample.ceph.conf | |
725 | DESTINATION ${CMAKE_INSTALL_DOCDIR}) | |
7c673cae | 726 | |
11fdf7f2 | 727 | # Now create a usable config.h |
7c673cae FG |
728 | configure_file( |
729 | ${CMAKE_SOURCE_DIR}/src/include/config-h.in.cmake | |
730 | ${CMAKE_BINARY_DIR}/include/acconfig.h | |
731 | ) | |
732 | ||
7c673cae FG |
733 | # Everything you need to spin up a cluster with vstart.sh |
734 | add_custom_target(vstart-base DEPENDS | |
735 | ceph-osd | |
736 | ceph-mon | |
7c673cae FG |
737 | ceph-authtool |
738 | ceph-conf | |
739 | monmaptool | |
740 | crushtool | |
741 | rados | |
11fdf7f2 TL |
742 | cython${PY_BINDING_INFIX}_rados) |
743 | if (WITH_MGR) | |
744 | add_dependencies(vstart-base ceph-mgr) | |
745 | endif() | |
7c673cae | 746 | |
11fdf7f2 TL |
747 | add_custom_target(vstart DEPENDS vstart-base) |
748 | if (WITH_RBD) | |
749 | add_dependencies(vstart cython${PY_BINDING_INFIX}_rbd) | |
750 | endif() | |
751 | if (WITH_CEPHFS) | |
752 | add_dependencies(vstart ceph-mds) | |
753 | endif() | |
7c673cae FG |
754 | if(WITH_RADOSGW) |
755 | add_dependencies(vstart radosgw radosgw-admin) | |
756 | endif(WITH_RADOSGW) | |
757 | ||
758 | if(WITH_LTTNG) | |
759 | add_dependencies(vstart tracepoint_libraries) | |
760 | endif(WITH_LTTNG) | |
761 | ||
11fdf7f2 TL |
762 | if(WITH_MGR AND WITH_MGR_DASHBOARD_FRONTEND AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64") |
763 | add_dependencies(vstart mgr-dashboard-frontend-build) | |
764 | endif() | |
765 | ||
766 | if(WITH_MGR) | |
767 | add_dependencies(vstart ceph-volume-venv-setup) | |
768 | endif() | |
769 | ||
7c673cae FG |
770 | # Everything you need to run CephFS tests |
771 | add_custom_target(cephfs_testing DEPENDS | |
772 | vstart | |
773 | rados | |
11fdf7f2 | 774 | cython${PY_BINDING_INFIX}_modules |
7c673cae FG |
775 | cephfs |
776 | cls_cephfs | |
777 | ceph-fuse | |
778 | ceph-dencoder | |
779 | cephfs-journal-tool | |
780 | cephfs-data-scan | |
781 | cephfs-table-tool) | |
782 | ||
783 | if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/.git") | |
784 | add_custom_target( | |
785 | git-update | |
786 | COMMAND git submodule sync | |
787 | COMMAND git submodule update --force --init --recursive | |
788 | WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}") | |
789 | endif() | |
790 | ||
791 | add_subdirectory(script) |