1 find_program(GPERF gperf)
3 message(FATAL_ERROR "Can't find gperf")
6 if(WITH_RADOSGW_BACKTRACE_LOGGING)
7 add_definitions(-D_BACKTRACE_LOGGING)
8 endif(WITH_RADOSGW_BACKTRACE_LOGGING)
10 if(WITH_RADOSGW_SELECT_PARQUET)
11 set(ARROW_LIBRARIES Arrow::Arrow Arrow::Parquet)
12 add_definitions(-D_ARROW_EXIST)
13 message("-- arrow is installed, radosgw/s3select-op is able to process parquet objects")
14 endif(WITH_RADOSGW_SELECT_PARQUET)
16 if(WITH_RADOSGW_ARROW_FLIGHT)
17 set(ARROW_FLIGHT_LIBRARIES Arrow::Arrow Arrow::Parquet Arrow::Flight utf8proc::utf8proc) # order is important
18 add_definitions(-D_ARROW_EXIST)
19 message("-- arrow flight is installed")
20 endif(WITH_RADOSGW_ARROW_FLIGHT)
22 function(gperf_generate input output)
25 COMMAND ${GPERF} ${input} | sed "s/register //g" > ${output}
27 COMMENT "Generate ${output}"
31 find_package(ICU 52.0 COMPONENTS uc REQUIRED)
33 set(librgw_common_srcs
34 services/svc_finisher.cc
35 services/svc_bi_rados.cc
36 services/svc_bilog_rados.cc
37 services/svc_bucket.cc
38 services/svc_bucket_sobj.cc
39 services/svc_bucket_sync_sobj.cc
41 services/svc_config_key_rados.cc
44 services/svc_meta_be.cc
45 services/svc_meta_be_otp.cc
46 services/svc_meta_be_sobj.cc
47 services/svc_notify.cc
50 services/svc_sync_modules.cc
52 services/svc_role_rados.cc
53 services/svc_sys_obj.cc
54 services/svc_sys_obj_cache.cc
55 services/svc_sys_obj_core.cc
56 services/svc_tier_rados.cc
58 services/svc_user_rados.cc
60 services/svc_zone_utils.cc
88 rgw_multipart_meta_filter.cc
94 rgw_notify_event_type.cc
111 rgw_rest_ratelimit.cc
128 rgw_crypt_sanitize.cc
130 rgw_rest_user_policy.cc
135 rgw_rest_oidc_provider.cc
146 rgw_lua_data_filter.cc
147 rgw_bucket_encryption.cc
149 rgw_lua_background.cc
150 driver/rados/cls_fifo_legacy.cc
151 driver/rados/rgw_bucket.cc
152 driver/rados/rgw_bucket_sync.cc
153 driver/rados/rgw_cr_rados.cc
154 driver/rados/rgw_cr_tools.cc
155 driver/rados/rgw_d3n_datacache.cc
156 driver/rados/rgw_datalog.cc
157 driver/rados/rgw_datalog_notify.cc
158 driver/rados/rgw_data_sync.cc
159 driver/rados/rgw_etag_verifier.cc
160 driver/rados/rgw_gc.cc
161 driver/rados/rgw_gc_log.cc
162 driver/rados/rgw_lc_tier.cc
163 driver/rados/rgw_log_backing.cc
164 driver/rados/rgw_metadata.cc
165 driver/rados/rgw_notify.cc
166 driver/rados/rgw_obj_manifest.cc
167 driver/rados/rgw_object_expirer_core.cc
168 driver/rados/rgw_otp.cc
169 driver/rados/rgw_period.cc
170 driver/rados/rgw_pubsub_push.cc
171 driver/rados/rgw_putobj_processor.cc
172 driver/rados/rgw_rados.cc
173 driver/rados/rgw_reshard.cc
174 driver/rados/rgw_rest_bucket.cc
175 driver/rados/rgw_rest_log.cc
176 driver/rados/rgw_rest_realm.cc
177 driver/rados/rgw_rest_user.cc
178 driver/rados/rgw_sal_rados.cc
179 driver/rados/rgw_service.cc
180 driver/rados/rgw_sync.cc
181 driver/rados/rgw_sync_counters.cc
182 driver/rados/rgw_sync_error_repo.cc
183 driver/rados/rgw_sync_module.cc
184 driver/rados/rgw_sync_module_aws.cc
185 driver/rados/rgw_sync_module_es.cc
186 driver/rados/rgw_sync_module_es_rest.cc
187 driver/rados/rgw_sync_module_log.cc
188 driver/rados/rgw_sync_trace.cc
189 driver/rados/rgw_tools.cc
190 driver/rados/rgw_trim_bilog.cc
191 driver/rados/rgw_trim_datalog.cc
192 driver/rados/rgw_trim_mdlog.cc
193 driver/rados/rgw_user.cc
194 driver/rados/rgw_zone.cc)
196 list(APPEND librgw_common_srcs
197 driver/immutable_config/store.cc
198 driver/json_config/store.cc
199 driver/rados/config/impl.cc
200 driver/rados/config/period.cc
201 driver/rados/config/period_config.cc
202 driver/rados/config/realm.cc
203 driver/rados/config/store.cc
204 driver/rados/config/zone.cc
205 driver/rados/config/zonegroup.cc)
207 if(WITH_RADOSGW_AMQP_ENDPOINT)
208 list(APPEND librgw_common_srcs rgw_amqp.cc)
210 if(WITH_RADOSGW_KAFKA_ENDPOINT)
211 list(APPEND librgw_common_srcs rgw_kafka.cc)
213 if(WITH_RADOSGW_DBSTORE)
214 add_subdirectory(driver/dbstore)
215 list(APPEND librgw_common_srcs rgw_sal_dbstore.cc)
217 if(WITH_RADOSGW_MOTR)
218 list(APPEND librgw_common_srcs rgw_sal_motr.cc)
220 if(WITH_RADOSGW_DAOS)
221 list(APPEND librgw_common_srcs rgw_sal_daos.cc)
224 list(APPEND librgw_common_srcs rgw_tracer.cc)
226 if(WITH_RADOSGW_ARROW_FLIGHT)
227 # NOTE: eventually don't want this in common but just in radosgw daemon
228 # list(APPEND radosgw_srcs rgw_flight.cc rgw_flight_frontend.cc)
229 list(APPEND librgw_common_srcs rgw_flight.cc rgw_flight_frontend.cc)
230 endif(WITH_RADOSGW_ARROW_FLIGHT)
233 add_library(rgw_common STATIC ${librgw_common_srcs})
235 include(CheckCXXCompilerFlag)
236 check_cxx_compiler_flag("-Wimplicit-const-int-float-conversion"
237 COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
238 if(COMPILER_SUPPORTS_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
239 target_compile_definitions(common-objs PRIVATE
240 HAVE_WARN_IMPLICIT_CONST_INT_FLOAT_CONVERSION)
243 target_link_libraries(rgw_common
265 ${ARROW_FLIGHT_LIBRARIES}
272 target_include_directories(rgw_common
273 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/services"
274 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/driver/rados"
275 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
276 PUBLIC "${LUA_INCLUDE_DIR}")
277 if(WITH_RADOSGW_KAFKA_ENDPOINT)
278 # used by rgw_kafka.cc
279 target_link_libraries(rgw_common
283 if(WITH_RADOSGW_AMQP_ENDPOINT)
284 # used by rgw_amqp.cc
285 target_link_libraries(rgw_common
291 target_link_libraries(rgw_common
295 if(WITH_RADOSGW_LUA_PACKAGES)
296 target_link_libraries(rgw_common
297 PRIVATE Boost::filesystem StdFilesystem::filesystem)
301 # rgw/rgw_op.cc includes "tracing/rgw_op.h"
302 # rgw/rgw_rados.cc includes "tracing/rgw_rados.h"
303 add_dependencies(rgw_common rgw_op-tp rgw_rados-tp)
307 add_dependencies(rgw_common jaeger_base)
308 target_link_libraries(rgw_common PUBLIC jaeger_base)
311 if(WITH_RADOSGW_DBSTORE)
312 target_link_libraries(rgw_common PRIVATE global dbstore)
315 if(WITH_RADOSGW_MOTR)
316 find_package(motr REQUIRED)
317 target_link_libraries(rgw_common PRIVATE motr::motr)
320 if(WITH_RADOSGW_DAOS)
321 find_package(DAOS REQUIRED)
322 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG ")
323 target_link_libraries(rgw_common PRIVATE daos dfs ds3 uuid duns)
324 target_include_directories(rgw_common PRIVATE ${PC_DAOS_INCLUDEDIR} )
325 link_directories( ${PC_DAOS_LIBRARY_DIRS} )
336 rgw_http_client_curl.cc
337 rgw_kmip_client_impl.cc
340 rgw_loadgen_process.cc
347 rgw_realm_reloader.cc
352 rgw_rest_ratelimit.cc
360 driver/rados/rgw_rest_bucket.cc
361 driver/rados/rgw_rest_log.cc
362 driver/rados/rgw_rest_realm.cc)
364 gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf
365 rgw_iam_policy_keywords.frag.cc)
366 set_source_files_properties(rgw_iam_policy.cc PROPERTIES
367 OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc
368 COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw)
371 add_library(rgw_a STATIC
374 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
376 target_include_directories(rgw_a
377 PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
378 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
379 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw/driver/rados"
380 PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip")
382 if(WITH_RADOSGW_AMQP_ENDPOINT)
383 find_package(RabbitMQ REQUIRED)
385 if(WITH_RADOSGW_KAFKA_ENDPOINT)
386 find_package(RDKafka 0.9.2 REQUIRED)
389 target_link_libraries(rgw_a
394 ${ARROW_FLIGHT_LIBRARIES}
400 if(WITH_CURL_OPENSSL)
401 # used by rgw_http_client_curl.cc
402 target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
407 set(rgw_schedulers_srcs
408 rgw_dmclock_scheduler_ctx.cc
409 rgw_dmclock_sync_scheduler.cc
410 rgw_dmclock_async_scheduler.cc)
412 add_library(rgw_schedulers STATIC ${rgw_schedulers_srcs})
413 target_link_libraries(rgw_schedulers
414 PUBLIC dmclock::dmclock spawn)
419 add_executable(radosgw ${radosgw_srcs})
421 if(WITH_RADOSGW_ARROW_FLIGHT)
422 # target_compile_definitions(radosgw PUBLIC WITH_ARROW_FLIGHT)
423 target_compile_definitions(rgw_common PUBLIC WITH_ARROW_FLIGHT)
424 target_include_directories(rgw_common
425 PUBLIC "${CMAKE_SOURCE_DIR}/src/arrow/cpp/src")
426 # target_include_directories(radosgw PUBLIC Arrow::Arrow)
427 endif(WITH_RADOSGW_ARROW_FLIGHT)
429 target_compile_definitions(radosgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
430 target_include_directories(radosgw
431 PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
432 PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip"
433 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
434 PRIVATE "${LUA_INCLUDE_DIR}")
436 target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
438 target_link_libraries(radosgw PRIVATE ${rgw_libs} rgw_schedulers kmip)
439 if(WITH_RADOSGW_BEAST_OPENSSL)
440 # used by rgw_asio_frontend.cc
441 target_link_libraries(radosgw PRIVATE OpenSSL::SSL)
443 install(TARGETS radosgw DESTINATION bin)
445 set(radosgw_admin_srcs
447 rgw_sync_checkpoint.cc
450 # this is unsatisfying and hopefully temporary; ARROW should not be
451 # part of radosgw_admin
452 if(WITH_RADOSGW_ARROW_FLIGHT)
453 list(APPEND radosgw_admin_srcs rgw_flight.cc)
454 endif(WITH_RADOSGW_ARROW_FLIGHT)
456 add_executable(radosgw-admin ${radosgw_admin_srcs})
457 target_link_libraries(radosgw-admin ${rgw_libs} librados
458 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
459 cls_log_client cls_timeindex_client
460 cls_version_client cls_user_client
463 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
465 # this is unsatisfying and hopefully temporary; ARROW should not be
466 # part of radosgw_admin
467 if(WITH_RADOSGW_ARROW_FLIGHT)
468 target_link_libraries(radosgw-admin ${ARROW_LIBRARIES} ${ARROW_FLIGHT_LIBRARIES})
469 endif(WITH_RADOSGW_ARROW_FLIGHT)
471 install(TARGETS radosgw-admin DESTINATION bin)
475 add_executable(radosgw-es ${radosgw_es_srcs})
476 target_link_libraries(radosgw-es ${rgw_libs} librados
477 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
478 cls_log_client cls_timeindex_client
479 cls_version_client cls_user_client
481 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
482 install(TARGETS radosgw-es DESTINATION bin)
484 set(radosgw_token_srcs
486 add_executable(radosgw-token ${radosgw_token_srcs})
487 target_link_libraries(radosgw-token librados
488 global ${ALLOC_LIBS})
489 install(TARGETS radosgw-token DESTINATION bin)
491 set(radosgw_object_expirer_srcs
492 rgw_object_expirer.cc)
493 add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs})
494 target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
495 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
496 cls_log_client cls_timeindex_client
497 cls_version_client cls_user_client
499 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
500 install(TARGETS radosgw-object-expirer DESTINATION bin)
502 set(radosgw_polparser_srcs
504 add_executable(rgw-policy-check ${radosgw_polparser_srcs})
505 target_link_libraries(rgw-policy-check ${rgw_libs})
506 install(TARGETS rgw-policy-check DESTINATION bin)
510 add_library(rgw SHARED ${librgw_srcs})
512 target_compile_definitions(rgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
513 target_include_directories(rgw
514 PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src"
515 PRIVATE "${CMAKE_SOURCE_DIR}/src/libkmip"
516 PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw"
517 PRIVATE "${LUA_INCLUDE_DIR}")
519 target_include_directories(rgw SYSTEM PUBLIC "../rapidjson/include")
521 target_link_libraries(rgw
542 if(WITH_RADOSGW_AMQP_ENDPOINT)
543 target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ)
544 target_link_libraries(rgw PRIVATE OpenSSL::SSL)
547 if(WITH_RADOSGW_KAFKA_ENDPOINT)
548 target_link_libraries(rgw PRIVATE RDKafka::RDKafka)
551 set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
553 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
556 add_executable(ceph_rgw_jsonparser
558 target_link_libraries(ceph_rgw_jsonparser
562 add_executable(ceph_rgw_multiparser
564 target_link_libraries(ceph_rgw_multiparser
576 rgw-gap-list-comparator
578 rgw-restore-bucket-index