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