Skip to content

Commit 5528414

Browse files
hebastotheuni
andcommitted
cmake: Build leveldb static library
Co-authored-by: Cory Fields <[email protected]>
1 parent 3c05130 commit 5528414

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
6161
include(cmake/introspection.cmake)
6262

6363
include(cmake/crc32c.cmake)
64+
include(cmake/leveldb.cmake)
6465

6566
add_subdirectory(src)
6667

cmake/leveldb.cmake

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Copyright (c) 2023 The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
# This file is part of the transition from Autotools to CMake. Once CMake
6+
# support has been merged we should switch to using the upstream CMake
7+
# buildsystem.
8+
9+
include(CheckCXXSymbolExists)
10+
check_cxx_symbol_exists(F_FULLFSYNC "fcntl.h" HAVE_FULLFSYNC)
11+
12+
add_library(leveldb STATIC EXCLUDE_FROM_ALL
13+
${PROJECT_SOURCE_DIR}/src/leveldb/db/builder.cc
14+
${PROJECT_SOURCE_DIR}/src/leveldb/db/c.cc
15+
${PROJECT_SOURCE_DIR}/src/leveldb/db/db_impl.cc
16+
${PROJECT_SOURCE_DIR}/src/leveldb/db/db_iter.cc
17+
${PROJECT_SOURCE_DIR}/src/leveldb/db/dbformat.cc
18+
${PROJECT_SOURCE_DIR}/src/leveldb/db/dumpfile.cc
19+
${PROJECT_SOURCE_DIR}/src/leveldb/db/filename.cc
20+
${PROJECT_SOURCE_DIR}/src/leveldb/db/log_reader.cc
21+
${PROJECT_SOURCE_DIR}/src/leveldb/db/log_writer.cc
22+
${PROJECT_SOURCE_DIR}/src/leveldb/db/memtable.cc
23+
${PROJECT_SOURCE_DIR}/src/leveldb/db/repair.cc
24+
${PROJECT_SOURCE_DIR}/src/leveldb/db/table_cache.cc
25+
${PROJECT_SOURCE_DIR}/src/leveldb/db/version_edit.cc
26+
${PROJECT_SOURCE_DIR}/src/leveldb/db/version_set.cc
27+
${PROJECT_SOURCE_DIR}/src/leveldb/db/write_batch.cc
28+
${PROJECT_SOURCE_DIR}/src/leveldb/table/block.cc
29+
${PROJECT_SOURCE_DIR}/src/leveldb/table/block_builder.cc
30+
${PROJECT_SOURCE_DIR}/src/leveldb/table/filter_block.cc
31+
${PROJECT_SOURCE_DIR}/src/leveldb/table/format.cc
32+
${PROJECT_SOURCE_DIR}/src/leveldb/table/iterator.cc
33+
${PROJECT_SOURCE_DIR}/src/leveldb/table/merger.cc
34+
${PROJECT_SOURCE_DIR}/src/leveldb/table/table.cc
35+
${PROJECT_SOURCE_DIR}/src/leveldb/table/table_builder.cc
36+
${PROJECT_SOURCE_DIR}/src/leveldb/table/two_level_iterator.cc
37+
${PROJECT_SOURCE_DIR}/src/leveldb/util/arena.cc
38+
${PROJECT_SOURCE_DIR}/src/leveldb/util/bloom.cc
39+
${PROJECT_SOURCE_DIR}/src/leveldb/util/cache.cc
40+
${PROJECT_SOURCE_DIR}/src/leveldb/util/coding.cc
41+
${PROJECT_SOURCE_DIR}/src/leveldb/util/comparator.cc
42+
${PROJECT_SOURCE_DIR}/src/leveldb/util/crc32c.cc
43+
${PROJECT_SOURCE_DIR}/src/leveldb/util/env.cc
44+
${PROJECT_SOURCE_DIR}/src/leveldb/util/filter_policy.cc
45+
${PROJECT_SOURCE_DIR}/src/leveldb/util/hash.cc
46+
${PROJECT_SOURCE_DIR}/src/leveldb/util/histogram.cc
47+
${PROJECT_SOURCE_DIR}/src/leveldb/util/logging.cc
48+
${PROJECT_SOURCE_DIR}/src/leveldb/util/options.cc
49+
${PROJECT_SOURCE_DIR}/src/leveldb/util/status.cc
50+
${PROJECT_SOURCE_DIR}/src/leveldb/helpers/memenv/memenv.cc
51+
)
52+
if(WIN32)
53+
target_sources(leveldb PRIVATE ${PROJECT_SOURCE_DIR}/src/leveldb/util/env_windows.cc)
54+
set_property(SOURCE ${PROJECT_SOURCE_DIR}/src/leveldb/util/env_windows.cc
55+
APPEND PROPERTY COMPILE_OPTIONS $<$<AND:$<CXX_COMPILER_ID:MSVC>,$<CONFIG:Release>>:/wd4722>
56+
)
57+
else()
58+
target_sources(leveldb PRIVATE ${PROJECT_SOURCE_DIR}/src/leveldb/util/env_posix.cc)
59+
endif()
60+
61+
target_compile_definitions(leveldb
62+
PRIVATE
63+
HAVE_SNAPPY=0
64+
HAVE_CRC32C=1
65+
HAVE_FDATASYNC=$<BOOL:${HAVE_FDATASYNC}>
66+
HAVE_FULLFSYNC=$<BOOL:${HAVE_FULLFSYNC}>
67+
HAVE_O_CLOEXEC=$<BOOL:${HAVE_O_CLOEXEC}>
68+
FALLTHROUGH_INTENDED=[[fallthrough]]
69+
LEVELDB_IS_BIG_ENDIAN=${WORDS_BIGENDIAN}
70+
)
71+
72+
if(WIN32)
73+
target_compile_definitions(leveldb
74+
PRIVATE
75+
LEVELDB_PLATFORM_WINDOWS
76+
_UNICODE
77+
UNICODE
78+
__USE_MINGW_ANSI_STDIO=1
79+
)
80+
else()
81+
target_compile_definitions(leveldb PRIVATE LEVELDB_PLATFORM_POSIX)
82+
endif()
83+
84+
target_include_directories(leveldb
85+
PRIVATE
86+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb>
87+
PUBLIC
88+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>
89+
)
90+
91+
#TODO: figure out how to filter out:
92+
# -Wconditional-uninitialized -Werror=conditional-uninitialized -Wsuggest-override -Werror=suggest-override
93+
94+
target_link_libraries(leveldb PRIVATE crc32c)

0 commit comments

Comments
 (0)