]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cmake: refactor RocksDB related script
authorKefu Chai <kchai@redhat.com>
Mon, 6 Aug 2018 09:55:02 +0000 (17:55 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 6 Aug 2018 11:37:43 +0000 (19:37 +0800)
* rename Findrocksdb.cmake to FindRocksDB.cmake to match its name
* add RocksDB::RocksDB target to BuildRocksDB.cmake and
  FindRocksDB.cmake
* use RocksDB::RocksDB target instead of accessing its property
  directly, and do not link against its dependencies explicitly.
  let its INTERFACE_LINK_LIBRARIES do the job.

Signed-off-by: Kefu Chai <kchai@redhat.com>
CMakeLists.txt
cmake/modules/BuildRocksDB.cmake
cmake/modules/FindRocksDB.cmake [new file with mode: 0644]
cmake/modules/Findrocksdb.cmake [deleted file]
src/kv/CMakeLists.txt
src/os/CMakeLists.txt

index ba65aa9f3187d8e5134da3372ee566f0ea4c52b8..af27c909c5f5fe87494207877ecf1af2fc432f7b 100644 (file)
@@ -587,7 +587,7 @@ endif()
 # Rocksdb
 option(WITH_SYSTEM_ROCKSDB "require and build with system rocksdb" OFF)
 if (WITH_SYSTEM_ROCKSDB)
-  find_package(rocksdb 5.8 REQUIRED)
+  find_package(RocksDB 5.8 REQUIRED)
 endif()
 
 option(WITH_SEASTAR "Build seastar components")
index f3e0c5b2ee1ea9a98982747321e56897504a542c..69741f46015d87af3bb40969dae065ebdd789217 100644 (file)
@@ -1,67 +1,83 @@
-function(do_build_rocksdb)
-  set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
-  list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_GFLAGS=OFF)
+function(build_rocksdb)
+  set(rocksdb_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
+  list(APPEND rocksdb_CMAKE_ARGS -DWITH_GFLAGS=OFF)
 
   if(ALLOCATOR STREQUAL "jemalloc")
-    list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_JEMALLOC=ON)
+    list(APPEND rocksdb_CMAKE_ARGS -DWITH_JEMALLOC=ON)
+    list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES JeMalloc::JeMalloc)
   endif()
 
   if (WITH_CCACHE AND CCACHE_FOUND)
-    list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=ccache)
-    list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=${CMAKE_CXX_COMPILER})
+    list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_CXX_COMPILER=ccache)
+    list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_CXX_COMPILER_ARG1=${CMAKE_CXX_COMPILER})
   else()
-    list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
+    list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
   endif()
 
+  list(APPEND rocksdb_CMAKE_ARGS -DWITH_SNAPPY=${SNAPPY_FOUND})
+  if(SNAPPY_FOUND)
+    list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES snappy::snappy)
+  endif()
   # libsnappy is a C++ library, we need to force rocksdb to link against
   # libsnappy statically.
-  list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_SNAPPY=${SNAPPY_FOUND})
   if(SNAPPY_FOUND AND WITH_STATIC_LIBSTDCXX)
-    list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_SNAPPY_STATIC_LIB=ON)
+    list(APPEND rocksdb_CMAKE_ARGS -DWITH_SNAPPY_STATIC_LIB=ON)
+  endif()
+
+  list(APPEND rocksdb_CMAKE_ARGS -DWITH_LZ4=${LZ4_FOUND})
+  if(LZ4_FOUND)
+    list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES LZ4::LZ4)
+  endif()
+
+  list(APPEND rocksdb_CMAKE_ARGS -DWITH_ZLIB=${ZLIB_FOUND})
+  if(ZLIB_FOUND)
+    list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
   endif()
-  list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_LZ4=${LZ4_FOUND})
-  list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_ZLIB=${ZLIB_FOUND})
-  list(APPEND ROCKSDB_CMAKE_ARGS -DPORTABLE=ON)
-  list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_AR=${CMAKE_AR})
-  list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
-  list(APPEND ROCKSDB_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF)
-  list(APPEND ROCKSDB_CMAKE_ARGS -DUSE_RTTI=1)
+
+  list(APPEND rocksdb_CMAKE_ARGS -DPORTABLE=ON)
+  list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_AR=${CMAKE_AR})
+  list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
+  list(APPEND rocksdb_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF)
+  list(APPEND rocksdb_CMAKE_ARGS -DUSE_RTTI=1)
   CHECK_C_COMPILER_FLAG("-Wno-stringop-truncation" HAS_WARNING_STRINGOP_TRUNCATION)
   if(HAS_WARNING_STRINGOP_TRUNCATION)
-    list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_C_FLAGS="-Wno-stringop-truncation")
+    list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_C_FLAGS="-Wno-stringop-truncation")
   endif()
   # we use an external project and copy the sources to bin directory to ensure
   # that object files are built outside of the source tree.
   include(ExternalProject)
