summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorcostan <costan@google.com>2018-04-17 13:23:10 -0700
committerVictor Costan <pwnall@chromium.org>2018-04-17 13:26:47 -0700
commitd177a0263cce4344d05188521ad53459c369b940 (patch)
tree0777844f4688d9f27040a9fe5defdb8b98c402c9 /CMakeLists.txt
parent14cce848e7b8a040a8f457d5a796722a55e19597 (diff)
downloadleveldb-d177a0263cce4344d05188521ad53459c369b940.tar.gz
Replace port_posix with port_stdcxx.
The porting layer implements threading primitives: atomic pointers, condition variables, mutexes, thread-safe initialization. These are all specified in C++11, so the reference open source port implementation can become platform-independent. The porting layer will remain in place to allow the use of other implementations with more features, such as the built-in deadlock detection in abseil's Mutex. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=193245934
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt64
1 files changed, 16 insertions, 48 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5588120..4bf3df3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -79,33 +79,10 @@ if(BUILD_SHARED_LIBS)
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 (NOT HAVE_CXX17_HAS_INCLUDE)
- target_compile_definitions(leveldb_port_posix
- PRIVATE
- LEVELDB_HAS_PORT_CONFIG_H=1
- )
-endif(NOT HAVE_CXX17_HAS_INCLUDE)
-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_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h"
"${PROJECT_SOURCE_DIR}/db/builder.cc"
"${PROJECT_SOURCE_DIR}/db/builder.h"
"${PROJECT_SOURCE_DIR}/db/c.cc"
@@ -136,6 +113,8 @@ target_sources(leveldb
"${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/atomic_pointer.h"
+ "${PROJECT_SOURCE_DIR}/port/port_stdcxx.h"
"${PROJECT_SOURCE_DIR}/port/port.h"
"${PROJECT_SOURCE_DIR}/port/thread_annotations.h"
"${PROJECT_SOURCE_DIR}/table/block_builder.cc"
@@ -163,7 +142,6 @@ target_sources(leveldb
"${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"
@@ -172,10 +150,8 @@ target_sources(leveldb
"${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>
@@ -195,12 +171,21 @@ target_sources(leveldb
"${LEVELDB_PUBLIC_INCLUDE_DIR}/table.h"
"${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h"
)
+
+# POSIX code is specified separately so we can leave it out in the future.
+target_sources(leveldb
+ PRIVATE
+ "${PROJECT_SOURCE_DIR}/util/env_posix.cc"
+ "${PROJECT_SOURCE_DIR}/util/posix_logger.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>
@@ -234,11 +219,6 @@ if(HAVE_CLANG_THREAD_SAFETY)
-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)
@@ -249,6 +229,10 @@ if(HAVE_TCMALLOC)
target_link_libraries(leveldb tcmalloc)
endif(HAVE_TCMALLOC)
+# Needed by port_stdcxx.h
+find_package(Threads REQUIRED)
+target_link_libraries(leveldb Threads::Threads)
+
add_executable(leveldbutil
"${PROJECT_SOURCE_DIR}/db/leveldbutil.cc"
)
@@ -271,14 +255,6 @@ if(LEVELDB_BUILD_TESTS)
"${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
@@ -351,14 +327,6 @@ if(LEVELDB_BUILD_BENCHMARKS)
"${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