a5e7a62b4c
The RocksDB library provides a persistent key value store. Keys and values are arbitrary byte arrays. The keys are ordered within the key value store according to a user-specified comparator function. The library is maintained by the Facebook Database Engineering Team, and is based on LevelDB, by Sanjay Ghemawat and Jeff Dean at Google. http://rocksdb.org Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
246 lines
9.9 KiB
Diff
246 lines
9.9 KiB
Diff
From 2bb5fc1280244255f0a6e8acbcf40d2a87ca739d Mon Sep 17 00:00:00 2001
|
|
From: Adam Simpkins <simpkins@fb.com>
|
|
Date: Tue, 10 Dec 2019 15:19:24 -0800
|
|
Subject: [PATCH] Add an option to the CMake build to disable building shared
|
|
libraries (#6122)
|
|
|
|
Summary:
|
|
Add an option to explicitly disable building shared versions of the
|
|
RocksDB libraries. The shared libraries cannot be built in cases where
|
|
some dependencies are only available as static libraries. This allows
|
|
still building RocksDB in these situations.
|
|
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6122
|
|
|
|
Differential Revision: D18920740
|
|
|
|
fbshipit-source-id: d24f66d93c68a1e65635e6e0b663bae62c903bca
|
|
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
[Retrieved (and backported) from:
|
|
https://github.com/facebook/rocksdb/commit/2bb5fc1280244255f0a6e8acbcf40d2a87ca739d]
|
|
---
|
|
CMakeLists.txt | 123 ++++++++++++++++++++--------------
|
|
db_stress_tool/CMakeLists.txt | 2 +-
|
|
java/CMakeLists.txt | 4 +-
|
|
tools/CMakeLists.txt | 2 +-
|
|
4 files changed, 75 insertions(+), 56 deletions(-)
|
|
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index 633fe834e9..ce63304470 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -766,7 +766,8 @@ endif()
|
|
|
|
set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX})
|
|
set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX})
|
|
-set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB})
|
|
+
|
|
+option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" ON)
|
|
|
|
option(WITH_LIBRADOS "Build with librados" OFF)
|
|
if(WITH_LIBRADOS)
|
|
@@ -777,40 +778,44 @@ endif()
|
|
|
|
if(WIN32)
|
|
set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib)
|
|
- set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
else()
|
|
set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
|
|
- set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
-
|
|
- add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
|
|
- target_link_libraries(${ROCKSDB_SHARED_LIB}
|
|
- ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
- set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
|
|
- LINKER_LANGUAGE CXX
|
|
- VERSION ${rocksdb_VERSION}
|
|
- SOVERSION ${rocksdb_VERSION_MAJOR}
|
|
- CXX_STANDARD 11
|
|
- OUTPUT_NAME "rocksdb")
|
|
endif()
|
|
|
|
add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
|
|
target_link_libraries(${ROCKSDB_STATIC_LIB}
|
|
${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
|
|
-if(WIN32)
|
|
- add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES})
|
|
- target_link_libraries(${ROCKSDB_IMPORT_LIB}
|
|
+if(ROCKSDB_BUILD_SHARED)
|
|
+ add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
|
|
+ target_link_libraries(${ROCKSDB_SHARED_LIB}
|
|
${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
|
- set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
|
|
- COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
|
|
- if(MSVC)
|
|
- set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
|
|
- COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
|
|
- set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES
|
|
- COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb")
|
|
+
|
|
+ if(WIN32)
|
|
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
|
|
+ COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS")
|
|
+ if(MSVC)
|
|
+ set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES
|
|
+ COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb")
|
|
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
|
|
+ COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_SHARED_LIB}.pdb")
|
|
+ endif()
|
|
+ else()
|
|
+ set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES
|
|
+ LINKER_LANGUAGE CXX
|
|
+ VERSION ${rocksdb_VERSION}
|
|
+ SOVERSION ${rocksdb_VERSION_MAJOR}
|
|
+ CXX_STANDARD 11
|
|
+ OUTPUT_NAME "rocksdb")
|
|
endif()
|
|
endif()
|
|
|
|
+if(ROCKSDB_BUILD_SHARED AND NOT WIN32)
|
|
+ set(ROCKSDB_LIB ${ROCKSDB_SHARED_LIB})
|
|
+else()
|
|
+ set(ROCKSDB_LIB ${ROCKSDB_STATIC_LIB})
|
|
+endif()
|
|
+
|
|
option(WITH_JNI "build with JNI" OFF)
|
|
if(WITH_JNI OR JNI)
|
|
message(STATUS "JNI library is enabled")
|
|
@@ -857,15 +862,17 @@ if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
|
|
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
)
|
|
|
|
- install(
|
|
- TARGETS ${ROCKSDB_SHARED_LIB}
|
|
- EXPORT RocksDBTargets
|
|
- COMPONENT runtime
|
|
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
- INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
- )
|
|
+ if(ROCKSDB_BUILD_SHARED)
|
|
+ install(
|
|
+ TARGETS ${ROCKSDB_SHARED_LIB}
|
|
+ EXPORT RocksDBTargets
|
|
+ COMPONENT runtime
|
|
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
+ INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
+ )
|
|
+ endif()
|
|
|
|
install(
|
|
EXPORT RocksDBTargets
|
|
@@ -1052,7 +1059,7 @@ if(WITH_TESTS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
|
set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX})
|
|
add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE})
|
|
- target_link_libraries(${TESTUTILLIB} ${LIBS})
|
|
+ target_link_libraries(${TESTUTILLIB} ${ROCKSDB_LIB})
|
|
if(MSVC)
|
|
set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb")
|
|
endif()
|
|
@@ -1073,30 +1080,42 @@ if(WITH_TESTS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
|
|
OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX}
|
|
)
|
|
- target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS})
|
|
+ target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${ROCKSDB_LIB})
|
|
if(NOT "${exename}" MATCHES "db_sanity_test")
|
|
add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
|
|
add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX})
|
|
endif()
|
|
endforeach(sourcefile ${TEST_EXES})
|
|
|
|
- # C executables must link to a shared object
|
|
- set(C_TESTS db/c_test.c)
|
|
- set(C_TEST_EXES ${C_TESTS})
|
|
+ if(WIN32)
|
|
+ # C executables must link to a shared object
|
|
+ if(ROCKSDB_BUILD_SHARED)
|
|
+ set(ROCKSDB_LIB_FOR_C ${ROCKSDB_SHARED_LIB})
|
|
+ else()
|
|
+ set(ROCKSDB_LIB_FOR_C OFF)
|
|
+ endif()
|
|
+ else()
|
|
+ set(ROCKSDB_LIB_FOR_C ${ROCKSDB_LIB})
|
|
+ endif()
|
|
|
|
- foreach(sourcefile ${C_TEST_EXES})
|
|
- string(REPLACE ".c" "" exename ${sourcefile})
|
|
- string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
|
|
- add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
|
|
- set_target_properties(${exename}${ARTIFACT_SUFFIX}
|
|
- PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
|
|
- EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
|
|
- EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
|
|
- )
|
|
- target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX})
|
|
- add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
|
|
- add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
|
|
- endforeach(sourcefile ${C_TEST_EXES})
|
|
+ if(ROCKSDB_LIB_FOR_C)
|
|
+ set(C_TESTS db/c_test.c)
|
|
+ set(C_TEST_EXES ${C_TESTS})
|
|
+
|
|
+ foreach(sourcefile ${C_TEST_EXES})
|
|
+ string(REPLACE ".c" "" exename ${sourcefile})
|
|
+ string(REGEX REPLACE "^((.+)/)+" "" exename ${exename})
|
|
+ add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile})
|
|
+ set_target_properties(${exename}${ARTIFACT_SUFFIX}
|
|
+ PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1
|
|
+ EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1
|
|
+ EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1
|
|
+ )
|
|
+ target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_LIB_FOR_C} testutillib${ARTIFACT_SUFFIX})
|
|
+ add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX})
|
|
+ add_dependencies(check ${exename}${ARTIFACT_SUFFIX})
|
|
+ endforeach(sourcefile ${C_TEST_EXES})
|
|
+ endif()
|
|
endif()
|
|
|
|
option(WITH_BENCHMARK_TOOLS "build with benchmarks" ON)
|
|
@@ -1117,7 +1136,7 @@ if(WITH_BENCHMARK_TOOLS)
|
|
get_filename_component(exename ${sourcefile} NAME_WE)
|
|
add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}
|
|
$<TARGET_OBJECTS:testharness>)
|
|
- target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS})
|
|
+ target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${ROCKSDB_LIB})
|
|
endforeach(sourcefile ${BENCHMARKS})
|
|
|
|
option(WITH_TOOLS "build with tools" ON)
|
|
diff --git a/db_stress_tool/CMakeLists.txt b/db_stress_tool/CMakeLists.txt
|
|
index b1f706c161..ac46611ca4 100644
|
|
--- a/java/CMakeLists.txt
|
|
+++ b/java/CMakeLists.txt
|
|
@@ -484,13 +484,13 @@ endif()
|
|
set(ROCKSDBJNI_STATIC_LIB rocksdbjni${ARTIFACT_SUFFIX})
|
|
add_library(${ROCKSDBJNI_STATIC_LIB} ${JNI_NATIVE_SOURCES})
|
|
add_dependencies(${ROCKSDBJNI_STATIC_LIB} rocksdbjni_headers)
|
|
-target_link_libraries(${ROCKSDBJNI_STATIC_LIB} ${ROCKSDB_STATIC_LIB} ${LIBS})
|
|
+target_link_libraries(${ROCKSDBJNI_STATIC_LIB} ${ROCKSDB_STATIC_LIB} ${ROCKSDB_LIB})
|
|
|
|
if(NOT MINGW)
|
|
set(ROCKSDBJNI_SHARED_LIB rocksdbjni-shared${ARTIFACT_SUFFIX})
|
|
add_library(${ROCKSDBJNI_SHARED_LIB} SHARED ${JNI_NATIVE_SOURCES})
|
|
add_dependencies(${ROCKSDBJNI_SHARED_LIB} rocksdbjni_headers)
|
|
- target_link_libraries(${ROCKSDBJNI_SHARED_LIB} ${ROCKSDB_STATIC_LIB} ${LIBS})
|
|
+ target_link_libraries(${ROCKSDBJNI_SHARED_LIB} ${ROCKSDB_STATIC_LIB} ${ROCKSDB_LIB})
|
|
|
|
set_target_properties(
|
|
${ROCKSDBJNI_SHARED_LIB}
|
|
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
|
|
index 1037a716ce..50ee3b1b6e 100644
|
|
--- a/tools/CMakeLists.txt
|
|
+++ b/tools/CMakeLists.txt
|
|
@@ -10,7 +10,7 @@ foreach(src ${TOOLS})
|
|
get_filename_component(exename ${src} NAME_WE)
|
|
add_executable(${exename}${ARTIFACT_SUFFIX}
|
|
${src})
|
|
- target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${LIBS})
|
|
+ target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_LIB})
|
|
list(APPEND tool_deps ${exename})
|
|
endforeach()
|
|
|