blob: f053739b2679fd744e4c1b599583423664c2d72a [file] [log] [blame]
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
project(leveldb CXX)
set(CMAKE_DEBUG_POSTFIX "d")
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost COMPONENTS
date_time
filesystem
system
REQUIRED)
set(SNAPPY_LIBRARY "")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_definitions(-DOS_LINUX)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
add_definitions(-DOS_FREEBSD)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
add_definitions(-DOS_MACOSX)
endif()
string(REGEX MATCH "clang" CLANG ${CMAKE_CXX_COMPILER})
if(CMAKE_COMPILER_IS_GNUCXX OR CLANG)
find_library(Pthread_LIBRARY pthread)
find_library(Realtime_LIBRARY rt)
# find library can be problematic with stdc++ which is why we hardwire the link
set(Stdcpp_LIBRARY stdc++)
else(CMAKE_COMPILER_IS_GNUCXX OR CLANG)
set(Pthread_LIBRARY "")
set(Realtime_LIBRARY "")
set(Stdcpp_LIBRARY "")
endif(CMAKE_COMPILER_IS_GNUCXX OR CLANG)
include_directories(${Boost_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
include)
if(MSVC)
add_compile_options(
/D_CRT_SECURE_NO_WARNINGS
/wd4389 # signed/unsigned mismatch
/wd4800 # constructor never returns, potential memory leak because of a singleton pattern
/wd4722 # unreachable code because of singleton pattern
/wd4702 # bool cast performance warning
)
else()
add_compile_options(
-Wno-sign-compare
-std=c++11
)
endif()
add_definitions(
-DLEVELDB_ATOMIC_PRESENT
)
set(LEVEL_DB_FILES
include/leveldb/c.h
include/leveldb/cache.h
include/leveldb/comparator.h
include/leveldb/db.h
include/leveldb/dumpfile.h
include/leveldb/env.h
include/leveldb/iterator.h
include/leveldb/filter_policy.h
include/leveldb/iterator.h
include/leveldb/options.h
include/leveldb/slice.h
include/leveldb/status.h
include/leveldb/table.h
include/leveldb/table_builder.h
include/leveldb/write_batch.h
db/builder.cc
db/builder.h
db/db_impl.cc
db/db_impl.h
db/db_iter.cc
db/db_iter.h
db/dbformat.cc
db/dbformat.h
db/dumpfile.cc
db/filename.cc
db/filename.h
db/log_format.h
db/log_reader.cc
db/log_reader.h
db/log_writer.cc
db/log_writer.h
db/skiplist.h
db/snapshot.h
db/memtable.cc
db/memtable.h
db/repair.cc
db/table_cache.cc
db/table_cache.h
db/version_edit.cc
db/version_edit.h
db/version_set.cc
db/version_set.h
db/write_batch.cc
table/block.cc
table/block.h
table/block_builder.cc
table/block_builder.h
table/filter_block.cc
table/filter_block.h
table/format.cc
table/format.h
table/iterator.cc
table/iterator_wrapper.h
table/merger.cc
table/merger.h
table/table.cc
table/table_builder.cc
table/two_level_iterator.cc
table/two_level_iterator.h
util/arena.cc
util/arena.h
util/bloom.cc
util/cache.cc
util/coding.cc
util/coding.h
util/comparator.cc
util/crc32c.cc
util/crc32c.h
util/env.cc
util/filter_policy.cc
util/hash.cc
util/hash.h
util/histogram.cc
util/histogram.h
util/logging.cc
util/logging.h
util/mutexlock.h
util/options.cc
util/random.h
util/status.cc
port/port.h)
if(WIN32)
list(APPEND LEVEL_DB_FILES
port/port_win.h
port/port_win.cc
util/win_logger.h
util/win_logger.cc
util/env_boost.cc)
else()
list(APPEND LEVEL_DB_FILES
port/port_posix.h
port/port_posix.cc
util/posix_logger.h
util/env_posix.cc)
endif()
add_library(leveldb ${LEVEL_DB_FILES})
target_include_directories(leveldb
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(leveldb
PRIVATE
${Boost_LIBRARIES}
${Pthread_LIBRARY}
)
add_executable(leveldbutil
db/leveldb_main.cc)
target_link_libraries(leveldbutil
leveldb)
set_target_properties(leveldbutil PROPERTIES
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
# we distribute the leveldbutil as it might be useful
install(TARGETS leveldbutil
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)