leveldb.cmake raw
1 # Copyright (c) 2023-present The Bitcoin Core developers
2 # Distributed under the MIT software license, see the accompanying
3 # file COPYING or https://opensource.org/license/mit/.
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/db_impl.cc
15 ${PROJECT_SOURCE_DIR}/src/leveldb/db/db_iter.cc
16 ${PROJECT_SOURCE_DIR}/src/leveldb/db/dbformat.cc
17 ${PROJECT_SOURCE_DIR}/src/leveldb/db/filename.cc
18 ${PROJECT_SOURCE_DIR}/src/leveldb/db/log_reader.cc
19 ${PROJECT_SOURCE_DIR}/src/leveldb/db/log_writer.cc
20 ${PROJECT_SOURCE_DIR}/src/leveldb/db/memtable.cc
21 ${PROJECT_SOURCE_DIR}/src/leveldb/db/repair.cc
22 ${PROJECT_SOURCE_DIR}/src/leveldb/db/table_cache.cc
23 ${PROJECT_SOURCE_DIR}/src/leveldb/db/version_edit.cc
24 ${PROJECT_SOURCE_DIR}/src/leveldb/db/version_set.cc
25 ${PROJECT_SOURCE_DIR}/src/leveldb/db/write_batch.cc
26 ${PROJECT_SOURCE_DIR}/src/leveldb/table/block.cc
27 ${PROJECT_SOURCE_DIR}/src/leveldb/table/block_builder.cc
28 ${PROJECT_SOURCE_DIR}/src/leveldb/table/filter_block.cc
29 ${PROJECT_SOURCE_DIR}/src/leveldb/table/format.cc
30 ${PROJECT_SOURCE_DIR}/src/leveldb/table/iterator.cc
31 ${PROJECT_SOURCE_DIR}/src/leveldb/table/merger.cc
32 ${PROJECT_SOURCE_DIR}/src/leveldb/table/table.cc
33 ${PROJECT_SOURCE_DIR}/src/leveldb/table/table_builder.cc
34 ${PROJECT_SOURCE_DIR}/src/leveldb/table/two_level_iterator.cc
35 ${PROJECT_SOURCE_DIR}/src/leveldb/util/arena.cc
36 ${PROJECT_SOURCE_DIR}/src/leveldb/util/bloom.cc
37 ${PROJECT_SOURCE_DIR}/src/leveldb/util/cache.cc
38 ${PROJECT_SOURCE_DIR}/src/leveldb/util/coding.cc
39 ${PROJECT_SOURCE_DIR}/src/leveldb/util/comparator.cc
40 ${PROJECT_SOURCE_DIR}/src/leveldb/util/crc32c.cc
41 ${PROJECT_SOURCE_DIR}/src/leveldb/util/env.cc
42 $<$<NOT:$<BOOL:${WIN32}>>:${PROJECT_SOURCE_DIR}/src/leveldb/util/env_posix.cc>
43 $<$<BOOL:${WIN32}>:${PROJECT_SOURCE_DIR}/src/leveldb/util/env_windows.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/logging.cc
47 ${PROJECT_SOURCE_DIR}/src/leveldb/util/options.cc
48 ${PROJECT_SOURCE_DIR}/src/leveldb/util/status.cc
49 ${PROJECT_SOURCE_DIR}/src/leveldb/helpers/memenv/memenv.cc
50 )
51
52 target_compile_definitions(leveldb
53 PRIVATE
54 HAVE_SNAPPY=0
55 HAVE_CRC32C=1
56 HAVE_FDATASYNC=$<BOOL:${HAVE_FDATASYNC}>
57 HAVE_FULLFSYNC=$<BOOL:${HAVE_FULLFSYNC}>
58 HAVE_O_CLOEXEC=$<BOOL:${HAVE_O_CLOEXEC}>
59 $<$<NOT:$<BOOL:${WIN32}>>:LEVELDB_PLATFORM_POSIX>
60 $<$<BOOL:${WIN32}>:LEVELDB_PLATFORM_WINDOWS>
61 $<$<BOOL:${WIN32}>:_UNICODE;UNICODE>
62 )
63 if(MINGW)
64 target_compile_definitions(leveldb
65 PRIVATE
66 __USE_MINGW_ANSI_STDIO=1
67 )
68 endif()
69
70 target_include_directories(leveldb
71 PRIVATE
72 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb>
73 PUBLIC
74 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>
75 )
76
77 add_library(nowarn_leveldb_interface INTERFACE)
78 if(MSVC)
79 target_compile_options(nowarn_leveldb_interface INTERFACE
80 /wd4722
81 )
82 target_compile_definitions(nowarn_leveldb_interface INTERFACE
83 _CRT_NONSTDC_NO_WARNINGS
84 )
85 else()
86 try_append_cxx_flags("-Wcovered-switch-default" TARGET nowarn_leveldb_interface SKIP_LINK
87 IF_CHECK_PASSED "-Wno-covered-switch-default"
88 )
89 endif()
90
91 target_link_libraries(leveldb PRIVATE
92 core_interface
93 nowarn_leveldb_interface
94 crc32c
95 )
96
97 set_target_properties(leveldb PROPERTIES
98 EXPORT_COMPILE_COMMANDS OFF
99 )
100