]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cmake: support for external rocksdb
authorBassam Tabbara <bassam.tabbara@quantum.com>
Sat, 10 Dec 2016 04:45:22 +0000 (20:45 -0800)
committerBassam Tabbara <bassam.tabbara@quantum.com>
Mon, 16 Jan 2017 17:33:32 +0000 (09:33 -0800)
add support for building with an external rocksdb.

Signed-off-by: Bassam Tabbara <bassam.tabbara@quantum.com>
CMakeLists.txt
cmake/modules/Findrocksdb.cmake [new file with mode: 0644]
src/CMakeLists.txt
src/kv/CMakeLists.txt
src/libcephd/CMakeLists.txt

index b9b45b6961dc2b269d3ae5e4df582e15d9254eb3..031411c5830c3e834a533cf9ec646a95e552a468 100644 (file)
@@ -501,6 +501,12 @@ if(WITH_UBSAN)
   endif()
 endif()
 
+# Rocksdb
+option(WITH_SYSTEM_ROCKSDB "require and build with system rocksdb" OFF)
+if (WITH_SYSTEM_ROCKSDB)
+  find_package(rocksdb REQUIRED)
+endif()
+
 # Boost
 option(WITH_SYSTEM_BOOST "require and build with system Boost" OFF)
 
diff --git a/cmake/modules/Findrocksdb.cmake b/cmake/modules/Findrocksdb.cmake
new file mode 100644 (file)
index 0000000..8dbec26
--- /dev/null
@@ -0,0 +1,18 @@
+# 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.
+
+find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h)
+
+find_library(ROCKSDB_LIBRARIES rocksdb)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Rocksdb DEFAULT_MSG
+  ROCKSDB_LIBRARIES ROCKSDB_INCLUDE_DIR)
+
+mark_as_advanced(
+  ROCKSDB_INCLUDE_DIR
+  ROCKSDB_LIBRARIES)
index 02f617780c6c34092f64d562ae3e417439e65c92..0e8f9b614dc7969252c602b0951dfe922a97d94f 100644 (file)
@@ -714,48 +714,52 @@ install(TARGETS ceph-mon DESTINATION bin)
 # OSD/ObjectStore
 # make rocksdb statically
 
-set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
+if (NOT WITH_SYSTEM_ROCKSDB)
+  set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
 
-if(ALLOCATOR STREQUAL "jemalloc")
-  list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_JEMALLOC=ON)
-endif()
+  if(ALLOCATOR STREQUAL "jemalloc")
+    list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_JEMALLOC=ON)
+  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})
-else(WITH_CCACHE AND CCACHE_FOUND)
-  list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
-endif(WITH_CCACHE AND CCACHE_FOUND)
+  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})
+  else(WITH_CCACHE AND CCACHE_FOUND)
+    list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
+  endif(WITH_CCACHE AND CCACHE_FOUND)
 
-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 -DCMAKE_AR=${CMAKE_AR})
+  list(APPEND ROCKSDB_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
 
-if (CMAKE_CXX_COMPILER_ID STREQUAL Clang)
-  list(APPEND ROCKSDB_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF)
-endif()
+  if (CMAKE_CXX_COMPILER_ID STREQUAL Clang)
+    list(APPEND ROCKSDB_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF)
+  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)
-ExternalProject_Add(rocksdb_ext
-  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb
-  CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS}
-  BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rocksdb
-  BUILD_COMMAND $(MAKE) rocksdblib
-  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)
-
-set(ROCKSDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include)
-
-add_library(rocksdb STATIC IMPORTED)
-add_dependencies(rocksdb rocksdb_ext)
-set_property(TARGET rocksdb PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rocksdb/librocksdblib.a")
+  # 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)
+  ExternalProject_Add(rocksdb_ext
+    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb
+    CMAKE_ARGS ${ROCKSDB_CMAKE_ARGS}
+    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/rocksdb
+    BUILD_COMMAND $(MAKE) rocksdblib
+    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)
+
+  set(ROCKSDB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include)
+
+  add_library(rocksdb STATIC IMPORTED)
+  add_dependencies(rocksdb rocksdb_ext)
+  set_property(TARGET rocksdb PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/rocksdb/librocksdblib.a")
+  set(ROCKSDB_LIBRARIES rocksdb)
+
+endif(NOT WITH_SYSTEM_ROCKSDB)
 
 add_subdirectory(kv)
 add_subdirectory(os)
index 1d613ade154c321a2bba2b2f27ad330925062cef..80726d89fc08eb34e44b0645d4d475bd751fa32c 100644 (file)
@@ -11,7 +11,7 @@ add_library(kv_objs OBJECT ${kv_srcs})
 add_library(kv STATIC $<TARGET_OBJECTS:kv_objs>)
 target_include_directories(kv_objs BEFORE PUBLIC ${ROCKSDB_INCLUDE_DIR})
 target_include_directories(kv BEFORE PUBLIC ${ROCKSDB_INCLUDE_DIR})
-target_link_libraries(kv ${LEVELDB_LIBRARIES} rocksdb ${ALLOC_LIBS} ${SNAPPY_LIBRARIES} ${ZLIB_LIBRARIES})
+target_link_libraries(kv ${LEVELDB_LIBRARIES} ${ROCKSDB_LIBRARIES} ${ALLOC_LIBS} ${SNAPPY_LIBRARIES} ${ZLIB_LIBRARIES})
 
 # rocksdb detects bzlib and lz4 in its Makefile, which forces us to do the same.
 find_package(BZip2 QUIET)
index c2805ea753099f7874897d9752118d618c8bd9de..db387f28d10e4e783a2a4947aefb0f505fe74ec0 100644 (file)
@@ -27,8 +27,11 @@ set(merge_libs
   mon
   os
   osd
-  osdc
-  rocksdb)
+  osdc)
+
+if(NOT WITH_SYSTEM_ROCKSDB)
+  list(APPEND merge_libs ${ROCKSDB_LIBRARIES})
+endif(NOT WITH_SYSTEM_ROCKSDB)
 
 if(HAVE_ARMV8_CRC)
   list(APPEND merge_libs common_crc_aarch64)