Packages
rocksdb
0.26.0
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)
#--------------------------------------------------------------------------------
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)
#--------------------------------------------------------------------------------
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 "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 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}
)