leveldb.cmake raw
1 # Copyright (c) 2023-present The Limenka 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 FALLTHROUGH_INTENDED=[[fallthrough]]
60 $<$<NOT:$<BOOL:${WIN32}>>:LEVELDB_PLATFORM_POSIX>
61 $<$<BOOL:${WIN32}>:LEVELDB_PLATFORM_WINDOWS>
62 $<$<BOOL:${WIN32}>:_UNICODE;UNICODE>
63 )
64 if(MINGW)
65 target_compile_definitions(leveldb
66 PRIVATE
67 __USE_MINGW_ANSI_STDIO=1
68 )
69 endif()
70
71 target_include_directories(leveldb
72 PRIVATE
73 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb>
74 PUBLIC
75 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>
76 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/helpers/memenv>
77 )
78
79 add_library(nowarn_leveldb_interface INTERFACE)
80 if(MSVC)
81 target_compile_options(nowarn_leveldb_interface INTERFACE
82 /wd4722
83 )
84 target_compile_definitions(nowarn_leveldb_interface INTERFACE
85 _CRT_NONSTDC_NO_WARNINGS
86 )
87 else()
88 try_append_cxx_flags("-Wconditional-uninitialized" TARGET nowarn_leveldb_interface SKIP_LINK
89 IF_CHECK_PASSED "-Wno-conditional-uninitialized"
90 )
91 try_append_cxx_flags("-Wsuggest-override" TARGET nowarn_leveldb_interface SKIP_LINK
92 IF_CHECK_PASSED "-Wno-suggest-override"
93 )
94 endif()
95
96 target_link_libraries(leveldb PRIVATE
97 core_interface
98 nowarn_leveldb_interface
99 crc32c
100 )
101
102 set_target_properties(leveldb PROPERTIES
103 EXPORT_COMPILE_COMMANDS OFF
104 )
105