|
@ -0,0 +1,412 @@ |
|
|
|
|
|
# Copyright 2017 The LevelDB Authors. All rights reserved. |
|
|
|
|
|
# Use of this source code is governed by a BSD-style license that can be |
|
|
|
|
|
# found in the LICENSE file. See the AUTHORS file for names of contributors. |
|
|
|
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.9) |
|
|
|
|
|
project(Leveldb VERSION 0.1.0 LANGUAGES C CXX) |
|
|
|
|
|
|
|
|
|
|
|
# This project can take advantage of C++11. |
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11) |
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED OFF) |
|
|
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF) |
|
|
|
|
|
|
|
|
|
|
|
option(LEVELDB_BUILD_TESTS "Build LevelDB's unit tests" ON) |
|
|
|
|
|
option(LEVELDB_BUILD_BENCHMARKS "Build LevelDB's benchmarks" ON) |
|
|
|
|
|
option(LEVELDB_INSTALL "Install LevelDB's header and library" ON) |
|
|
|
|
|
|
|
|
|
|
|
include(TestBigEndian) |
|
|
|
|
|
test_big_endian(LEVELDB_IS_BIG_ENDIAN) |
|
|
|
|
|
|
|
|
|
|
|
include(CheckIncludeFile) |
|
|
|
|
|
check_include_file("unistd.h" HAVE_UNISTD_H) |
|
|
|
|
|
|
|
|
|
|
|
include(CheckIncludeFileCXX) |
|
|
|
|
|
check_include_file_cxx("atomic" LEVELDB_ATOMIC_PRESENT) |
|
|
|
|
|
|
|
|
|
|
|
include(CheckLibraryExists) |
|
|
|
|
|
check_library_exists(crc32c crc32c_value "" HAVE_CRC32C) |
|
|
|
|
|
check_library_exists(snappy snappy_compress "" HAVE_SNAPPY) |
|
|
|
|
|
check_library_exists(tcmalloc malloc "" HAVE_TCMALLOC) |
|
|
|
|
|
|
|
|
|
|
|
include(CheckSymbolExists) |
|
|
|
|
|
check_symbol_exists(fdatasync "unistd.h" HAVE_FDATASYNC) |
|
|
|
|
|
|
|
|
|
|
|
include(CheckCXXSourceCompiles) |
|
|
|
|
|
|
|
|
|
|
|
# Test whether -Wthread-safety is available. See |
|
|
|
|
|
# https://clang.llvm.org/docs/ThreadSafetyAnalysis.html |
|
|
|
|
|
# -Werror is necessary because unknown attributes only generate warnings. |
|
|
|
|
|
set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) |
|
|
|
|
|
list(APPEND CMAKE_REQUIRED_FLAGS -Werror -Wthread-safety) |
|
|
|
|
|
check_cxx_source_compiles(" |
|
|
|
|
|
struct __attribute__((lockable)) Lock { |
|
|
|
|
|
void Acquire() __attribute__((exclusive_lock_function())); |
|
|
|
|
|
void Release() __attribute__((unlock_function())); |
|
|
|
|
|
}; |
|
|
|
|
|
struct ThreadSafeType { |
|
|
|
|
|
Lock lock_; |
|
|
|
|
|
int data_ __attribute__((guarded_by(lock_))); |
|
|
|
|
|
}; |
|
|
|
|
|
int main() { return 0; } |
|
|
|
|
|
" HAVE_CLANG_THREAD_SAFETY) |
|
|
|
|
|
set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) |
|
|
|
|
|
|
|
|
|
|
|
set(LEVELDB_PUBLIC_INCLUDE_DIR "include/leveldb") |
|
|
|
|
|
set(LEVELDB_PORT_CONFIG_DIR "include/port") |
|
|
|
|
|
|
|
|
|
|
|
configure_file( |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/port/port_config.h.in" |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
include_directories( |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/include" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
|
|
# Only export LEVELDB_EXPORT symbols from the shared library. |
|
|
|
|
|
add_compile_options(-fvisibility=hidden) |
|
|
|
|
|
endif(BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
# POSIX code is specified separately so we can leave it out in the future. |
|
|
|
|
|
add_library(leveldb_port_posix OBJECT "") |
|
|
|
|
|
target_sources(leveldb_port_posix |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/port/port_posix.cc" |
|
|
|
|
|
|
|
|
|
|
|
PUBLIC |
|
|
|
|
|
# The headers below are dependencies for leveldb, but aren't needed by users |
|
|
|
|
|
# that link to the installed version of leveldb and rely on its public API. |
|
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h> |
|
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/port/atomic_pointer.h> |
|
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/port/port_posix.h> |
|
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/port/port.h> |
|
|
|
|
|
) |
|
|
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
|
|
set_property(TARGET leveldb_port_posix PROPERTY POSITION_INDEPENDENT_CODE ON) |
|
|
|
|
|
endif(BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
add_library(leveldb "") |
|
|
|
|
|
target_sources(leveldb |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/builder.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/builder.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/c.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/db_impl.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/db_impl.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/db_iter.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/db_iter.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/dbformat.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/dbformat.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/dumpfile.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/filename.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/filename.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/log_format.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/log_reader.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/log_reader.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/log_writer.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/log_writer.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/memtable.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/memtable.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/repair.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/skiplist.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/snapshot.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/table_cache.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/table_cache.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/version_edit.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/version_edit.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/version_set.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/version_set.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/write_batch_internal.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/write_batch.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/port/port.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/port/thread_annotations.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/block_builder.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/block_builder.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/block.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/block.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/filter_block.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/filter_block.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/format.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/format.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/iterator_wrapper.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/iterator.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/merger.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/merger.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/table_builder.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/table.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/two_level_iterator.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/table/two_level_iterator.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/arena.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/arena.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/bloom.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/cache.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/coding.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/coding.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/comparator.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/crc32c.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/crc32c.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/env_posix.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/env.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/filter_policy.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/hash.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/hash.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/logging.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/logging.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/mutexlock.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/options.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/posix_logger.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/random.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/status.cc" |
|
|
|
|
|
$<TARGET_OBJECTS:leveldb_port_posix> |
|
|
|
|
|
|
|
|
|
|
|
# Only CMake 3.3+ supports PUBLIC sources in targets exported by "install". |
|
|
|
|
|
$<$<VERSION_GREATER:CMAKE_VERSION,3.2>:PUBLIC> |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/c.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/cache.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/comparator.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/db.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/dumpfile.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/env.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/filter_policy.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/iterator.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/options.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/slice.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/status.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/table_builder.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/table.h" |
|
|
|
|
|
"${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h" |
|
|
|
|
|
) |
|
|
|
|
|
# MemEnv is not part of the interface and could be pulled to a separate library. |
|
|
|
|
|
target_sources(leveldb |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.h" |
|
|
|
|
|
) |
|
|
|
|
|
target_include_directories(leveldb |
|
|
|
|
|
PUBLIC |
|
|
|
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> |
|
|
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> |
|
|
|
|
|
) |
|
|
|
|
|
target_compile_definitions(leveldb |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
# Used by include/export.h when building shared libraries. |
|
|
|
|
|
LEVELDB_COMPILE_LIBRARY |
|
|
|
|
|
# Used by port/port.h. |
|
|
|
|
|
LEVELDB_PLATFORM_POSIX=1 |
|
|
|
|
|
) |
|
|
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
|
|
target_compile_definitions(leveldb |
|
|
|
|
|
PUBLIC |
|
|
|
|
|
# Used by include/export.h. |
|
|
|
|
|
LEVELDB_SHARED_LIBRARY |
|
|
|
|
|
) |
|
|
|
|
|
endif(BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
if(HAVE_CLANG_THREAD_SAFETY) |
|
|
|
|
|
target_compile_options(leveldb |
|
|
|
|
|
PUBLIC |
|
|
|
|
|
-Werror -Wthread-safety) |
|
|
|
|
|
endif(HAVE_CLANG_THREAD_SAFETY) |
|
|
|
|
|
|
|
|
|
|
|
# TODO(costan): This is only needed for port_posix. |
|
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON) |
|
|
|
|
|
find_package(Threads REQUIRED) |
|
|
|
|
|
target_link_libraries(leveldb Threads::Threads) |
|
|
|
|
|
|
|
|
|
|
|
if(HAVE_CRC32C) |
|
|
|
|
|
target_link_libraries(leveldb crc32c) |
|
|
|
|
|
endif(HAVE_CRC32C) |
|
|
|
|
|
if(HAVE_SNAPPY) |
|
|
|
|
|
target_link_libraries(leveldb snappy) |
|
|
|
|
|
endif(HAVE_SNAPPY) |
|
|
|
|
|
if(HAVE_TCMALLOC) |
|
|
|
|
|
target_link_libraries(leveldb tcmalloc) |
|
|
|
|
|
endif(HAVE_TCMALLOC) |
|
|
|
|
|
|
|
|
|
|
|
add_executable(leveldbutil |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/db/leveldbutil.cc" |
|
|
|
|
|
) |
|
|
|
|
|
target_link_libraries(leveldbutil leveldb) |
|
|
|
|
|
|
|
|
|
|
|
if(LEVELDB_BUILD_TESTS) |
|
|
|
|
|
enable_testing() |
|
|
|
|
|
|
|
|
|
|
|
function(leveldb_test test_file) |
|
|
|
|
|
get_filename_component(test_target_name "${test_file}" NAME_WE) |
|
|
|
|
|
|
|
|
|
|
|
add_executable("${test_target_name}" "") |
|
|
|
|
|
target_sources("${test_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testharness.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testharness.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testutil.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testutil.h" |
|
|
|
|
|
|
|
|
|
|
|
"${test_file}" |
|
|
|
|
|
) |
|
|
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
|
|
# Port functions aren't exposed in the shared library build. |
|
|
|
|
|
target_sources("${test_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
$<TARGET_OBJECTS:leveldb_port_posix> |
|
|
|
|
|
) |
|
|
|
|
|
endif(BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
target_link_libraries("${test_target_name}" leveldb) |
|
|
|
|
|
target_compile_definitions("${test_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
LEVELDB_PLATFORM_POSIX=1 |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
add_test(NAME "${test_target_name}" COMMAND "${test_target_name}") |
|
|
|
|
|
endfunction(leveldb_test) |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/c_test.c") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/fault_injection_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue178_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue200_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/env_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
if(NOT BUILD_SHARED_LIBS) |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/autocompact_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/corruption_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/db_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/dbformat_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/filename_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/log_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/recovery_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/skiplist_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/version_edit_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/version_set_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/db/write_batch_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/helpers/memenv/memenv_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/table/filter_block_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/table/table_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/arena_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/bloom_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/cache_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/coding_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/crc32c_test.cc") |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/hash_test.cc") |
|
|
|
|
|
|
|
|
|
|
|
# TODO(costan): This test also uses |
|
|
|
|
|
# "${PROJECT_SOURCE_DIR}/util/env_posix_test_helper.h" |
|
|
|
|
|
leveldb_test("${PROJECT_SOURCE_DIR}/util/env_posix_test.cc") |
|
|
|
|
|
endif(NOT BUILD_SHARED_LIBS) |
|
|
|
|
|
endif(LEVELDB_BUILD_TESTS) |
|
|
|
|
|
|
|
|
|
|
|
if(LEVELDB_BUILD_BENCHMARKS) |
|
|
|
|
|
function(leveldb_benchmark bench_file) |
|
|
|
|
|
get_filename_component(bench_target_name "${bench_file}" NAME_WE) |
|
|
|
|
|
|
|
|
|
|
|
add_executable("${bench_target_name}" "") |
|
|
|
|
|
target_sources("${bench_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/histogram.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/histogram.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testharness.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testharness.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testutil.cc" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/util/testutil.h" |
|
|
|
|
|
|
|
|
|
|
|
"${bench_file}" |
|
|
|
|
|
) |
|
|
|
|
|
if(BUILD_SHARED_LIBS) |
|
|
|
|
|
# Port functions aren't exposed in the shared library build. |
|
|
|
|
|
target_sources("${bench_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
$<TARGET_OBJECTS:leveldb_port_posix> |
|
|
|
|
|
) |
|
|
|
|
|
endif(BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
target_link_libraries("${bench_target_name}" leveldb) |
|
|
|
|
|
target_compile_definitions("${bench_target_name}" |
|
|
|
|
|
PRIVATE |
|
|
|
|
|
LEVELDB_PLATFORM_POSIX=1 |
|
|
|
|
|
) |
|
|
|
|
|
endfunction(leveldb_benchmark) |
|
|
|
|
|
|
|
|
|
|
|
if(NOT BUILD_SHARED_LIBS) |
|
|
|
|
|
leveldb_benchmark("${PROJECT_SOURCE_DIR}/db/db_bench.cc") |
|
|
|
|
|
endif(NOT BUILD_SHARED_LIBS) |
|
|
|
|
|
|
|
|
|
|
|
check_library_exists(sqlite3 sqlite3_open "" HAVE_SQLITE3) |
|
|
|
|
|
if(HAVE_SQLITE3) |
|
|
|
|
|
leveldb_benchmark("${PROJECT_SOURCE_DIR}/doc/bench/db_bench_sqlite3.cc") |
|
|
|
|
|
target_link_libraries(db_bench_sqlite3 sqlite3) |
|
|
|
|
|
endif(HAVE_SQLITE3) |
|
|
|
|
|
|
|
|
|
|
|
# check_library_exists is insufficient here because the library names have |
|
|
|
|
|
# different manglings when compiled with clang or gcc, at least when installed |
|
|
|
|
|
# with Homebrew on Mac. |
|
|
|
|
|
set(OLD_CMAKE_REQURED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) |
|
|
|
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES kyotocabinet) |
|
|
|
|
|
check_cxx_source_compiles(" |
|
|
|
|
|
#include <kcpolydb.h> |
|
|
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
|
kyotocabinet::TreeDB* db = new kyotocabinet::TreeDB(); |
|
|
|
|
|
delete db; |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
" HAVE_KYOTOCABINET) |
|
|
|
|
|
set(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQURED_LIBRARIES}) |
|
|
|
|
|
if(HAVE_KYOTOCABINET) |
|
|
|
|
|
leveldb_benchmark("${PROJECT_SOURCE_DIR}/doc/bench/db_bench_tree_db.cc") |
|
|
|
|
|
target_link_libraries(db_bench_tree_db kyotocabinet) |
|
|
|
|
|
endif(HAVE_KYOTOCABINET) |
|
|
|
|
|
endif(LEVELDB_BUILD_BENCHMARKS) |
|
|
|
|
|
|
|
|
|
|
|
if(LEVELDB_INSTALL) |
|
|
|
|
|
include(GNUInstallDirs) |
|
|
|
|
|
install(TARGETS leveldb |
|
|
|
|
|
EXPORT LeveldbTargets |
|
|
|
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
|
|
|
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
|
|
|
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
|
|
|
|
|
) |
|
|
|
|
|
install( |
|
|
|
|
|
FILES |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/c.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/cache.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/comparator.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/db.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/dumpfile.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/env.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/filter_policy.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/iterator.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/options.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/slice.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/status.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/table_builder.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/table.h" |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h" |
|
|
|
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/leveldb |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
include(CMakePackageConfigHelpers) |
|
|
|
|
|
write_basic_package_version_file( |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/LeveldbConfigVersion.cmake" |
|
|
|
|
|
COMPATIBILITY SameMajorVersion |
|
|
|
|
|
) |
|
|
|
|
|
install( |
|
|
|
|
|
EXPORT LeveldbTargets |
|
|
|
|
|
NAMESPACE Leveldb:: |
|
|
|
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Leveldb" |
|
|
|
|
|
) |
|
|
|
|
|
install( |
|
|
|
|
|
FILES |
|
|
|
|
|
"${PROJECT_SOURCE_DIR}/cmake/LeveldbConfig.cmake" |
|
|
|
|
|
"${PROJECT_BINARY_DIR}/LeveldbConfigVersion.cmake" |
|
|
|
|
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Leveldb" |
|
|
|
|
|
) |
|
|
|
|
|
endif(LEVELDB_INSTALL) |