]> git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/CMakeLists.txt
bee4cd0c9a42f749856ba6e61a861f794027aaba
[ceph.git] / ceph / src / rgw / CMakeLists.txt
1 find_program(GPERF gperf)
2 if(NOT GPERF)
3 message(FATAL_ERROR "Can't find gperf")
4 endif()
5
6 if(WITH_RADOSGW_SELECT_PARQUET)
7 set(ARROW_LIBRARIES Arrow::Arrow Arrow::Parquet)
8 add_definitions(-D_ARROW_EXIST)
9 message("-- arrow is installed, radosgw/s3select-op is able to process parquet objects")
10 endif(WITH_RADOSGW_SELECT_PARQUET)
11
12 function(gperf_generate input output)
13 add_custom_command(
14 OUTPUT ${output}
15 COMMAND ${GPERF} ${input} | sed "s/register //g" > ${output}
16 DEPENDS ${input}
17 COMMENT "Generate ${output}"
18 )
19 endfunction()
20
21 find_package(ICU 52.0 COMPONENTS uc REQUIRED)
22
23 set(librgw_common_srcs
24 services/svc_finisher.cc
25 services/svc_bi_rados.cc
26 services/svc_bilog_rados.cc
27 services/svc_bucket.cc
28 services/svc_bucket_sobj.cc
29 services/svc_bucket_sync_sobj.cc
30 services/svc_cls.cc
31 services/svc_config_key_rados.cc
32 services/svc_mdlog.cc
33 services/svc_meta.cc
34 services/svc_meta_be.cc
35 services/svc_meta_be_otp.cc
36 services/svc_meta_be_sobj.cc
37 services/svc_notify.cc
38 services/svc_otp.cc
39 services/svc_quota.cc
40 services/svc_sync_modules.cc
41 services/svc_rados.cc
42 services/svc_sys_obj.cc
43 services/svc_sys_obj_cache.cc
44 services/svc_sys_obj_core.cc
45 services/svc_tier_rados.cc
46 services/svc_user.cc
47 services/svc_user_rados.cc
48 services/svc_zone.cc
49 services/svc_zone_utils.cc
50 rgw_service.cc
51 rgw_acl.cc
52 rgw_acl_s3.cc
53 rgw_acl_swift.cc
54 rgw_aio.cc
55 rgw_aio_throttle.cc
56 rgw_auth.cc
57 rgw_auth_s3.cc
58 rgw_arn.cc
59 rgw_basic_types.cc
60 rgw_bucket.cc
61 rgw_bucket_layout.cc
62 rgw_bucket_sync.cc
63 rgw_cache.cc
64 rgw_d3n_datacache.cc
65 rgw_common.cc
66 rgw_compression.cc
67 rgw_etag_verifier.cc
68 rgw_cors.cc
69 rgw_cors_s3.cc
70 rgw_env.cc
71 rgw_es_query.cc
72 rgw_formats.cc
73 rgw_gc.cc
74 rgw_gc_log.cc
75 rgw_http_client.cc
76 rgw_keystone.cc
77 rgw_ldap.cc
78 rgw_lc.cc
79 rgw_lc_s3.cc
80 rgw_lc_tier.cc
81 rgw_metadata.cc
82 rgw_multi.cc
83 rgw_multi_del.cc
84 rgw_obj_manifest.cc
85 rgw_pubsub.cc
86 rgw_sync.cc
87 rgw_data_sync.cc
88 rgw_sync_counters.cc
89 rgw_sync_error_repo.cc
90 rgw_sync_module.cc
91 rgw_sync_module_aws.cc
92 rgw_sync_module_es.cc
93 rgw_sync_module_es_rest.cc
94 rgw_sync_module_log.cc
95 rgw_sync_module_pubsub.cc
96 rgw_sync_policy.cc
97 rgw_pubsub_push.cc
98 rgw_notify.cc
99 rgw_notify_event_type.cc
100 rgw_sync_module_pubsub_rest.cc
101 rgw_sync_trace.cc
102 rgw_trim_bilog.cc
103 rgw_trim_datalog.cc
104 rgw_trim_mdlog.cc
105 rgw_period_history.cc
106 rgw_period_puller.cc
107 rgw_reshard.cc
108 rgw_coroutine.cc
109 rgw_cr_rados.cc
110 rgw_cr_rest.cc
111 rgw_cr_tools.cc
112 rgw_object_expirer_core.cc
113 rgw_op.cc
114 rgw_otp.cc
115 rgw_policy_s3.cc
116 rgw_public_access.cc
117 rgw_putobj.cc
118 rgw_putobj_processor.cc
119 rgw_quota.cc
120 rgw_rados.cc
121 rgw_resolve.cc
122 rgw_rest.cc
123 rgw_rest_client.cc
124 rgw_rest_conn.cc
125 rgw_rest_log.cc
126 rgw_rest_metadata.cc
127 rgw_rest_pubsub.cc
128 rgw_rest_pubsub_common.cc
129 rgw_rest_realm.cc
130 rgw_rest_role.cc
131 rgw_rest_s3.cc
132 rgw_s3select.cc
133 rgw_role.cc
134 rgw_sal.cc
135 rgw_sal_rados.cc
136 rgw_string.cc
137 rgw_tag.cc
138 rgw_tag_s3.cc
139 rgw_tools.cc
140 rgw_log_backing.cc
141 rgw_user.cc
142 rgw_website.cc
143 rgw_xml.cc
144 rgw_torrent.cc
145 rgw_crypt.cc
146 rgw_crypt_sanitize.cc
147 rgw_iam_policy.cc
148 rgw_rest_user_policy.cc
149 rgw_zone.cc
150 rgw_sts.cc
151 rgw_rest_sts.cc
152 rgw_perf_counters.cc
153 rgw_rest_oidc_provider.cc
154 rgw_rest_iam.cc
155 rgw_object_lock.cc
156 rgw_kms.cc
157 rgw_kmip_client.cc
158 rgw_url.cc
159 rgw_oidc_provider.cc
160 rgw_datalog.cc
161 cls_fifo_legacy.cc
162 rgw_lua_utils.cc
163 rgw_lua.cc
164 rgw_lua_request.cc
165 rgw_bucket_encryption.cc
166 rgw_tracer.cc)
167
168 if(WITH_RADOSGW_AMQP_ENDPOINT)
169 list(APPEND librgw_common_srcs rgw_amqp.cc)
170 endif()
171 if(WITH_RADOSGW_KAFKA_ENDPOINT)
172 list(APPEND librgw_common_srcs rgw_kafka.cc)
173 endif()
174 if(WITH_RADOSGW_DBSTORE)
175 add_subdirectory(store/dbstore)
176 list(APPEND librgw_common_srcs rgw_sal_dbstore.cc)
177 endif()
178 if(WITH_JAEGER)
179 list(APPEND librgw_common_srcs rgw_tracer.cc)
180 endif()
181
182 add_library(rgw_common STATIC ${librgw_common_srcs})
183
184 include(CheckCXXCompilerFlag)
185 check_cxx_compiler_flag("-Wimplicit-const-int-float-conversion"
186 COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
187 if(COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
188 target_compile_definitions(common-objs PRIVATE
189 HAVE_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
190 endif()
191
192 target_link_libraries(rgw_common
193 PRIVATE
194 ceph-common
195 cls_2pc_queue_client
196 cls_cmpomap_client
197 cls_lock_client
198 cls_log_client
199 cls_otp_client
200 cls_refcount_client
201 cls_rgw_client
202 cls_rgw_gc_client
203 cls_timeindex_client
204 cls_user_client
205 cls_version_client
206 librados
207 rt
208 fmt::fmt
209 ICU::uc
210 OATH::OATH
211 dmclock::dmclock
212 ${CURL_LIBRARIES}
213 ${EXPAT_LIBRARIES}
214 ${LUA_LIBRARIES}
215 ${ARROW_LIBRARIES}
216 PUBLIC
217 spawn)
218 target_include_directories(rgw_common
219 SYSTEM PUBLIC "services"
220 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
221 PRIVATE "${LUA_INCLUDE_DIR}")
222 if(WITH_RADOSGW_KAFKA_ENDPOINT)
223 # used by rgw_kafka.cc
224 target_link_libraries(rgw_common
225 PRIVATE
226 RDKafka::RDKafka)
227 endif()
228 if(WITH_RADOSGW_AMQP_ENDPOINT)
229 # used by rgw_amqp.cc
230 target_link_libraries(rgw_common
231 PRIVATE
232 RabbitMQ::RabbitMQ
233 OpenSSL::SSL)
234 endif()
235 if(WITH_OPENLDAP)
236 target_link_libraries(rgw_common
237 PRIVATE
238 OpenLDAP::OpenLDAP)
239 endif()
240 if(WITH_RADOSGW_LUA_PACKAGES)
241 target_link_libraries(rgw_common
242 PRIVATE Boost::filesystem StdFilesystem::filesystem)
243 endif()
244
245 if(WITH_LTTNG)
246 # rgw/rgw_op.cc includes "tracing/rgw_op.h"
247 # rgw/rgw_rados.cc includes "tracing/rgw_rados.h"
248 add_dependencies(rgw_common rgw_op-tp rgw_rados-tp)
249 endif()
250
251 if(WITH_JAEGER)
252 add_dependencies(rgw_common ${jaeger_base})
253 target_link_libraries(rgw_common PUBLIC ${jaeger_base})
254 endif()
255
256 if(WITH_RADOSGW_DBSTORE)
257 target_link_libraries(rgw_common PRIVATE global dbstore)
258 endif()
259
260 set(rgw_a_srcs
261 rgw_auth_keystone.cc
262 rgw_client_io.cc
263 rgw_frontend.cc
264 rgw_http_client_curl.cc
265 rgw_loadgen.cc
266 rgw_log.cc
267 rgw_period_pusher.cc
268 rgw_realm_reloader.cc
269 rgw_realm_watcher.cc
270 rgw_os_lib.cc
271 rgw_process.cc
272 rgw_rest_bucket.cc
273 rgw_rest_config.cc
274 rgw_rest_log.cc
275 rgw_rest_metadata.cc
276 rgw_rest_realm.cc
277 rgw_rest_swift.cc
278 rgw_rest_usage.cc
279 rgw_rest_info.cc
280 rgw_rest_user.cc
281 rgw_rest_ratelimit.cc
282 rgw_swift_auth.cc
283 rgw_usage.cc
284 rgw_opa.cc
285 rgw_sts.cc
286 rgw_rest_sts.cc)
287
288 gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf
289 rgw_iam_policy_keywords.frag.cc)
290 set_source_files_properties(rgw_iam_policy.cc PROPERTIES
291 OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc
292 COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw)
293
294
295 add_library(rgw_a STATIC
296 ${rgw_a_srcs})
297
298 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
299 target_include_directories(rgw_a PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
300 target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include")
301 target_include_directories(rgw_a SYSTEM PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
302
303 if(WITH_RADOSGW_AMQP_ENDPOINT)
304 find_package(RabbitMQ REQUIRED)
305 endif()
306 if(WITH_RADOSGW_KAFKA_ENDPOINT)
307 find_package(RDKafka 0.9.2 REQUIRED)
308 endif()
309
310 target_link_libraries(rgw_a
311 PRIVATE
312 common_utf8 global
313 ${CRYPTO_LIBS}
314 ${LUA_LIBRARIES}
315 ${ARROW_LIBRARIES}
316 OATH::OATH
317 PUBLIC
318 rgw_common
319 spawn)
320
321 if(WITH_CURL_OPENSSL)
322 # used by rgw_http_client_curl.cc
323 target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
324 endif()
325
326 set(rgw_libs rgw_a)
327
328 list(APPEND rgw_libs ${LUA_LIBRARIES})
329
330 set(rgw_schedulers_srcs
331 rgw_dmclock_scheduler_ctx.cc
332 rgw_dmclock_sync_scheduler.cc
333 rgw_dmclock_async_scheduler.cc)
334 set(radosgw_srcs
335 rgw_loadgen_process.cc
336 rgw_asio_client.cc
337 rgw_asio_frontend.cc)
338
339 add_library(rgw_schedulers STATIC ${rgw_schedulers_srcs})
340 target_link_libraries(rgw_schedulers
341 PUBLIC dmclock::dmclock spawn)
342
343 add_library(radosgw SHARED
344 ${radosgw_srcs}
345 ${rgw_a_srcs}
346 rgw_main.cc
347 rgw_kmip_client_impl.cc)
348
349 target_compile_definitions(radosgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
350 target_include_directories(radosgw
351 PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
352 PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip")
353 target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
354
355 target_link_libraries(radosgw
356 PRIVATE ${rgw_libs} rgw_schedulers kmip
357 PUBLIC dmclock::dmclock
358 )
359 if(WITH_RADOSGW_BEAST_OPENSSL)
360 # used by rgw_asio_frontend.cc
361 target_link_libraries(radosgw PRIVATE OpenSSL::SSL)
362 endif()
363 set_target_properties(radosgw PROPERTIES OUTPUT_NAME radosgw VERSION 2.0.0
364 SOVERSION 2)
365 install(TARGETS radosgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
366
367 add_executable(radosgwd radosgw.cc)
368 target_link_libraries(radosgwd radosgw librados
369 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
370 cls_log_client cls_timeindex_client neorados_cls_fifo
371 cls_version_client cls_user_client
372 global
373 ${LIB_RESOLV}
374 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}
375 ${ALLOC_LIBS})
376 set_target_properties(radosgwd PROPERTIES OUTPUT_NAME radosgw)
377 install(TARGETS radosgwd DESTINATION bin)
378
379 set(radosgw_admin_srcs
380 rgw_admin.cc
381 rgw_sync_checkpoint.cc
382 rgw_orphan.cc)
383 add_executable(radosgw-admin ${radosgw_admin_srcs})
384 target_link_libraries(radosgw-admin ${rgw_libs} librados
385 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
386 cls_log_client cls_timeindex_client neorados_cls_fifo
387 cls_version_client cls_user_client
388 global ${LIB_RESOLV}
389 OATH::OATH
390 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
391 install(TARGETS radosgw-admin DESTINATION bin)
392
393 set(radosgw_es_srcs
394 rgw_es_main.cc)
395 add_executable(radosgw-es ${radosgw_es_srcs})
396 target_link_libraries(radosgw-es ${rgw_libs} librados
397 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
398 cls_log_client cls_timeindex_client neorados_cls_fifo
399 cls_version_client cls_user_client
400 global ${LIB_RESOLV}
401 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
402 install(TARGETS radosgw-es DESTINATION bin)
403
404 set(radosgw_token_srcs
405 rgw_token.cc)
406 add_executable(radosgw-token ${radosgw_token_srcs})
407 target_link_libraries(radosgw-token librados
408 global ${ALLOC_LIBS})
409 install(TARGETS radosgw-token DESTINATION bin)
410
411 set(radosgw_object_expirer_srcs
412 rgw_object_expirer.cc)
413 add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs})
414 target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
415 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
416 cls_log_client cls_timeindex_client neorados_cls_fifo
417 cls_version_client cls_user_client
418 global ${LIB_RESOLV}
419 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
420 install(TARGETS radosgw-object-expirer DESTINATION bin)
421
422 set(librgw_srcs
423 librgw.cc
424 rgw_file.cc)
425 add_library(rgw SHARED ${librgw_srcs})
426 target_link_libraries(rgw
427 PRIVATE
428 ${rgw_libs}
429 librados
430 cls_rgw_client
431 cls_otp_client
432 cls_lock_client
433 cls_refcount_client
434 cls_log_client
435 cls_timeindex_client
436 neorados_cls_fifo
437 cls_version_client
438 cls_user_client
439 global
440 ${LIB_RESOLV}
441 ${CURL_LIBRARIES}
442 ${EXPAT_LIBRARIES}
443 PUBLIC
444 dmclock::dmclock)
445
446 if(WITH_RADOSGW_AMQP_ENDPOINT)
447 target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ)
448 target_link_libraries(rgw PRIVATE OpenSSL::SSL)
449 endif()
450
451 if(WITH_RADOSGW_KAFKA_ENDPOINT)
452 target_link_libraries(rgw PRIVATE RDKafka::RDKafka)
453 endif()
454
455 target_link_libraries(rgw PRIVATE ${LUA_LIBRARIES})
456
457 set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
458 SOVERSION 2)
459 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
460
461 if(WITH_TESTS)
462 add_executable(ceph_rgw_jsonparser
463 rgw_jsonparser.cc)
464 target_link_libraries(ceph_rgw_jsonparser
465 ${rgw_libs}
466 global)
467
468 add_executable(ceph_rgw_multiparser
469 rgw_multiparser.cc)
470 target_link_libraries(ceph_rgw_multiparser
471 ${rgw_libs}
472 global)
473
474 install(TARGETS
475 ceph_rgw_jsonparser
476 ceph_rgw_multiparser
477 DESTINATION bin)
478 endif(WITH_TESTS)
479
480 install(PROGRAMS
481 rgw-gap-list
482 rgw-gap-list-comparator
483 rgw-orphan-list
484 DESTINATION bin)