+  set(rocksdb_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb")
+  set(rocksdb_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocksdb")
   ExternalProject_Add(rocksdb_ext
-    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb
-    CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS}
-    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rocksdb
+    SOURCE_DIR "${rocksdb_SOURCE_DIR}"
+    CMAKE_ARGS ${rocksdb_CMAKE_ARGS}
+    BINARY_DIR "${rocksdb_BINARY_DIR}"
     BUILD_COMMAND $(MAKE) rocksdb
     INSTALL_COMMAND "true")
-
   # force rocksdb make to be called on each time
   ExternalProject_Add_Step(rocksdb_ext forcebuild
     DEPENDEES configure
     DEPENDERS build
     COMMAND "true"
     ALWAYS 1)
-endfunction()
 
-macro(build_rocksdb)
-  do_build_rocksdb()
-  add_library(rocksdb STATIC IMPORTED)
-  add_dependencies(rocksdb rocksdb_ext)
-  set_property(TARGET rocksdb PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rocksdb/librocksdb.a")
-  set(ROCKSDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include)
-  set(ROCKSDB_LIBRARIES rocksdb)
+  add_library(RocksDB::RocksDB STATIC IMPORTED)
+  add_dependencies(RocksDB::RocksDB rocksdb_ext)
+  set(rocksdb_INCLUDE_DIR "${rocksdb_SOURCE_DIR}/include")
+  set(rocksdb_LIBRARY "${rocksdb_BINARY_DIR}/librocksdb.a")
   foreach(ver "MAJOR" "MINOR" "PATCH")
-    file(STRINGS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE
+    file(STRINGS "${rocksdb_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE
       REGEX "^#define[ \t]+ROCKSDB_${ver}[ \t]+[0-9]+$")
     string(REGEX REPLACE "^#define[ \t]+ROCKSDB_${ver}[ \t]+([0-9]+)$"
       "\\1" ROCKSDB_VERSION_${ver} "${ROCKSDB_VER_${ver}_LINE}")
     unset(ROCKDB_VER_${ver}_LINE)
   endforeach()
-  set(ROCKSDB_VERSION_STRING
+  set(rocksdb_VERSION_STRING
     "${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}")
-endmacro()
+  set_target_properties(RocksDB::RocksDB PROPERTIES
+    INTERFACE_INCLUDE_DIRECTORIES "${rocksdb_INCLUDE_DIR}"
+    INTERFACE_LINK_LIBRARIES "${rocksdb_INTERFACE_LINK_LIBRARIES}"
+    IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+    IMPORTED_LOCATION "${rocksdb_LIBRARY}"
+    VERSION "${rocksdb_VERSION_STRING}")
+endfunction()
diff --git a/cmake/modules/FindRocksDB.cmake b/cmake/modules/FindRocksDB.cmake
new file mode 100644 (file)
index 0000000..9818433
--- /dev/null
@@ -0,0 +1,47 @@
+# Find the native Rocksdb includes and library
+# This module defines
+#  ROCKSDB_INCLUDE_DIR, where to find rocksdb/db.h, Set when
+#                       ROCKSDB_INCLUDE_DIR is found.
+#  ROCKSDB_LIBRARIES, libraries to link against to use Rocksdb.
+#  ROCKSDB_FOUND, If false, do not try to use Rocksdb.
+#  ROCKSDB_VERSION_STRING
+#  ROCKSDB_VERSION_MAJOR
+#  ROCKSDB_VERSION_MINOR
+#  ROCKSDB_VERSION_PATCH
+
+find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h)
+
+find_library(ROCKSDB_LIBRARIES rocksdb)
+
+if(ROCKSDB_INCLUDE_DIR AND EXISTS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h")
+  foreach(ver "MAJOR" "MINOR" "PATCH")
+    file(STRINGS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE
+      REGEX "^#define[ \t]+ROCKSDB_${ver}[ \t]+[0-9]+$")
+    string(REGEX REPLACE "^#define[ \t]+ROCKSDB_${ver}[ \t]+([0-9]+)$"
+      "\\1" ROCKSDB_VERSION_${ver} "${ROCKSDB_VER_${ver}_LINE}")
+    unset(${ROCKSDB_VER_${ver}_LINE})
+  endforeach()
+  set(ROCKSDB_VERSION_STRING
+    "${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}")
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(RocksDB
+  REQUIRED_VARS ROCKSDB_LIBRARIES ROCKSDB_INCLUDE_DIR
+  VERSION_VAR ROCKSDB_VERSION_STRING)
+
+mark_as_advanced(
+  ROCKSDB_INCLUDE_DIR
+  ROCKSDB_LIBRARIES)
+
+if(RocksDB_FOUND)
+  if(NOT TARGET RocksDB::RocksDB)
+    add_library(RocksDB::RocksDB UNKNOWN IMPORTED)
+    set_target_properties(RocksDB::RocksDB PROPERTIES
+      INTERFACE_INCLUDE_DIRECTORIES "${ROCKSDB_INCLUDE_DIR}"
+      IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+      IMPORTED_LOCATION "${ROCKSDB_LIBRARY}"
+      VERSION "${ROCKSDB_VERSION_STRING}")
+  endif()
+endif()
+
diff --git a/cmake/modules/Findrocksdb.cmake b/cmake/modules/Findrocksdb.cmake
deleted file mode 100644 (file)
index 5926647..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Find the native Rocksdb includes and library
-# This module defines
-#  ROCKSDB_INCLUDE_DIR, where to find rocksdb/db.h, Set when
-#                       ROCKSDB_INCLUDE_DIR is found.
-#  ROCKSDB_LIBRARIES, libraries to link against to use Rocksdb.
-#  ROCKSDB_FOUND, If false, do not try to use Rocksdb.
-#  ROCKSDB_VERSION_STRING
-#  ROCKSDB_VERSION_MAJOR
-#  ROCKSDB_VERSION_MINOR
-#  ROCKSDB_VERSION_PATCH
-
-find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h)
-
-find_library(ROCKSDB_LIBRARIES rocksdb)
-
-if(ROCKSDB_INCLUDE_DIR AND EXISTS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h")
-  foreach(ver "MAJOR" "MINOR" "PATCH")
-    file(STRINGS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE
-      REGEX "^#define[ \t]+ROCKSDB_${ver}[ \t]+[0-9]+$")
-    string(REGEX REPLACE "^#define[ \t]+ROCKSDB_${ver}[ \t]+([0-9]+)$"
-      "\\1" ROCKSDB_VERSION_${ver} "${ROCKSDB_VER_${ver}_LINE}")
-    unset(${ROCKSDB_VER_${ver}_LINE})
-  endforeach()
-  set(ROCKSDB_VERSION_STRING
-    "${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}")
-endif()
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(rocksdb
-  REQUIRED_VARS ROCKSDB_LIBRARIES ROCKSDB_INCLUDE_DIR
-  VERSION_VAR ROCKSDB_VERSION_STRING)
-
-mark_as_advanced(
-  ROCKSDB_INCLUDE_DIR
-  ROCKSDB_LIBRARIES)
index 215b80d56d8014ea8c758a6534523f4d06907f70..81e27252818c1de046de6604af46c684241d25a9 100644 (file)
@@ -9,9 +9,8 @@ endif (WITH_LEVELDB)
 
 add_library(kv_objs OBJECT ${kv_srcs})
 add_library(kv STATIC $<TARGET_OBJECTS:kv_objs>)
-target_include_directories(kv_objs SYSTEM BEFORE PUBLIC ${ROCKSDB_INCLUDE_DIR})
-target_include_directories(kv SYSTEM BEFORE PUBLIC ${ROCKSDB_INCLUDE_DIR})
-target_link_libraries(kv ${LEVELDB_LIBRARIES} ${ROCKSDB_LIBRARIES} ${SNAPPY_LIBRARIES} ${ZLIB_LIBRARIES})
-if(WITH_LZ4)
-  target_link_libraries(kv ${LZ4_LIBRARY})
-endif()
+target_include_directories(kv_objs SYSTEM BEFORE PUBLIC
+  $<TARGET_PROPERTY:RocksDB::RocksDB,INTERFACE_INCLUDE_DIRECTORIES>)
+target_include_directories(kv SYSTEM BEFORE PUBLIC
+  $<TARGET_PROPERTY:RocksDB::RocksDB,INTERFACE_INCLUDE_DIRECTORIES>)
+target_link_libraries(kv ${LEVELDB_LIBRARIES} RocksDB::RocksDB)
index 17f78b71204ffc70fc968d6e6f41cb3d98ce7da6..0785bc11f0f4bba3f1168d0d380ffbcfbf91e3d9 100644 (file)
@@ -76,7 +76,8 @@ add_library(os STATIC ${libos_srcs} $<TARGET_OBJECTS:kv_objs>)
 if(WITH_BLUEFS)
   add_library(bluefs SHARED 
     bluestore/BlueRocksEnv.cc)
-  target_include_directories(bluefs SYSTEM PUBLIC ${ROCKSDB_INCLUDE_DIR})
+  target_include_directories(bluefs SYSTEM PUBLIC
+    $<TARGET_PROPERTY:RocksDB::RocksDB,INTERFACE_INCLUDE_DIRECTORIES>)
   target_link_libraries(bluefs global)
   install(TARGETS bluefs DESTINATION lib)
 endif(WITH_BLUEFS)