if(WITH_TESTS) add_executable(ceph_rgw_jsonparser rgw_jsonparser.cc) target_link_libraries(ceph_rgw_jsonparser rgw_a global) add_executable(ceph_rgw_multiparser rgw_multiparser.cc) target_link_libraries(ceph_rgw_multiparser rgw_a global) install(TARGETS ceph_rgw_jsonparser ceph_rgw_multiparser DESTINATION bin) endif(WITH_TESTS) add_custom_target(civetweb_h COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/src/include/civetweb" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/src/civetweb/include/civetweb.h" "${CMAKE_BINARY_DIR}/src/include/civetweb" COMMENT "keep civetweb.h up-to-date") find_program(GPERF gperf) if(NOT GPERF) message(FATAL_ERROR "Can't find gperf") endif() function(gperf_generate input output) add_custom_command( OUTPUT ${output} COMMAND ${GPERF} ${input} > ${output} DEPENDS ${input} COMMENT "Generate ${output}" ) endfunction() set(rgw_a_srcs rgw_acl.cc rgw_acl_s3.cc rgw_acl_swift.cc rgw_auth.cc rgw_auth_keystone.cc rgw_auth_s3.cc rgw_basic_types.cc rgw_bucket.cc rgw_cache.cc rgw_client_io.cc rgw_common.cc rgw_compression.cc rgw_cors.cc rgw_cors_s3.cc rgw_dencoder.cc rgw_env.cc rgw_es_query.cc rgw_formats.cc rgw_frontend.cc rgw_gc.cc rgw_http_client.cc rgw_json_enc.cc rgw_keystone.cc rgw_ldap.cc rgw_loadgen.cc rgw_log.cc rgw_lc.cc rgw_lc_s3.cc rgw_metadata.cc rgw_multi.cc rgw_multi_del.cc rgw_sync.cc rgw_data_sync.cc rgw_sync_module.cc rgw_sync_module_es.cc rgw_sync_module_es_rest.cc rgw_sync_module_log.cc rgw_period_history.cc rgw_period_puller.cc rgw_period_pusher.cc rgw_realm_reloader.cc rgw_realm_watcher.cc rgw_reshard.cc rgw_coroutine.cc rgw_cr_rados.cc rgw_object_expirer_core.cc rgw_op.cc rgw_os_lib.cc rgw_policy_s3.cc rgw_process.cc rgw_quota.cc rgw_rados.cc rgw_replica_log.cc rgw_request.cc rgw_resolve.cc rgw_rest_bucket.cc rgw_rest.cc rgw_rest_client.cc rgw_rest_config.cc rgw_rest_conn.cc rgw_rest_log.cc rgw_rest_metadata.cc rgw_rest_opstate.cc rgw_rest_realm.cc rgw_rest_replica_log.cc rgw_rest_role.cc rgw_rest_s3.cc rgw_rest_swift.cc rgw_rest_usage.cc rgw_rest_user.cc rgw_role.cc rgw_string.cc rgw_swift_auth.cc rgw_tag.cc rgw_tag_s3.cc rgw_tools.cc rgw_usage.cc rgw_user.cc rgw_website.cc rgw_xml.cc rgw_xml_enc.cc rgw_torrent.cc rgw_crypt.cc rgw_crypt_sanitize.cc rgw_iam_policy.cc) gperf_generate(${CMAKE_SOURCE_DIR}/src/rgw/rgw_iam_policy_keywords.gperf rgw_iam_policy_keywords.frag.cc) set_source_files_properties(rgw_iam_policy.cc PROPERTIES OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/src/rgw/rgw_iam_policy_keywords.frag.cc COMPILE_FLAGS -I${CMAKE_BINARY_DIR}/src/rgw) if (WITH_RADOSGW_FCGI_FRONTEND) list(APPEND rgw_a_srcs rgw_fcgi.cc) endif() add_library(rgw_a STATIC ${rgw_a_srcs}) add_dependencies(rgw_a civetweb_h) target_include_directories(rgw_a PUBLIC "../Beast/include" ${FCGI_INCLUDE_DIR} "../rapidjson/include" ) target_compile_definitions(rgw_a PUBLIC BOOST_COROUTINES_NO_DEPRECATION_WARNING) target_link_libraries(rgw_a librados cls_lock_client cls_rgw_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client ceph-common common_utf8 global ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${OPENLDAP_LIBRARIES} ${CRYPTO_LIBS}) set(radosgw_srcs rgw_loadgen_process.cc rgw_civetweb.cc rgw_civetweb_frontend.cc rgw_civetweb_log.cc) if (WITH_RADOSGW_FCGI_FRONTEND) list(APPEND radosgw_srcs rgw_fcgi_process.cc) endif() if (WITH_RADOSGW_BEAST_FRONTEND) list(APPEND radosgw_srcs rgw_asio_client.cc rgw_asio_frontend.cc) endif (WITH_RADOSGW_BEAST_FRONTEND) add_library(radosgw_a STATIC ${radosgw_srcs} $) target_link_libraries(radosgw_a rgw_a ${SSL_LIBRARIES}) if(WITH_RADOSGW_BEAST_FRONTEND) target_link_libraries(radosgw_a Boost::coroutine Boost::context) endif() add_executable(radosgw rgw_main.cc) target_link_libraries(radosgw radosgw_a librados cls_rgw_client cls_lock_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${BLKID_LIBRARIES} ${ALLOC_LIBS}) # radosgw depends on cls libraries at runtime, but not as link dependencies add_dependencies(radosgw cls_rgw cls_lock cls_refcount cls_log cls_statelog cls_timeindex cls_version cls_replica_log cls_user) install(TARGETS radosgw DESTINATION bin) set(radosgw_admin_srcs rgw_admin.cc rgw_orphan.cc) add_executable(radosgw-admin ${radosgw_admin_srcs}) target_link_libraries(radosgw-admin rgw_a librados cls_rgw_client cls_lock_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${SSL_LIBRARIES} ${BLKID_LIBRARIES}) install(TARGETS radosgw-admin DESTINATION bin) set(radosgw_es_srcs rgw_es_main.cc) add_executable(radosgw-es ${radosgw_es_srcs}) target_link_libraries(radosgw-es rgw_a librados cls_rgw_client cls_lock_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} ${CURL_LIBRARIES} ${EXPAT_LIBRARIES} ${SSL_LIBRARIES} ${BLKID_LIBRARIES}) install(TARGETS radosgw-es DESTINATION bin) set(radosgw_token_srcs rgw_token.cc) add_executable(radosgw-token ${radosgw_token_srcs}) target_link_libraries(radosgw-token librados global ${ALLOC_LIBS}) install(TARGETS radosgw-token DESTINATION bin) set(radosgw_object_expirer_srcs rgw_object_expirer.cc) add_executable(radosgw-object-expirer ${radosgw_object_expirer_srcs}) target_link_libraries(radosgw-object-expirer rgw_a librados cls_rgw_client cls_lock_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client global ${FCGI_LIBRARY} ${LIB_RESOLV} ${CURL_LIBRARIES} ${EXPAT_LIBRARIES}) install(TARGETS radosgw-object-expirer DESTINATION bin) set(librgw_srcs librgw.cc rgw_file.cc) add_library(rgw SHARED ${librgw_srcs}) target_link_libraries(rgw LINK_PRIVATE rgw_a librados cls_rgw_client cls_lock_client cls_refcount_client cls_log_client cls_statelog_client cls_timeindex_client cls_version_client cls_replica_log_client cls_user_client global ${LIB_RESOLV} ${CURL_LIBRARIES} ${EXPAT_LIBRARIES}) set_target_properties(rgw PROPERTIES OUTPUT_NAME rgw VERSION 2.0.0 SOVERSION 2) install(TARGETS rgw DESTINATION ${CMAKE_INSTALL_LIBDIR}) if(WITH_EMBEDDED) include(MergeStaticLibraries) add_library(cephd_rgw_base STATIC rgw_main.cc ${radosgw_admin_srcs}) if(WITH_RADOSGW_FCGI_FRONTEND) target_include_directories(cephd_rgw_base PUBLIC ${FCGI_INCLUDE_DIR}) endif() set_target_properties(cephd_rgw_base PROPERTIES COMPILE_DEFINITIONS BUILDING_FOR_EMBEDDED) merge_static_libraries(cephd_rgw cephd_rgw_base rgw_a radosgw_a) if(WITH_RADOSGW_FCGI_FRONTEND) target_link_libraries(cephd_rgw ${FCGI_LIBRARY}) endif() endif()