]> git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/CMakeLists.txt
c4555ca9c1a024eb8d33b6100913565322cf05fb
[ceph.git] / ceph / src / rgw / CMakeLists.txt
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")
8
9 find_program(GPERF gperf)
10 if(NOT GPERF)
11 message(FATAL_ERROR "Can't find gperf")
12 endif()
13 function(gperf_generate input output)
14 add_custom_command(
15 OUTPUT ${output}
16 COMMAND ${GPERF} ${input} | sed "s/register //g" > ${output}
17 DEPENDS ${input}
18 COMMENT "Generate ${output}"
19 )
20 endfunction()
21
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
29 services/svc_cls.cc
30 services/svc_config_key_rados.cc
31 services/svc_datalog_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_sync.cc
62 rgw_cache.cc
63 rgw_common.cc
64 rgw_compression.cc
65 rgw_cors.cc
66 rgw_cors_s3.cc
67 rgw_dencoder.cc
68 rgw_env.cc
69 rgw_es_query.cc
70 rgw_formats.cc
71 rgw_gc.cc
72 rgw_gc_log.cc
73 rgw_http_client.cc
74 rgw_json_enc.cc
75 rgw_keystone.cc
76 rgw_ldap.cc
77 rgw_lc.cc
78 rgw_lc_s3.cc
79 rgw_metadata.cc
80 rgw_multi.cc
81 rgw_multi_del.cc
82 rgw_obj_manifest.cc
83 rgw_pubsub.cc
84 rgw_sync.cc
85 rgw_data_sync.cc
86 rgw_sync_counters.cc
87 rgw_sync_module.cc
88 rgw_sync_module_aws.cc
89 rgw_sync_module_es.cc
90 rgw_sync_module_es_rest.cc
91 rgw_sync_module_log.cc
92 rgw_sync_module_pubsub.cc
93 rgw_sync_policy.cc
94 rgw_pubsub_push.cc
95 rgw_notify.cc
96 rgw_notify_event_type.cc
97 rgw_sync_module_pubsub_rest.cc
98 rgw_sync_trace.cc
99 rgw_trim_bilog.cc
100 rgw_trim_datalog.cc
101 rgw_trim_mdlog.cc
102 rgw_period_history.cc
103 rgw_period_puller.cc
104 rgw_reshard.cc
105 rgw_coroutine.cc
106 rgw_cr_rados.cc
107 rgw_cr_rest.cc
108 rgw_cr_tools.cc
109 rgw_object_expirer_core.cc
110 rgw_op.cc
111 rgw_otp.cc
112 rgw_policy_s3.cc
113 rgw_public_access.cc
114 rgw_putobj.cc
115 rgw_putobj_processor.cc
116 rgw_quota.cc
117 rgw_rados.cc
118 rgw_resolve.cc
119 rgw_rest.cc
120 rgw_rest_client.cc
121 rgw_rest_conn.cc
122 rgw_rest_log.cc
123 rgw_rest_metadata.cc
124 rgw_rest_pubsub.cc
125 rgw_rest_pubsub_common.cc
126 rgw_rest_realm.cc
127 rgw_rest_role.cc
128 rgw_rest_s3.cc
129 rgw_role.cc
130 rgw_sal.cc
131 rgw_string.cc
132 rgw_tag.cc
133 rgw_tag_s3.cc
134 rgw_tools.cc
135 rgw_user.cc
136 rgw_website.cc
137 rgw_xml.cc
138 rgw_xml_enc.cc
139 rgw_torrent.cc
140 rgw_crypt.cc
141 rgw_crypt_sanitize.cc
142 rgw_iam_policy.cc
143 rgw_rest_user_policy.cc
144 rgw_zone.cc
145 rgw_sts.cc
146 rgw_rest_sts.cc
147 rgw_perf_counters.cc
148 rgw_rest_iam.cc
149 rgw_object_lock.cc
150 rgw_kms.cc
151 rgw_url.cc)
152
153 if(WITH_RADOSGW_AMQP_ENDPOINT)
154 list(APPEND librgw_common_srcs rgw_amqp.cc)
155 endif()
156 if(WITH_RADOSGW_KAFKA_ENDPOINT)
157 list(APPEND librgw_common_srcs rgw_kafka.cc)
158 endif()
159
160 add_library(rgw_common OBJECT ${librgw_common_srcs})
161
162 target_include_directories(rgw_common SYSTEM PUBLIC "services")
163 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
164 target_include_directories(rgw_common PUBLIC "${CMAKE_SOURCE_DIR}/src/fmt/include")
165
166 if(WITH_BOOST_CONTEXT)
167 target_include_directories(rgw_common PRIVATE
168 $<TARGET_PROPERTY:spawn,INTERFACE_INCLUDE_DIRECTORIES>)
169 endif()
170
171 if(WITH_LTTNG)
172 # rgw/rgw_op.cc includes "tracing/rgw_op.h"
173 # rgw/rgw_rados.cc includes "tracing/rgw_rados.h"
174 add_dependencies(rgw_common rgw_op-tp rgw_rados-tp)
175 endif()
176
177 set(rgw_a_srcs
178 rgw_auth_keystone.cc
179 rgw_client_io.cc
180 rgw_frontend.cc
181 rgw_http_client_curl.cc
182 rgw_loadgen.cc
183 rgw_log.cc
184 rgw_period_pusher.cc
185 rgw_realm_reloader.cc
186 rgw_realm_watcher.cc
187 rgw_os_lib.cc
188 rgw_process.cc
189 rgw_rest_bucket.cc
190 rgw_rest_config.cc
191 rgw_rest_log.cc
192 rgw_rest_metadata.cc
193 rgw_rest_realm.cc
194 rgw_rest_swift.cc
195 rgw_rest_usage.cc
196 rgw_rest_user.cc
197 rgw_swift_auth.cc
198 rgw_usage.cc
199 rgw_opa.cc
200 rgw_sts.cc
201 rgw_rest_sts.cc)
202
203 gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf
204 rgw_iam_policy_keywords.frag.cc)
205 set_source_files_properties(rgw_iam_policy.cc PROPERTIES
206 OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc
207 COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw)
208
209
210 if (WITH_RADOSGW_FCGI_FRONTEND)
211 list(APPEND rgw_a_srcs rgw_fcgi.cc)
212 endif()
213
214 add_library(rgw_a STATIC
215 ${rgw_a_srcs}
216 $<TARGET_OBJECTS:rgw_common>)
217
218 add_dependencies(rgw_a civetweb_h)
219
220 target_compile_definitions(rgw_a PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
221 target_include_directories(rgw_a PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
222 target_include_directories(rgw_a SYSTEM PUBLIC "../rapidjson/include")
223
224 if(WITH_RADOSGW_AMQP_ENDPOINT)
225 find_package(RabbitMQ REQUIRED)
226 endif()
227 if(WITH_RADOSGW_KAFKA_ENDPOINT)
228 find_package(RDKafka 0.9.2 REQUIRED)
229 endif()
230
231 target_link_libraries(rgw_a
232 PRIVATE
233 librados cls_otp_client cls_lock_client cls_rgw_client cls_refcount_client
234 cls_log_client cls_timeindex_client cls_version_client
235 cls_user_client cls_rgw_gc_client ceph-common common_utf8 global
236 ${CURL_LIBRARIES}
237 ${EXPAT_LIBRARIES}
238 ${OPENLDAP_LIBRARIES} ${CRYPTO_LIBS}
239 OATH::OATH)
240
241 if(WITH_CURL_OPENSSL)
242 # used by rgw_http_client_curl.cc
243 target_link_libraries(rgw_a PRIVATE OpenSSL::Crypto)
244 endif()
245
246 if(WITH_BOOST_CONTEXT)
247 target_link_libraries(rgw_a PUBLIC spawn)
248 endif()
249
250 set(rgw_libs rgw_a)
251 if(WITH_RADOSGW_AMQP_ENDPOINT)
252 # used by rgw_amqp.cc
253 list(APPEND rgw_libs RabbitMQ::RabbitMQ)
254 endif()
255 if(WITH_RADOSGW_KAFKA_ENDPOINT)
256 # used by rgw_kafka.cc
257 list(APPEND rgw_libs RDKafka::RDKafka)
258 endif()
259
260 set(rgw_schedulers_srcs
261 rgw_dmclock_scheduler_ctx.cc
262 rgw_dmclock_sync_scheduler.cc)
263 set(radosgw_srcs
264 rgw_loadgen_process.cc
265 rgw_civetweb.cc
266 rgw_civetweb_frontend.cc
267 rgw_civetweb_log.cc)
268 if (WITH_RADOSGW_FCGI_FRONTEND)
269 list(APPEND radosgw_srcs rgw_fcgi_process.cc)
270 endif()
271
272 if(WITH_RADOSGW_BEAST_FRONTEND)
273 list(APPEND radosgw_srcs
274 rgw_asio_client.cc
275 rgw_asio_frontend.cc)
276 list(APPEND rgw_schedulers_srcs
277 rgw_dmclock_async_scheduler.cc)
278 endif()
279
280 add_library(rgw_schedulers STATIC ${rgw_schedulers_srcs})
281 target_link_libraries(rgw_schedulers
282 PUBLIC dmclock::dmclock)
283
284 add_library(radosgw SHARED ${radosgw_srcs} ${rgw_a_srcs} rgw_main.cc
285 $<TARGET_OBJECTS:civetweb_common_objs>)
286
287 add_dependencies(radosgw civetweb_h)
288
289 target_compile_definitions(radosgw PUBLIC "-DCLS_CLIENT_HIDE_IOCTX")
290 target_include_directories(radosgw PUBLIC "${CMAKE_SOURCE_DIR}/src/dmclock/support/src")
291 target_include_directories(radosgw SYSTEM PUBLIC "../rapidjson/include")
292
293 target_link_libraries(radosgw
294 PRIVATE ${rgw_libs} rgw_schedulers
295 PUBLIC dmclock::dmclock
296 )
297 if(WITH_RADOSGW_BEAST_FRONTEND)
298 target_link_libraries(rgw_schedulers PUBLIC spawn)
299 if(WITH_RADOSGW_BEAST_OPENSSL)
300 # used by rgw_asio_frontend.cc
301 target_link_libraries(radosgw PRIVATE OpenSSL::SSL)
302 endif()
303 endif()
304 set_target_properties(radosgw PROPERTIES OUTPUT_NAME radosgw VERSION 2.0.0
305 SOVERSION 2)
306 install(TARGETS radosgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
307
308 add_executable(radosgwd radosgw.cc)
309 target_link_libraries(radosgwd radosgw librados
310 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
311 cls_log_client cls_timeindex_client
312 cls_version_client cls_user_client
313 global
314 ${FCGI_LIBRARY} ${LIB_RESOLV}
315 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES}
316 ${ALLOC_LIBS})
317 set_target_properties(radosgwd PROPERTIES OUTPUT_NAME radosgw)
318 install(TARGETS radosgwd DESTINATION bin)
319
320 set(radosgw_admin_srcs
321 rgw_admin.cc
322 rgw_orphan.cc)
323 add_executable(radosgw-admin ${radosgw_admin_srcs})
324 target_link_libraries(radosgw-admin ${rgw_libs} librados
325 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
326 cls_log_client cls_timeindex_client
327 cls_version_client cls_user_client
328 global ${FCGI_LIBRARY} ${LIB_RESOLV}
329 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
330 install(TARGETS radosgw-admin DESTINATION bin)
331
332 set(radosgw_es_srcs
333 rgw_es_main.cc)
334 add_executable(radosgw-es ${radosgw_es_srcs})
335 target_link_libraries(radosgw-es ${rgw_libs} librados
336 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
337 cls_log_client cls_timeindex_client
338 cls_version_client cls_user_client
339 global ${FCGI_LIBRARY} ${LIB_RESOLV}
340 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES})
341 install(TARGETS radosgw-es DESTINATION bin)
342
343 set(radosgw_token_srcs
344 rgw_token.cc)
345 add_executable(radosgw-token ${radosgw_token_srcs})
346 target_link_libraries(radosgw-token librados
347 global ${ALLOC_LIBS})
348 install(TARGETS radosgw-token DESTINATION bin)
349
350 set(radosgw_object_expirer_srcs
351 rgw_object_expirer.cc)
352 add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs})
353 target_link_libraries(radosgw-object-expirer ${rgw_libs} librados
354 cls_rgw_client cls_otp_client cls_lock_client cls_refcount_client
355 cls_log_client cls_timeindex_client
356 cls_version_client cls_user_client
357 global ${FCGI_LIBRARY} ${LIB_RESOLV}
358 ${CURL_LIBRARIES} ${EXPAT_LIBRARIES})
359 install(TARGETS radosgw-object-expirer DESTINATION bin)
360
361 set(librgw_srcs
362 librgw.cc
363 rgw_file.cc)
364 add_library(rgw SHARED ${librgw_srcs})
365 target_link_libraries(rgw
366 PRIVATE
367 ${rgw_libs}
368 librados
369 cls_rgw_client
370 cls_otp_client
371 cls_lock_client
372 cls_refcount_client
373 cls_log_client
374 cls_timeindex_client
375 cls_version_client
376 cls_user_client
377 global
378 ${LIB_RESOLV}
379 ${CURL_LIBRARIES}
380 ${EXPAT_LIBRARIES}
381 PUBLIC
382 dmclock::dmclock)
383
384 if(WITH_RADOSGW_AMQP_ENDPOINT)
385 target_link_libraries(rgw PRIVATE RabbitMQ::RabbitMQ)
386 endif()
387
388 if(WITH_RADOSGW_KAFKA_ENDPOINT)
389 target_link_libraries(rgw PRIVATE RDKafka::RDKafka)
390 endif()
391
392 set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0
393 SOVERSION 2)
394 install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR})
395
396 set(librgw_admin_user_srcs
397 librgw_admin_user.cc
398 rgw_admin_user.cc
399 )
400 add_library(rgw_admin_user SHARED
401 ${librgw_admin_user_srcs}
402 $<TARGET_OBJECTS:rgw_common>)
403
404 add_dependencies(rgw_admin_user civetweb_h)
405
406 target_link_libraries(rgw_admin_user PRIVATE
407 librados
408 cls_rgw_client
409 cls_otp_client
410 cls_lock_client
411 cls_refcount_client
412 cls_log_client
413 cls_timeindex_client
414 cls_version_client
415 cls_user_client
416 cls_rgw_gc_client
417 global
418 ${CURL_LIBRARIES}
419 ${EXPAT_LIBRARIES}
420 ${OPENLDAP_LIBRARIES}
421 dmclock::dmclock)
422 set_target_properties(rgw_admin_user PROPERTIES OUTPUT_NAME rgw_admin_user VERSION 1.0.0
423 SOVERSION 0)
424 install(TARGETS rgw_admin_user DESTINATION ${CMAKE_INSTALL_LIBDIR})
425 if(WITH_RADOSGW_AMQP_ENDPOINT)
426 target_link_libraries(rgw_admin_user PRIVATE RabbitMQ::RabbitMQ)
427 endif()
428 if(WITH_RADOSGW_KAFKA_ENDPOINT)
429 target_link_libraries(rgw_admin_user PRIVATE RDKafka::RDKafka)
430 endif()
431 if(WITH_BOOST_CONTEXT)
432 target_link_libraries(rgw_admin_user PRIVATE spawn)
433 endif()
434
435 if(WITH_TESTS)
436 add_executable(ceph_rgw_jsonparser
437 rgw_jsonparser.cc)
438 target_link_libraries(ceph_rgw_jsonparser
439 ${rgw_libs}
440 global)
441
442 add_executable(ceph_rgw_multiparser
443 rgw_multiparser.cc)
444 target_link_libraries(ceph_rgw_multiparser
445 ${rgw_libs}
446 global)
447
448 install(TARGETS
449 ceph_rgw_jsonparser
450 ceph_rgw_multiparser
451 DESTINATION bin)
452 endif(WITH_TESTS)
453
454 install(PROGRAMS rgw-orphan-list
455 DESTINATION bin)