1 find_program(GPERF gperf)
3 message(FATAL_ERROR "Can't find gperf")
6 if(WITH_RADOSGW_SELECT_PARQUET)
7 find_package(Arrow QUIET REQUIRED)
8 set(ARROW_LIBRARIES "-larrow -lparquet")
9 add_definitions(-D_ARROW_EXIST)
10 message("-- arrow is installed, radosgw/s3select-op is able to process parquet objects")
11 endif(WITH_RADOSGW_SELECT_PARQUET)
13 function(gperf_generate input output)
16 COMMAND ${GPERF} ${input} | sed "s/register //g" > ${output}
18 COMMENT "Generate ${output}"
22 find_package(ICU 52.0 COMPONENTS uc REQUIRED)
24 set(librgw_common_srcs
25 services/svc_finisher.cc
26 services/svc_bi_rados.cc
27 services/svc_bilog_rados.cc
28 services/svc_bucket.cc
29 services/svc_bucket_sobj.cc
30 services/svc_bucket_sync_sobj.cc
32 services/svc_config_key_rados.cc
35 services/svc_meta_be.cc
36 services/svc_meta_be_otp.cc
37 services/svc_meta_be_sobj.cc
38 services/svc_notify.cc
41 services/svc_sync_modules.cc
43 services/svc_sys_obj.cc
44 services/svc_sys_obj_cache.cc
45 services/svc_sys_obj_core.cc
46 services/svc_tier_rados.cc
48 services/svc_user_rados.cc
50 services/svc_zone_utils.cc
90 rgw_sync_error_repo.cc
92 rgw_sync_module_aws.cc
94 rgw_sync_module_es_rest.cc
95 rgw_sync_module_log.cc
96 rgw_sync_module_pubsub.cc
100 rgw_notify_event_type.cc
101 rgw_sync_module_pubsub_rest.cc
106 rgw_period_history.cc
113 rgw_object_expirer_core.cc
119 rgw_putobj_processor.cc
129 rgw_rest_pubsub_common.cc
147 rgw_crypt_sanitize.cc
149 rgw_rest_user_policy.cc
154 rgw_rest_oidc_provider.cc
166 rgw_bucket_encryption.cc
169 if(WITH_RADOSGW_AMQP_ENDPOINT)
170 list(APPEND librgw_common_srcs rgw_amqp.cc)
172 if(WITH_RADOSGW_KAFKA_ENDPOINT)
173 list(APPEND librgw_common_srcs rgw_kafka.cc)
175 if(WITH_RADOSGW_DBSTORE)
176 add_subdirectory(store/dbstore)
177 list(APPEND librgw_common_srcs rgw_sal_dbstore.cc)
180 list(APPEND librgw_common_srcs rgw_tracer.cc)
183 add_library(rgw_common STATIC ${librgw_common_srcs})
185 include(CheckCXXCompilerFlag)
186 check_cxx_compiler_flag("-Wimplicit-const-int-float-conversion"
187 COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
188 if(COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
189 target_compile_definitions(common-objs PRIVATE
190 HAVE_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
193 target_link_libraries(rgw_common
219 target_include_directories(rgw_common
220 SYSTEM PUBLIC "services"
221 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
222 PRIVATE "${LUA_INCLUDE_DIR}")
223 if(WITH_RADOSGW_KAFKA_ENDPOINT)
224 # used by rgw_kafka.cc
225 target_link_libraries(rgw_common
229 if(WITH_RADOSGW_AMQP_ENDPOINT)
230 # used by rgw_amqp.cc
231 target_link_libraries(rgw_common
237 target_link_libraries(rgw_common
241 if(WITH_RADOSGW_LUA_PACKAGES)
242 target_link_libraries(rgw_common
243 PRIVATE Boost::filesystem StdFilesystem::filesystem)
247 # rgw/rgw_op.cc includes "tracing/rgw_op.h"
248 # rgw/rgw_rados.cc includes "tracing/rgw_rados.h"
249 add_dependencies(rgw_common rgw_op-tp rgw_rados-tp)
253 add_dependencies(rgw_common ${jaeger_base})
254 target_link_libraries(rgw_common PUBLIC ${jaeger_base})
257 if(WITH_RADOSGW_DBSTORE)
258 target_link_libraries(rgw_common PRIVATE global dbstore)
265 rgw_http_client_curl.cc
269 rgw_realm_reloader.cc
282 rgw_rest_ratelimit.cc
289 gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf
290 rgw_iam_policy_keywords.frag.cc)
291 set_source_files_properties(rgw_iam_policy.cc PROPERTIES
292 OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc
293 COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw)
296 add_library(rgw_a STATIC
299 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
300 target_include_directories(rgw_a PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
301 target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include")
302 target_include_directories(rgw_a SYSTEM PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
304 if(WITH_RADOSGW_AMQP_ENDPOINT)
305 find_package(RabbitMQ REQUIRED)
307 if(WITH_RADOSGW_KAFKA_ENDPOINT)
308 find_package(RDKafka 0.9.2 REQUIRED)
311 target_link_libraries(rgw_a
322 if(WITH_CURL_OPENSSL)
323 # used by rgw_http_client_curl.cc
324 target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
329 list(APPEND rgw_libs ${LUA_LIBRARIES})
331 set(rgw_schedulers_srcs
332 rgw_dmclock_scheduler_ctx.cc
333 rgw_dmclock_sync_scheduler.cc
334 rgw_dmclock_async_scheduler.cc)
336 rgw_loadgen_process.cc
338 rgw_asio_frontend.cc)
340 add_library(rgw_schedulers STATIC ${rgw_schedulers_srcs})
341 target_link_libraries(rgw_schedulers
342 PUBLIC dmclock::dmclock spawn)
344 add_library(radosgw SHARED
348 rgw_kmip_client_impl.cc)
350 target_compile_definitions(radosgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
351 target_include_directories(radosgw
352 PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
353 PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip")
354 target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
356 target_link_libraries(radosgw
357 PRIVATE ${rgw_libs} rgw_schedulers kmip
358 PUBLIC dmclock::dmclock
360 if(WITH_RADOSGW_BEAST_OPENSSL)
361 # used by rgw_asio_frontend.cc
362 target_link_libraries(radosgw PRIVATE OpenSSL::SSL)
364 set_target_properties(radosgw PROPERTIES OUTPUT_NAME radosgw VERSION 2.0.0
366 install(TARGETS radosgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
368 add_executable(radosgwd radosgw.cc)
369 target_link_libraries(radosgwd radosgw librados
370 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
371 cls_log_client cls_timeindex_client neorados_cls_fifo
372 cls_version_client cls_user_client
375 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}
377 set_target_properties(radosgwd PROPERTIES OUTPUT_NAME radosgw)
378 install(TARGETS radosgwd DESTINATION bin)
380 set(radosgw_admin_srcs
382 rgw_sync_checkpoint.cc
384 add_executable(radosgw-admin ${radosgw_admin_srcs})
385 target_link_libraries(radosgw-admin ${rgw_libs} librados
386 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
387 cls_log_client cls_timeindex_client neorados_cls_fifo
388 cls_version_client cls_user_client
391 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
392 install(TARGETS radosgw-admin DESTINATION bin)
396 add_executable(radosgw-es ${radosgw_es_srcs})
397 target_link_libraries(radosgw-es ${rgw_libs} librados
398 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
399 cls_log_client cls_timeindex_client neorados_cls_fifo
400 cls_version_client cls_user_client
402 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
403 install(TARGETS radosgw-es DESTINATION bin)
405 set(radosgw_token_srcs
407 add_executable(radosgw-token ${radosgw_token_srcs})
408 target_link_libraries(radosgw-token librados
409 global ${ALLOC_LIBS})
410 install(TARGETS radosgw-token DESTINATION bin)
412 set(radosgw_object_expirer_srcs
413 rgw_object_expirer.cc)
414 add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs})
415 target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
416 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
417 cls_log_client cls_timeindex_client neorados_cls_fifo
418 cls_version_client cls_user_client
420 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
421 install(TARGETS radosgw-object-expirer DESTINATION bin)
426 add_library(rgw SHARED ${librgw_srcs})
427 target_link_libraries(rgw
447 if(WITH_RADOSGW_AMQP_ENDPOINT)
448 target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ)
449 target_link_libraries(rgw PRIVATE OpenSSL::SSL)
452 if(WITH_RADOSGW_KAFKA_ENDPOINT)
453 target_link_libraries(rgw PRIVATE RDKafka::RDKafka)
456 target_link_libraries(rgw PRIVATE ${LUA_LIBRARIES})
458 set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
460 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
463 add_executable(ceph_rgw_jsonparser
465 target_link_libraries(ceph_rgw_jsonparser
469 add_executable(ceph_rgw_multiparser
471 target_link_libraries(ceph_rgw_multiparser
483 rgw-gap-list-comparator