buildroot/package/rocksdb/0002-Add-an-option-to-the-CMake-build-to-disable-building-shared-libraries.patch
Fabrice Fontaine a5e7a62b4c package/rocksdb: new package
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>
2020-02-03 21:55:57 +01:00

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()