1 add_custom_target(civetweb_h
2 COMMAND ${CMAKE_COMMAND} -E make_directory
3 "${CMAKE_BINARY_DIR}/src/include/civetweb"
4 COMMAND ${CMAKE_COMMAND} -E copy_if_different
5 "${CMAKE_SOURCE_DIR}/src/civetweb/include/civetweb.h"
6 "${CMAKE_BINARY_DIR}/src/include/civetweb"
7 COMMENT "keep civetweb.h up-to-date")
9 find_program(GPERF gperf)
11 message(FATAL_ERROR "Can't find gperf")
13 function(gperf_generate input output)
16 COMMAND ${GPERF} ${input} | sed "s/register //g" > ${output}
18 COMMENT "Generate ${output}"
22 set(librgw_common_srcs
23 services/svc_finisher.cc
24 services/svc_bi_rados.cc
25 services/svc_bilog_rados.cc
26 services/svc_bucket.cc
27 services/svc_bucket_sobj.cc
28 services/svc_bucket_sync_sobj.cc
30 services/svc_config_key_rados.cc
31 services/svc_datalog_rados.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
40 services/svc_sync_modules.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
47 services/svc_user_rados.cc
49 services/svc_zone_utils.cc
89 rgw_sync_module_aws.cc
91 rgw_sync_module_es_rest.cc
92 rgw_sync_module_log.cc
93 rgw_sync_module_pubsub.cc
97 rgw_notify_event_type.cc
98 rgw_sync_module_pubsub_rest.cc
103 rgw_period_history.cc
110 rgw_object_expirer_core.cc
116 rgw_putobj_processor.cc
126 rgw_rest_pubsub_common.cc
142 rgw_crypt_sanitize.cc
144 rgw_rest_user_policy.cc
149 rgw_rest_oidc_provider.cc
156 if(WITH_RADOSGW_AMQP_ENDPOINT)
157 list(APPEND librgw_common_srcs rgw_amqp.cc)
159 if(WITH_RADOSGW_KAFKA_ENDPOINT)
160 list(APPEND librgw_common_srcs rgw_kafka.cc)
163 add_library(rgw_common OBJECT ${librgw_common_srcs})
165 target_include_directories(rgw_common SYSTEM PUBLIC "services")
166 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
167 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/fmt/include")
168 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
170 if(WITH_BOOST_CONTEXT)
171 target_include_directories(rgw_common PRIVATE
172 $<TARGET_PROPERTY:spawn,INTERFACE_INCLUDE_DIRECTORIES>)
176 # rgw/rgw_op.cc includes "tracing/rgw_op.h"
177 # rgw/rgw_rados.cc includes "tracing/rgw_rados.h"
178 add_dependencies(rgw_common rgw_op-tp rgw_rados-tp)
185 rgw_http_client_curl.cc
189 rgw_realm_reloader.cc
207 gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf
208 rgw_iam_policy_keywords.frag.cc)
209 set_source_files_properties(rgw_iam_policy.cc PROPERTIES
210 OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc
211 COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw)
214 if (WITH_RADOSGW_FCGI_FRONTEND)
215 list(APPEND rgw_a_srcs rgw_fcgi.cc)
218 add_library(rgw_a STATIC
220 $<TARGET_OBJECTS:rgw_common>)
222 add_dependencies(rgw_a civetweb_h)
224 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
225 target_include_directories(rgw_a PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
226 target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include")
227 target_include_directories(rgw_a SYSTEM PUBLIC "${CMAKE_SOURCE_DIR}/src/rgw")
229 if(WITH_RADOSGW_AMQP_ENDPOINT)
230 find_package(RabbitMQ REQUIRED)
232 if(WITH_RADOSGW_KAFKA_ENDPOINT)
233 find_package(RDKafka 0.9.2 REQUIRED)
236 target_link_libraries(rgw_a
238 librados cls_otp_client cls_lock_client cls_rgw_client cls_refcount_client
239 cls_log_client cls_timeindex_client cls_version_client
240 cls_user_client cls_rgw_gc_client ceph-common common_utf8 global
243 ${OPENLDAP_LIBRARIES} ${CRYPTO_LIBS}
246 if(WITH_CURL_OPENSSL)
247 # used by rgw_http_client_curl.cc
248 target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
251 if(WITH_BOOST_CONTEXT)
252 target_link_libraries(rgw_a PUBLIC spawn)
256 if(WITH_RADOSGW_AMQP_ENDPOINT)
257 # used by rgw_amqp.cc
258 list(APPEND rgw_libs RabbitMQ::RabbitMQ)
260 if(WITH_RADOSGW_KAFKA_ENDPOINT)
261 # used by rgw_kafka.cc
262 list(APPEND rgw_libs RDKafka::RDKafka)
265 set(rgw_schedulers_srcs
266 rgw_dmclock_scheduler_ctx.cc
267 rgw_dmclock_sync_scheduler.cc)
269 rgw_loadgen_process.cc
271 rgw_civetweb_frontend.cc
273 if (WITH_RADOSGW_FCGI_FRONTEND)
274 list(APPEND radosgw_srcs rgw_fcgi_process.cc)
277 if(WITH_RADOSGW_BEAST_FRONTEND)
278 list(APPEND radosgw_srcs
280 rgw_asio_frontend.cc)
281 list(APPEND rgw_schedulers_srcs
282 rgw_dmclock_async_scheduler.cc)
285 add_library(rgw_schedulers STATIC ${rgw_schedulers_srcs})
286 target_link_libraries(rgw_schedulers
287 PUBLIC dmclock::dmclock)
289 add_library(radosgw SHARED ${radosgw_srcs} ${rgw_a_srcs} rgw_main.cc
290 $<TARGET_OBJECTS:civetweb_common_objs>)
292 add_dependencies(radosgw civetweb_h)
294 target_compile_definitions(radosgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
295 target_include_directories(radosgw PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
296 target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
298 target_link_libraries(radosgw
299 PRIVATE ${rgw_libs} rgw_schedulers
300 PUBLIC dmclock::dmclock
302 if(WITH_RADOSGW_BEAST_FRONTEND)
303 target_link_libraries(rgw_schedulers PUBLIC spawn)
304 if(WITH_RADOSGW_BEAST_OPENSSL)
305 # used by rgw_asio_frontend.cc
306 target_link_libraries(radosgw PRIVATE OpenSSL::SSL)
309 set_target_properties(radosgw PROPERTIES OUTPUT_NAME radosgw VERSION 2.0.0
311 install(TARGETS radosgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
313 add_executable(radosgwd radosgw.cc)
314 target_link_libraries(radosgwd radosgw librados
315 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
316 cls_log_client cls_timeindex_client
317 cls_version_client cls_user_client
319 ${FCGI_LIBRARY} ${LIB_RESOLV}
320 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}
322 set_target_properties(radosgwd PROPERTIES OUTPUT_NAME radosgw)
323 install(TARGETS radosgwd DESTINATION bin)
325 set(radosgw_admin_srcs
328 add_executable(radosgw-admin ${radosgw_admin_srcs})
329 target_link_libraries(radosgw-admin ${rgw_libs} librados
330 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
331 cls_log_client cls_timeindex_client
332 cls_version_client cls_user_client
333 global ${FCGI_LIBRARY} ${LIB_RESOLV}
334 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
335 install(TARGETS radosgw-admin DESTINATION bin)
339 add_executable(radosgw-es ${radosgw_es_srcs})
340 target_link_libraries(radosgw-es ${rgw_libs} librados
341 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
342 cls_log_client cls_timeindex_client
343 cls_version_client cls_user_client
344 global ${FCGI_LIBRARY} ${LIB_RESOLV}
345 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
346 install(TARGETS radosgw-es DESTINATION bin)
348 set(radosgw_token_srcs
350 add_executable(radosgw-token ${radosgw_token_srcs})
351 target_link_libraries(radosgw-token librados
352 global ${ALLOC_LIBS})
353 install(TARGETS radosgw-token DESTINATION bin)
355 set(radosgw_object_expirer_srcs
356 rgw_object_expirer.cc)
357 add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs})
358 target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
359 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
360 cls_log_client cls_timeindex_client
361 cls_version_client cls_user_client
362 global ${FCGI_LIBRARY} ${LIB_RESOLV}
363 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
364 install(TARGETS radosgw-object-expirer DESTINATION bin)
369 add_library(rgw SHARED ${librgw_srcs})
370 target_link_libraries(rgw
389 if(WITH_RADOSGW_AMQP_ENDPOINT)
390 target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ)
393 if(WITH_RADOSGW_KAFKA_ENDPOINT)
394 target_link_libraries(rgw PRIVATE RDKafka::RDKafka)
397 set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
399 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
402 add_executable(ceph_rgw_jsonparser
404 target_link_libraries(ceph_rgw_jsonparser
408 add_executable(ceph_rgw_multiparser
410 target_link_libraries(ceph_rgw_multiparser
420 install(PROGRAMS rgw-orphan-list