Packages
rocksdb
0.26.2
3.1.1
3.1.0
3.0.0
2.6.2
2.6.1
retired
2.6.0
retired
2.5.0
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.1
1.1.0
1.0.0
0.26.2
0.26.1
0.26.0
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
RocksDB for Erlang
Current section
Files
Jump to
Current section
Files
c_src/CMakeLists.txt
cmake_minimum_required(VERSION 3.4.0 FATAL_ERROR)
project(ErlangRocksDBNIF)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules")
set(priv_dir "${PROJECT_SOURCE_DIR}/../priv")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${priv_dir})
set(ErlangRocksDBNIF_TARGET erocksdb)
add_library(${ErlangRocksDBNIF_TARGET} MODULE "")
set(CMAKE_BUILD_TYPE Release)
# Use lz4 provided by host system
option(ERLANG_ROCKSDB_USE_SYSTEM_LZ4 "Use lz4 from host system" OFF)
# Use snappy provided by host system
option(ERLANG_ROCKSDB_USE_SYSTEM_SNAPPY "Use snappy from host system" OFF)
# Use RocksDB provided by host system
# (for users with extra requirements)
option(ERLANG_ROCKSDB_USE_SYSTEM_ROCKSDB "Use RocksDB from host system" OFF)
if (NOT WIN32)
# On platforms like FreeBSD where gmake is not the default, we need
# to look for gmake explicitly to make sure LevelDB can build.
# TODO(dforsyth): Remove this once LevelDB is upgraded to a version
# that uses CMake. See MESOS-8757.
find_program(
MAKE_PROGRAM
NAMES gmake make
DOCS "External 'make' executable.")
if (NOT MAKE_PROGRAM)
message(FATAL_ERROR "Could not find an external 'make' executable.")
endif ()
endif ()
#--------------------------------------------------------------------------------
include(FindErlang)
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${ERLANG_EI_LIBRARY_PATH})
find_library(ERLANG_EI_LIB ei)
find_library(ERLANG_ERL_INTERFACE_LIB erl_interface)
include_directories(${ERLANG_EI_INCLUDE_PATH})
include_directories(${ERLANG_ERTS_INCLUDE_PATH})
#--------------------------------------------------------------------------------
find_package(BZip2)
find_package(ZLIB)
find_package(TBB)
#--------------------------------------------------------------------------------
include(ExternalProject)
if(ERLANG_ROCKSDB_USE_SYSTEM_LZ4)
find_package(LZ4)
else()
set(LZ4_ROOT_DIR "${PROJECT_SOURCE_DIR}/../deps/lz4")
add_custom_command(OUTPUT ${LZ4_ROOT_DIR}/lib/liblz4.a
COMMAND ${MAKE_PROGRAM} "CFLAGS= -O2 -fPIC"
WORKING_DIRECTORY ${LZ4_ROOT_DIR}
COMMENT "Build lz4 library"
VERBATIM
)
add_custom_target(lz4 DEPENDS ${LZ4_ROOT_DIR}/lib/liblz4.a)
add_dependencies (${ErlangRocksDBNIF_TARGET} lz4)
set(LZ4_LIBRARY ${LZ4_ROOT_DIR}/lib/liblz4.a)
set(LZ4_INCLUDE_DIR ${LZ4_ROOT_DIR}/lib/)
mark_as_advanced(
LZ4_ROOT_DIR
LZ4_LIBRARY
LZ4_INCLUDE_DIR
)
endif()
#--------------------------------------------------------------------------------
if(ERLANG_ROCKSDB_USE_SYSTEM_SNAPPY)
find_package(snappy)
else()
add_dependencies (${ErlangRocksDBNIF_TARGET} snappy)
set(SNAPPY_ROOT_DIR "${PROJECT_SOURCE_DIR}/../deps/snappy")
ExternalProject_Add(snappy
SOURCE_DIR "${SNAPPY_ROOT_DIR}"
CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON
DOWNLOAD_COMMAND ""
INSTALL_COMMAND ""
)
ExternalProject_Get_Property(snappy BINARY_DIR)
set(SNAPPY_LIBRARY ${BINARY_DIR}/libsnappy.a)
set(SNAPPY_INCLUDE_DIR ${SNAPPY_ROOT_DIR})
mark_as_advanced(
SNAPPY_ROOT_DIR
SNAPPY_LIBRARY
SNAPPY_INCLUDE_DIR
)
endif()
#--------------------------------------------------------------------------------
if(ERLANG_ROCKSDB_USE_SYSTEM_ROCKSDB)
find_package(RocksDB 5.17.2 REQUIRED)
else()
set(ROCKSDB_ROOT_DIR "${PROJECT_SOURCE_DIR}/../deps/rocksdb")
set(ROCKSDB_EXTRA_CXXFLAGS "${CXXFLAGS} -DNDEBUG -DSNAPPY -DLZ4 -I${SNAPPY_INCLUDE_DIR} -I${LZ4_INCLUDE_DIR} -I${BINARY_DIR} -fPIC")
set(ROCKSDB_EXTRA_LDFLAGS "${SNAPPY_LIBRARY} ${LZ4_LIBRARY}")
add_custom_command(OUTPUT ${ROCKSDB_ROOT_DIR}/librocksdb.a
COMMAND ${MAKE_PROGRAM} static_lib EXTRA_CXXFLAGS=${ROCKSDB_EXTRA_CXXFLAGS} EXTRA_LDFLAGS=${ROCKSDB_EXTRA_LDFLAGS} USE_RTTI=1 DISABLE_JEMALLOC=1 ROCKSDB_DISABLE_ZSTD=1 DEBUG_LEVEL=0 PORTABLE=1
WORKING_DIRECTORY ${ROCKSDB_ROOT_DIR}
COMMENT "Build RocksDB static library"
VERBATIM
)
add_custom_target(rocksdb DEPENDS ${ROCKSDB_ROOT_DIR}/librocksdb.a)
add_dependencies(${ErlangRocksDBNIF_TARGET} rocksdb)
if(NOT ERLANG_ROCKSDB_USE_SYSTEM_SNAPPY)
add_dependencies (rocksdb snappy)
endif()
if(NOT ERLANG_ROCKSDB_USE_SYSTEM_LZ4)
add_dependencies (rocksdb lz4)
endif()
set(ROCKSDB_LIBRARIES "${ROCKSDB_ROOT_DIR}/librocksdb.a")
set(ROCKSDB_INCLUDE_DIR ${ROCKSDB_ROOT_DIR}/include/)
unset(ROCKSDB_EXTRA_CXXFLAGS)
unset(ROCKSDB_EXTRA_LDFLAGS)
mark_as_advanced(
ROCKSDB_ROOT_DIR
ROCKSDB_LIBRARIES
ROCKSDB_INCLUDE_DIR
)
endif()
#--------------------------------------------------------------------------------
set_property(TARGET ${ErlangRocksDBNIF_TARGET} PROPERTY CXX_STANDARD 14)
set_property(TARGET ${ErlangRocksDBNIF_TARGET} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${ErlangRocksDBNIF_TARGET} PROPERTY CXX_EXTENSIONS OFF)
target_sources(${ErlangRocksDBNIF_TARGET}
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/erocksdb.cc
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/backup.cc
${CMAKE_CURRENT_SOURCE_DIR}/batch.cc
${CMAKE_CURRENT_SOURCE_DIR}/bitset_merge_operator.cc
${CMAKE_CURRENT_SOURCE_DIR}/cache.cc
${CMAKE_CURRENT_SOURCE_DIR}/counter_merge_operator.cc
${CMAKE_CURRENT_SOURCE_DIR}/env.cc
${CMAKE_CURRENT_SOURCE_DIR}/erlang_merge.cc
${CMAKE_CURRENT_SOURCE_DIR}/erocksdb_column_family.cc
${CMAKE_CURRENT_SOURCE_DIR}/erocksdb_db.cc
${CMAKE_CURRENT_SOURCE_DIR}/erocksdb_iter.cc
${CMAKE_CURRENT_SOURCE_DIR}/erocksdb_snapshot.cc
${CMAKE_CURRENT_SOURCE_DIR}/rate_limiter.cc
${CMAKE_CURRENT_SOURCE_DIR}/refobjects.cc
${CMAKE_CURRENT_SOURCE_DIR}/sst_file_manager.cc
${CMAKE_CURRENT_SOURCE_DIR}/transactions.cc
${CMAKE_CURRENT_SOURCE_DIR}/util.cc
${CMAKE_CURRENT_SOURCE_DIR}/write_buffer_manager.cc
)
target_include_directories(${ErlangRocksDBNIF_TARGET}
PRIVATE
${DEFAULT_INCLUDE_DIRECTORIES}
${ROCKSDB_INCLUDE_DIR}
${LZ4_INCLUDE_DIR}
${SNAPPY_INCLUDE_DIR}
${PROJECT_BINARY_DIR}
)
target_compile_options(${ErlangRocksDBNIF_TARGET}
PUBLIC
-Wall
-Wextra
-pedantic-errors
)
set(TARGET_LINKER_OPTIONS)
if(APPLE)
set(TARGET_LINKER_OPTIONS "-flat_namespace -undefined suppress")
endif(APPLE)
target_link_libraries(${ErlangRocksDBNIF_TARGET}
PRIVATE
${TARGET_LINKER_OPTIONS}
${ERLANG_ERL_INTERFACE_LIB}
${ERLANG_EI_LIB}
${ROCKSDB_LIBRARIES}
${LZ4_LIBRARY}
${SNAPPY_LIBRARY}
${BZIP2_LIBRARIES}
${ZLIB_LIBRARY}
${TBB_LIBRARIES}
)