|
@@ -0,0 +1,245 @@
|
|
|
+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()
|
|
|
+
|