]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: compile crimson-specific libraries 23957/head
authorKefu Chai <kchai@redhat.com>
Thu, 6 Sep 2018 09:46:55 +0000 (17:46 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 6 Sep 2018 15:29:52 +0000 (23:29 +0800)
- add crimson::cflags target for populating WITH_SEASTAR=1 macro
  so any library linking against crimson::cflags will have WITH_SEASTAR=1
  defined. but we still need to set the definition and include
  directories for object targets.
- there are two ways to use the seastar logging backend, to specify the
  backend at run-time, or to do so at compile-time. if we do so
  at run-time, we would need to include seastar specific headers in
  dout.h. this will force the non-seastar-osd components to pull in
  seastar header file or linkage dependencies. and it's not performant,
  as we need to check the option everytime we are about the print a log
  message as the ceph::common::ConfigProxy for seastar is not compatible
  ::ConfigProxy at binary level -- they don't inherit from the same
  parent class, and ceph_context does not keep a reference of this
  nonexistent parent class.
    if we respect WITH_SEASTAR preprocessor macro, the only downside is
  that we need to re-compile all compilation units using logging with
  WITH_SEASTAR=1. and this implies a side effect, we don't need to use
  template techniques to specialize for seastar anymore, we can just
  conditionalize the seastar/alien specific behavior on
  `#ifdef WITH_SEASTAR`.
    so in this change, we compile crimson-common and crimson-auth as the
  alternatives of ceph-common and common-auth-objs respectively. and
  WITH_SEASTAR=1 is defined when compiling them.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/CMakeLists.txt
src/auth/CMakeLists.txt
src/crimson/CMakeLists.txt
src/crush/CMakeLists.txt

index 7380a92906afa6e49547b6b855d471df46d75ca1..4b33242d6b0bc063368718a2075b86b313b1272c 100644 (file)
@@ -307,6 +307,9 @@ if(WITH_SEASTAR)
     endif()
   endmacro ()
   add_subdirectory(seastar)
+  # create the directory so cmake won't complain when looking at the imported
+  # target: Seastar exports this directory created at build-time
+  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/seastar/gen")
   add_subdirectory(crimson)
 endif()
 
index 113a956193cf6892e4ea7ad512904a1422dee3fb..5e19d8963b75515a03695f93c6204633559dd812 100644 (file)
@@ -14,3 +14,10 @@ set(auth_srcs
   unknown/AuthUnknownAuthorizeHandler.cc)
 
 add_library(common-auth-objs OBJECT ${auth_srcs})
+if(WITH_SEASTAR)
+  add_library(crimson-auth OBJECT ${auth_srcs})
+  target_compile_definitions(crimson-auth PRIVATE
+    "WITH_SEASTAR=1")
+  target_include_directories(crimson-auth PRIVATE
+    $<TARGET_PROPERTY:Seastar::seastar,INTERFACE_INCLUDE_DIRECTORIES>)
+endif()
index 39c6615529f085aa5dda5a0fed48ff6e4f24574a..4d6302f41b6773d4b53f1a4ce87bda83bb40ebba 100644 (file)
@@ -1,3 +1,115 @@
+add_library(crimson::cflags INTERFACE IMPORTED)
+set_target_properties(crimson::cflags PROPERTIES
+  INTERFACE_COMPILE_DEFINITIONS "WITH_SEASTAR=1"
+  INTERFACE_LINK_LIBRARIES Seastar::seastar)
+
+set(crimson_common_srcs
+  common/config_proxy.cc
+  common/assert.cc
+  common/log.cc)
+
+# the specialized version of ceph-common, where
+#  - the logging is sent to Seastar backend
+#  - and the template parameter of lock_policy is SINGLE
+add_library(crimson-common STATIC
+  ${PROJECT_SOURCE_DIR}/src/common/addr_parsing.c
+  ${PROJECT_SOURCE_DIR}/src/common/admin_socket.cc
+  ${PROJECT_SOURCE_DIR}/src/common/admin_socket_client.cc
+  ${PROJECT_SOURCE_DIR}/src/common/armor.c
+  ${PROJECT_SOURCE_DIR}/src/common/bit_str.cc
+  ${PROJECT_SOURCE_DIR}/src/common/bloom_filter.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_argparse.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_context.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_crypto.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_hash.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_time.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ceph_strings.cc
+  ${PROJECT_SOURCE_DIR}/src/common/cmdparse.cc
+  ${PROJECT_SOURCE_DIR}/src/common/common_init.cc
+  ${PROJECT_SOURCE_DIR}/src/common/code_environment.cc
+  ${PROJECT_SOURCE_DIR}/src/common/config.cc
+  ${PROJECT_SOURCE_DIR}/src/common/config_values.cc
+  ${PROJECT_SOURCE_DIR}/src/common/dout.cc
+  ${PROJECT_SOURCE_DIR}/src/common/entity_name.cc
+  ${PROJECT_SOURCE_DIR}/src/common/environment.cc
+  ${PROJECT_SOURCE_DIR}/src/common/errno.cc
+  ${PROJECT_SOURCE_DIR}/src/common/escape.cc
+  ${PROJECT_SOURCE_DIR}/src/common/hex.cc
+  ${PROJECT_SOURCE_DIR}/src/common/fs_types.cc
+  ${PROJECT_SOURCE_DIR}/src/common/histogram.cc
+  ${PROJECT_SOURCE_DIR}/src/common/hobject.cc
+  ${PROJECT_SOURCE_DIR}/src/common/hostname.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ipaddr.cc
+  ${PROJECT_SOURCE_DIR}/src/common/io_priority.cc
+  ${PROJECT_SOURCE_DIR}/src/common/lockdep.cc
+  ${PROJECT_SOURCE_DIR}/src/common/mutex_debug.cc
+  ${PROJECT_SOURCE_DIR}/src/common/mempool.cc
+  ${PROJECT_SOURCE_DIR}/src/common/options.cc
+  ${PROJECT_SOURCE_DIR}/src/common/perf_counters.cc
+  ${PROJECT_SOURCE_DIR}/src/common/perf_histogram.cc
+  ${PROJECT_SOURCE_DIR}/src/common/page.cc
+  ${PROJECT_SOURCE_DIR}/src/common/pipe.c
+  ${PROJECT_SOURCE_DIR}/src/common/snap_types.cc
+  ${PROJECT_SOURCE_DIR}/src/common/safe_io.c
+  ${PROJECT_SOURCE_DIR}/src/common/signal.cc
+  ${PROJECT_SOURCE_DIR}/src/common/str_list.cc
+  ${PROJECT_SOURCE_DIR}/src/common/str_map.cc
+  ${PROJECT_SOURCE_DIR}/src/common/strtol.cc
+  ${PROJECT_SOURCE_DIR}/src/common/reverse.c
+  ${PROJECT_SOURCE_DIR}/src/common/types.cc
+  ${PROJECT_SOURCE_DIR}/src/common/utf8.c
+  ${PROJECT_SOURCE_DIR}/src/common/version.cc
+  ${PROJECT_SOURCE_DIR}/src/common/BackTrace.cc
+  ${PROJECT_SOURCE_DIR}/src/common/CachedPrebufferedStreambuf.cc
+  ${PROJECT_SOURCE_DIR}/src/common/ConfUtils.cc
+  ${PROJECT_SOURCE_DIR}/src/common/DecayCounter.cc
+  ${PROJECT_SOURCE_DIR}/src/common/HTMLFormatter.cc
+  ${PROJECT_SOURCE_DIR}/src/common/Formatter.cc
+  ${PROJECT_SOURCE_DIR}/src/common/Graylog.cc
+  ${PROJECT_SOURCE_DIR}/src/common/LogEntry.cc
+  ${PROJECT_SOURCE_DIR}/src/common/Mutex.cc
+  ${PROJECT_SOURCE_DIR}/src/common/RefCountedObj.cc
+  ${PROJECT_SOURCE_DIR}/src/common/SubProcess.cc
+  ${PROJECT_SOURCE_DIR}/src/common/TextTable.cc
+  ${PROJECT_SOURCE_DIR}/src/common/Thread.cc
+  ${PROJECT_SOURCE_DIR}/src/common/HeartbeatMap.cc
+  ${PROJECT_SOURCE_DIR}/src/common/PluginRegistry.cc
+  ${PROJECT_SOURCE_DIR}/src/librbd/Features.cc
+  ${PROJECT_SOURCE_DIR}/src/log/Log.cc
+  ${PROJECT_SOURCE_DIR}/src/mgr/ServiceMap.cc
+  ${PROJECT_SOURCE_DIR}/src/mds/inode_backtrace.cc
+  ${PROJECT_SOURCE_DIR}/src/mds/mdstypes.cc
+  ${PROJECT_SOURCE_DIR}/src/mds/FSMap.cc
+  ${PROJECT_SOURCE_DIR}/src/mds/FSMapUser.cc
+  ${PROJECT_SOURCE_DIR}/src/mds/MDSMap.cc
+  ${PROJECT_SOURCE_DIR}/src/msg/msg_types.cc
+  ${PROJECT_SOURCE_DIR}/src/msg/Message.cc
+  ${PROJECT_SOURCE_DIR}/src/mon/MonCap.cc
+  ${PROJECT_SOURCE_DIR}/src/osd/osd_types.cc
+  ${PROJECT_SOURCE_DIR}/src/osd/ECMsgTypes.cc
+  ${PROJECT_SOURCE_DIR}/src/osd/HitSet.cc
+  ${PROJECT_SOURCE_DIR}/src/osd/OSDMap.cc
+  ${PROJECT_SOURCE_DIR}/src/osd/PGPeeringEvent.cc
+  ${crimson_common_srcs}
+  $<TARGET_OBJECTS:crimson-auth>
+  $<TARGET_OBJECTS:common_buffer_obj>
+  $<TARGET_OBJECTS:crimson-crush>
+  $<TARGET_OBJECTS:global_common_objs>)
+
+target_compile_definitions(crimson-common PRIVATE
+  "CEPH_LIBDIR=\"${CMAKE_INSTALL_FULL_LIBDIR}\""
+  "CEPH_PKGLIBDIR=\"${CMAKE_INSTALL_FULL_PKGLIBDIR}\"")
+
+target_link_libraries(crimson-common
+  PUBLIC
+    json_spirit
+  PRIVATE
+    crc32
+    crimson::cflags
+    Boost::iostreams
+    Boost::random
+    ${NSS_LIBRARIES} ${NSPR_LIBRARIES} ${OPENSSL_LIBRARIES})
+
 set(crimson_net_srcs
   net/Dispatcher.cc
   net/Errors.cc
@@ -6,13 +118,14 @@ set(crimson_net_srcs
 set(crimson_thread_srcs
   thread/ThreadPool.cc
   thread/Throttle.cc)
-set(crimson_common_srcs
-  common/config_proxy.cc
-  common/assert.cc
-  common/log.cc)
 add_library(crimson STATIC
-  ${crimson_common_srcs}
   ${crimson_net_srcs}
   ${crimson_thread_srcs}
   ${CMAKE_SOURCE_DIR}/src/common/buffer_seastar.cc)
-target_link_libraries(crimson Seastar::seastar ceph-common)
+target_compile_options(crimson PRIVATE
+  "-ftemplate-backtrace-limit=0")
+target_link_libraries(crimson
+  PUBLIC
+    crimson-common Seastar::seastar
+  PRIVATE
+    crimson::cflags)
index 1c875d594747307c300d257c1e612b41df2d3cf6..ae9b9f472beeb6a1ed65666c7c620709861f3bc0 100644 (file)
@@ -9,3 +9,11 @@ set(crush_srcs
   CrushLocation.cc)
 
 add_library(crush_objs OBJECT ${crush_srcs})
+
+if(WITH_SEASTAR)
+  add_library(crimson-crush OBJECT ${crush_srcs})
+  target_compile_definitions(crimson-crush PRIVATE
+    "WITH_SEASTAR=1")
+  target_include_directories(crimson-crush PRIVATE
+    $<TARGET_PROPERTY:Seastar::seastar,INTERFACE_INCLUDE_DIRECTORIES>)
+endif()