]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | # Prerequisites for Windows: |
2 | # This cmake build is for Windows 64-bit only. | |
3 | # | |
4 | # Prerequisites: | |
1e59de90 | 5 | # You must have at least Visual Studio 2019. Start the Developer Command Prompt window that is a part of Visual Studio installation. |
7c673cae FG |
6 | # Run the build commands from within the Developer Command Prompt window to have paths to the compiler and runtime libraries set. |
7 | # You must have git.exe in your %PATH% environment variable. | |
8 | # | |
9 | # To build Rocksdb for Windows is as easy as 1-2-3-4-5: | |
10 | # | |
11 | # 1. Update paths to third-party libraries in thirdparty.inc file | |
12 | # 2. Create a new directory for build artifacts | |
13 | # mkdir build | |
14 | # cd build | |
15 | # 3. Run cmake to generate project files for Windows, add more options to enable required third-party libraries. | |
16 | # See thirdparty.inc for more information. | |
1e59de90 | 17 | # sample command: cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release -DWITH_GFLAGS=1 -DWITH_SNAPPY=1 -DWITH_JEMALLOC=1 -DWITH_JNI=1 .. |
7c673cae | 18 | # 4. Then build the project in debug mode (you may want to add /m[:<N>] flag to run msbuild in <N> parallel threads |
11fdf7f2 | 19 | # or simply /m to use all avail cores) |
7c673cae FG |
20 | # msbuild rocksdb.sln |
21 | # | |
22 | # rocksdb.sln build features exclusions of test only code in Release. If you build ALL_BUILD then everything | |
23 | # will be attempted but test only code does not build in Release mode. | |
24 | # | |
25 | # 5. And release mode (/m[:<N>] is also supported) | |
26 | # msbuild rocksdb.sln /p:Configuration=Release | |
27 | # | |
28 | # Linux: | |
29 | # | |
1e59de90 | 30 | # 1. Install a recent toolchain if you're on a older distro. C++17 required (GCC >= 7, Clang >= 5) |
7c673cae FG |
31 | # 2. mkdir build; cd build |
32 | # 3. cmake .. | |
33 | # 4. make -j | |
34 | ||
1e59de90 | 35 | cmake_minimum_required(VERSION 3.10) |
f67539c2 TL |
36 | |
37 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/") | |
38 | include(ReadVersion) | |
1e59de90 | 39 | include(GoogleTest) |
f67539c2 TL |
40 | get_rocksdb_version(rocksdb_VERSION) |
41 | project(rocksdb | |
42 | VERSION ${rocksdb_VERSION} | |
1e59de90 TL |
43 | DESCRIPTION "An embeddable persistent key-value store for fast storage" |
44 | HOMEPAGE_URL https://rocksdb.org/ | |
f67539c2 | 45 | LANGUAGES CXX C ASM) |
7c673cae FG |
46 | |
47 | if(POLICY CMP0042) | |
48 | cmake_policy(SET CMP0042 NEW) | |
49 | endif() | |
50 | ||
f67539c2 TL |
51 | if(NOT CMAKE_BUILD_TYPE) |
52 | if(EXISTS "${CMAKE_SOURCE_DIR}/.git") | |
53 | set(default_build_type "Debug") | |
54 | else() | |
55 | set(default_build_type "RelWithDebInfo") | |
56 | endif() | |
57 | set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING | |
58 | "Default BUILD_TYPE is ${default_build_type}" FORCE) | |
59 | endif() | |
60 | ||
61 | find_program(CCACHE_FOUND ccache) | |
62 | if(CCACHE_FOUND) | |
63 | set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) | |
64 | set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) | |
65 | endif(CCACHE_FOUND) | |
7c673cae | 66 | |
11fdf7f2 | 67 | option(WITH_JEMALLOC "build with JeMalloc" OFF) |
1e59de90 | 68 | option(WITH_LIBURING "build with liburing" ON) |
11fdf7f2 TL |
69 | option(WITH_SNAPPY "build with SNAPPY" OFF) |
70 | option(WITH_LZ4 "build with lz4" OFF) | |
71 | option(WITH_ZLIB "build with zlib" OFF) | |
72 | option(WITH_ZSTD "build with zstd" OFF) | |
494da23a TL |
73 | option(WITH_WINDOWS_UTF8_FILENAMES "use UTF8 as characterset for opening files, regardles of the system code page" OFF) |
74 | if (WITH_WINDOWS_UTF8_FILENAMES) | |
75 | add_definitions(-DROCKSDB_WINDOWS_UTF8_FILENAMES) | |
76 | endif() | |
1e59de90 TL |
77 | option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" ON) |
78 | ||
79 | if ($ENV{CIRCLECI}) | |
80 | message(STATUS "Build for CircieCI env, a few tests may be disabled") | |
81 | add_definitions(-DCIRCLECI) | |
f67539c2 TL |
82 | endif() |
83 | ||
20effc67 | 84 | if( NOT DEFINED CMAKE_CXX_STANDARD ) |
1e59de90 | 85 | set(CMAKE_CXX_STANDARD 17) |
20effc67 TL |
86 | endif() |
87 | ||
f67539c2 | 88 | include(CMakeDependentOption) |
f67539c2 | 89 | |
7c673cae | 90 | if(MSVC) |
1e59de90 | 91 | option(WITH_GFLAGS "build with GFlags" OFF) |
11fdf7f2 | 92 | option(WITH_XPRESS "build with windows built in compression" OFF) |
1e59de90 TL |
93 | option(ROCKSDB_SKIP_THIRDPARTY "skip thirdparty.inc" OFF) |
94 | ||
95 | if(NOT ROCKSDB_SKIP_THIRDPARTY) | |
96 | include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc) | |
97 | endif() | |
7c673cae | 98 | else() |
20effc67 | 99 | if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD") |
11fdf7f2 | 100 | # FreeBSD has jemalloc as default malloc |
7c673cae FG |
101 | # but it does not have all the jemalloc files in include/... |
102 | set(WITH_JEMALLOC ON) | |
103 | else() | |
104 | if(WITH_JEMALLOC) | |
105 | find_package(JeMalloc REQUIRED) | |
106 | add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE) | |
f67539c2 | 107 | list(APPEND THIRDPARTY_LIBS JeMalloc::JeMalloc) |
7c673cae FG |
108 | endif() |
109 | endif() | |
11fdf7f2 | 110 | |
1e59de90 TL |
111 | if(MINGW) |
112 | option(WITH_GFLAGS "build with GFlags" OFF) | |
113 | else() | |
114 | option(WITH_GFLAGS "build with GFlags" ON) | |
115 | endif() | |
20effc67 | 116 | set(GFLAGS_LIB) |
11fdf7f2 | 117 | if(WITH_GFLAGS) |
20effc67 TL |
118 | # Config with namespace available since gflags 2.2.2 |
119 | option(GFLAGS_USE_TARGET_NAMESPACE "Use gflags import target with namespace." ON) | |
120 | find_package(gflags CONFIG) | |
121 | if(gflags_FOUND) | |
122 | if(TARGET ${GFLAGS_TARGET}) | |
123 | # Config with GFLAGS_TARGET available since gflags 2.2.0 | |
124 | set(GFLAGS_LIB ${GFLAGS_TARGET}) | |
125 | else() | |
126 | # Config with GFLAGS_LIBRARIES available since gflags 2.1.0 | |
1e59de90 | 127 | set(GFLAGS_LIB ${gflags_LIBRARIES}) |
20effc67 TL |
128 | endif() |
129 | else() | |
130 | find_package(gflags REQUIRED) | |
1e59de90 | 131 | set(GFLAGS_LIB gflags::gflags) |
20effc67 TL |
132 | endif() |
133 | include_directories(${GFLAGS_INCLUDE_DIR}) | |
134 | list(APPEND THIRDPARTY_LIBS ${GFLAGS_LIB}) | |
f67539c2 | 135 | add_definitions(-DGFLAGS=1) |
11fdf7f2 TL |
136 | endif() |
137 | ||
7c673cae | 138 | if(WITH_SNAPPY) |
20effc67 TL |
139 | find_package(Snappy CONFIG) |
140 | if(NOT Snappy_FOUND) | |
141 | find_package(Snappy REQUIRED) | |
142 | endif() | |
7c673cae | 143 | add_definitions(-DSNAPPY) |
20effc67 | 144 | list(APPEND THIRDPARTY_LIBS Snappy::snappy) |
7c673cae | 145 | endif() |
7c673cae | 146 | |
11fdf7f2 | 147 | if(WITH_ZLIB) |
494da23a | 148 | find_package(ZLIB REQUIRED) |
11fdf7f2 | 149 | add_definitions(-DZLIB) |
f67539c2 | 150 | list(APPEND THIRDPARTY_LIBS ZLIB::ZLIB) |
11fdf7f2 TL |
151 | endif() |
152 | ||
153 | option(WITH_BZ2 "build with bzip2" OFF) | |
154 | if(WITH_BZ2) | |
f67539c2 | 155 | find_package(BZip2 REQUIRED) |
11fdf7f2 | 156 | add_definitions(-DBZIP2) |
f67539c2 TL |
157 | if(BZIP2_INCLUDE_DIRS) |
158 | include_directories(${BZIP2_INCLUDE_DIRS}) | |
159 | else() | |
160 | include_directories(${BZIP2_INCLUDE_DIR}) | |
161 | endif() | |
11fdf7f2 TL |
162 | list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES}) |
163 | endif() | |
164 | ||
165 | if(WITH_LZ4) | |
166 | find_package(lz4 REQUIRED) | |
167 | add_definitions(-DLZ4) | |
f67539c2 | 168 | list(APPEND THIRDPARTY_LIBS lz4::lz4) |
11fdf7f2 TL |
169 | endif() |
170 | ||
171 | if(WITH_ZSTD) | |
172 | find_package(zstd REQUIRED) | |
173 | add_definitions(-DZSTD) | |
174 | include_directories(${ZSTD_INCLUDE_DIR}) | |
f67539c2 | 175 | list(APPEND THIRDPARTY_LIBS zstd::zstd) |
11fdf7f2 | 176 | endif() |
7c673cae FG |
177 | endif() |
178 | ||
11fdf7f2 TL |
179 | option(WITH_MD_LIBRARY "build with MD" ON) |
180 | if(WIN32 AND MSVC) | |
181 | if(WITH_MD_LIBRARY) | |
182 | set(RUNTIME_LIBRARY "MD") | |
183 | else() | |
184 | set(RUNTIME_LIBRARY "MT") | |
7c673cae FG |
185 | endif() |
186 | endif() | |
187 | ||
7c673cae FG |
188 | if(MSVC) |
189 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue") | |
11fdf7f2 | 190 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324") |
7c673cae | 191 | else() |
1e59de90 TL |
192 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall -pthread") |
193 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wshadow -Wno-unused-parameter -Wno-unused-variable -Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers -Wno-strict-aliasing -Wno-invalid-offsetof") | |
194 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") | |
195 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-prototypes") | |
196 | endif() | |
7c673cae | 197 | if(MINGW) |
1e59de90 | 198 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format") |
f67539c2 | 199 | add_definitions(-D_POSIX_C_SOURCE=1) |
7c673cae | 200 | endif() |
7c673cae | 201 | if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") |
11fdf7f2 | 202 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") |
7c673cae FG |
203 | include(CheckCXXCompilerFlag) |
204 | CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER) | |
205 | if(HAVE_OMIT_LEAF_FRAME_POINTER) | |
206 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer") | |
207 | endif() | |
208 | endif() | |
209 | endif() | |
210 | ||
11fdf7f2 | 211 | include(CheckCCompilerFlag) |
20effc67 TL |
212 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") |
213 | CHECK_C_COMPILER_FLAG("-mcpu=power9" HAS_POWER9) | |
214 | if(HAS_POWER9) | |
215 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power9 -mtune=power9") | |
216 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power9 -mtune=power9") | |
217 | else() | |
218 | CHECK_C_COMPILER_FLAG("-mcpu=power8" HAS_POWER8) | |
219 | if(HAS_POWER8) | |
220 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8 -mtune=power8") | |
221 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8 -mtune=power8") | |
222 | endif(HAS_POWER8) | |
223 | endif(HAS_POWER9) | |
11fdf7f2 TL |
224 | CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) |
225 | if(HAS_ALTIVEC) | |
226 | message(STATUS " HAS_ALTIVEC yes") | |
227 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec") | |
228 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec") | |
11fdf7f2 | 229 | endif(HAS_ALTIVEC) |
20effc67 | 230 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") |
11fdf7f2 | 231 | |
1e59de90 | 232 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64|AARCH64") |
f67539c2 TL |
233 | CHECK_C_COMPILER_FLAG("-march=armv8-a+crc+crypto" HAS_ARMV8_CRC) |
234 | if(HAS_ARMV8_CRC) | |
235 | message(STATUS " HAS_ARMV8_CRC yes") | |
236 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function") | |
237 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function") | |
238 | endif(HAS_ARMV8_CRC) | |
1e59de90 TL |
239 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64|AARCH64") |
240 | ||
241 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x") | |
242 | CHECK_C_COMPILER_FLAG("-march=native" HAS_S390X_MARCH_NATIVE) | |
243 | if(HAS_S390X_MARCH_NATIVE) | |
244 | message(STATUS " HAS_S390X_MARCH_NATIVE yes") | |
245 | endif(HAS_S390X_MARCH_NATIVE) | |
246 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x") | |
f67539c2 | 247 | |
11fdf7f2 TL |
248 | option(PORTABLE "build a portable binary" OFF) |
249 | option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF) | |
20effc67 TL |
250 | option(FORCE_AVX "force building with AVX, even when PORTABLE=ON" OFF) |
251 | option(FORCE_AVX2 "force building with AVX2, even when PORTABLE=ON" OFF) | |
11fdf7f2 | 252 | if(PORTABLE) |
1e59de90 TL |
253 | add_definitions(-DROCKSDB_PORTABLE) |
254 | ||
11fdf7f2 TL |
255 | # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h |
256 | # is available, it is available by default. | |
257 | if(FORCE_SSE42 AND NOT MSVC) | |
258 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul") | |
259 | endif() | |
20effc67 TL |
260 | if(MSVC) |
261 | if(FORCE_AVX) | |
262 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX") | |
263 | endif() | |
264 | # MSVC automatically enables BMI / lzcnt with AVX2. | |
265 | if(FORCE_AVX2) | |
266 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2") | |
267 | endif() | |
268 | else() | |
269 | if(FORCE_AVX) | |
270 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx") | |
271 | endif() | |
272 | if(FORCE_AVX2) | |
273 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2 -mbmi -mlzcnt") | |
274 | endif() | |
1e59de90 TL |
275 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x") |
276 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z196") | |
277 | endif() | |
20effc67 | 278 | endif() |
11fdf7f2 TL |
279 | else() |
280 | if(MSVC) | |
281 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2") | |
282 | else() | |
1e59de90 TL |
283 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390x" AND NOT HAS_S390X_MARCH_NATIVE) |
284 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z196") | |
285 | elseif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64" AND NOT HAS_ARMV8_CRC) | |
11fdf7f2 TL |
286 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") |
287 | endif() | |
288 | endif() | |
289 | endif() | |
290 | ||
94b18763 | 291 | include(CheckCXXSourceCompiles) |
1e59de90 | 292 | set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) |
94b18763 | 293 | if(NOT MSVC) |
11fdf7f2 | 294 | set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul") |
94b18763 | 295 | endif() |
20effc67 | 296 | |
94b18763 FG |
297 | CHECK_CXX_SOURCE_COMPILES(" |
298 | #include <cstdint> | |
299 | #include <nmmintrin.h> | |
11fdf7f2 | 300 | #include <wmmintrin.h> |
94b18763 FG |
301 | int main() { |
302 | volatile uint32_t x = _mm_crc32_u32(0, 0); | |
11fdf7f2 TL |
303 | const auto a = _mm_set_epi64x(0, 0); |
304 | const auto b = _mm_set_epi64x(0, 0); | |
305 | const auto c = _mm_clmulepi64_si128(a, b, 0x00); | |
306 | auto d = _mm_cvtsi128_si64(c); | |
94b18763 FG |
307 | } |
308 | " HAVE_SSE42) | |
11fdf7f2 TL |
309 | if(HAVE_SSE42) |
310 | add_definitions(-DHAVE_SSE42) | |
311 | add_definitions(-DHAVE_PCLMUL) | |
312 | elseif(FORCE_SSE42) | |
313 | message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled") | |
314 | endif() | |
315 | ||
1e59de90 TL |
316 | # Check if -latomic is required or not |
317 | if (NOT MSVC) | |
318 | set(CMAKE_REQUIRED_FLAGS "--std=c++17") | |
319 | CHECK_CXX_SOURCE_COMPILES(" | |
320 | #include <atomic> | |
321 | std::atomic<uint64_t> x(0); | |
11fdf7f2 | 322 | int main() { |
1e59de90 TL |
323 | uint64_t i = x.load(std::memory_order_relaxed); |
324 | bool b = x.is_lock_free(); | |
325 | return 0; | |
11fdf7f2 | 326 | } |
1e59de90 TL |
327 | " BUILTIN_ATOMIC) |
328 | if (NOT BUILTIN_ATOMIC) | |
329 | #TODO: Check if -latomic exists | |
330 | list(APPEND THIRDPARTY_LIBS atomic) | |
331 | endif() | |
332 | endif() | |
333 | ||
334 | if (WITH_LIBURING) | |
335 | find_package(uring) | |
336 | if (uring_FOUND) | |
337 | add_definitions(-DROCKSDB_IOURING_PRESENT) | |
338 | list(APPEND THIRDPARTY_LIBS uring::uring) | |
339 | endif() | |
340 | endif() | |
341 | ||
342 | # Reset the required flags | |
343 | set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) | |
344 | ||
345 | option(WITH_IOSTATS_CONTEXT "Enable IO stats context" ON) | |
346 | if (NOT WITH_IOSTATS_CONTEXT) | |
347 | add_definitions(-DNIOSTATS_CONTEXT) | |
348 | endif() | |
349 | ||
350 | option(WITH_PERF_CONTEXT "Enable perf context" ON) | |
351 | if (NOT WITH_PERF_CONTEXT) | |
352 | add_definitions(-DNPERF_CONTEXT) | |
94b18763 FG |
353 | endif() |
354 | ||
7c673cae FG |
355 | option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON) |
356 | if(FAIL_ON_WARNINGS) | |
357 | if(MSVC) | |
358 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") | |
359 | else() # assume GCC | |
360 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") | |
361 | endif() | |
362 | endif() | |
363 | ||
364 | option(WITH_ASAN "build with ASAN" OFF) | |
365 | if(WITH_ASAN) | |
7c673cae FG |
366 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
367 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") | |
368 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") | |
369 | if(WITH_JEMALLOC) | |
370 | message(FATAL "ASAN does not work well with JeMalloc") | |
371 | endif() | |
372 | endif() | |
373 | ||
374 | option(WITH_TSAN "build with TSAN" OFF) | |
375 | if(WITH_TSAN) | |
1e59de90 | 376 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -Wl,-pie") |
7c673cae FG |
377 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC") |
378 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC") | |
379 | if(WITH_JEMALLOC) | |
380 | message(FATAL "TSAN does not work well with JeMalloc") | |
381 | endif() | |
382 | endif() | |
383 | ||
384 | option(WITH_UBSAN "build with UBSAN" OFF) | |
385 | if(WITH_UBSAN) | |
11fdf7f2 | 386 | add_definitions(-DROCKSDB_UBSAN_RUN) |
7c673cae FG |
387 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") |
388 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") | |
389 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") | |
390 | if(WITH_JEMALLOC) | |
391 | message(FATAL "UBSAN does not work well with JeMalloc") | |
392 | endif() | |
393 | endif() | |
394 | ||
11fdf7f2 TL |
395 | option(WITH_NUMA "build with NUMA policy support" OFF) |
396 | if(WITH_NUMA) | |
397 | find_package(NUMA REQUIRED) | |
398 | add_definitions(-DNUMA) | |
399 | include_directories(${NUMA_INCLUDE_DIR}) | |
f67539c2 | 400 | list(APPEND THIRDPARTY_LIBS NUMA::NUMA) |
11fdf7f2 | 401 | endif() |
7c673cae | 402 | |
11fdf7f2 TL |
403 | option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF) |
404 | if(WITH_TBB) | |
405 | find_package(TBB REQUIRED) | |
406 | add_definitions(-DTBB) | |
f67539c2 | 407 | list(APPEND THIRDPARTY_LIBS TBB::TBB) |
11fdf7f2 TL |
408 | endif() |
409 | ||
410 | # Stall notifications eat some performance from inserts | |
411 | option(DISABLE_STALL_NOTIF "Build with stall notifications" OFF) | |
412 | if(DISABLE_STALL_NOTIF) | |
413 | add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION) | |
414 | endif() | |
415 | ||
f67539c2 TL |
416 | option(WITH_DYNAMIC_EXTENSION "build with dynamic extension support" OFF) |
417 | if(NOT WITH_DYNAMIC_EXTENSION) | |
418 | add_definitions(-DROCKSDB_NO_DYNAMIC_EXTENSION) | |
419 | endif() | |
11fdf7f2 | 420 | |
20effc67 TL |
421 | option(ASSERT_STATUS_CHECKED "build with assert status checked" OFF) |
422 | if (ASSERT_STATUS_CHECKED) | |
423 | message(STATUS "Build with assert status checked") | |
424 | add_definitions(-DROCKSDB_ASSERT_STATUS_CHECKED) | |
425 | endif() | |
426 | ||
1e59de90 TL |
427 | |
428 | # RTTI is by default AUTO which enables it in debug and disables it in release. | |
429 | set(USE_RTTI AUTO CACHE STRING "Enable RTTI in builds") | |
430 | set_property(CACHE USE_RTTI PROPERTY STRINGS AUTO ON OFF) | |
431 | if(USE_RTTI STREQUAL "AUTO") | |
432 | message(STATUS "Enabling RTTI in Debug builds only (default)") | |
433 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") | |
434 | if(MSVC) | |
435 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-") | |
11fdf7f2 | 436 | else() |
1e59de90 | 437 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti") |
11fdf7f2 | 438 | endif() |
1e59de90 TL |
439 | elseif(USE_RTTI) |
440 | message(STATUS "Enabling RTTI in all builds") | |
11fdf7f2 | 441 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") |
1e59de90 TL |
442 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI") |
443 | else() | |
11fdf7f2 | 444 | if(MSVC) |
1e59de90 TL |
445 | message(STATUS "Disabling RTTI in Release builds. Always on in Debug.") |
446 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") | |
447 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-") | |
11fdf7f2 | 448 | else() |
1e59de90 TL |
449 | message(STATUS "Disabling RTTI in all builds") |
450 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-rtti") | |
11fdf7f2 TL |
451 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti") |
452 | endif() | |
7c673cae FG |
453 | endif() |
454 | ||
11fdf7f2 TL |
455 | # Used to run CI build and tests so we can run faster |
456 | option(OPTDBG "Build optimized debug build with MSVC" OFF) | |
457 | option(WITH_RUNTIME_DEBUG "build with debug version of runtime library" ON) | |
7c673cae | 458 | if(MSVC) |
11fdf7f2 | 459 | if(OPTDBG) |
7c673cae | 460 | message(STATUS "Debug optimization is enabled") |
11fdf7f2 TL |
461 | set(CMAKE_CXX_FLAGS_DEBUG "/Oxt") |
462 | else() | |
20effc67 TL |
463 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1") |
464 | ||
465 | # Minimal Build is deprecated after MSVC 2015 | |
466 | if( MSVC_VERSION GREATER 1900 ) | |
467 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gm-") | |
468 | else() | |
469 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gm") | |
470 | endif() | |
471 | ||
11fdf7f2 TL |
472 | endif() |
473 | if(WITH_RUNTIME_DEBUG) | |
474 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}d") | |
7c673cae | 475 | else() |
11fdf7f2 | 476 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}") |
7c673cae FG |
477 | endif() |
478 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}") | |
479 | ||
480 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG") | |
481 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") | |
482 | endif() | |
483 | ||
484 | if(CMAKE_COMPILER_IS_GNUCXX) | |
485 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp") | |
486 | endif() | |
487 | ||
488 | option(ROCKSDB_LITE "Build RocksDBLite version" OFF) | |
489 | if(ROCKSDB_LITE) | |
490 | add_definitions(-DROCKSDB_LITE) | |
494da23a | 491 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -Os") |
7c673cae FG |
492 | endif() |
493 | ||
494 | if(CMAKE_SYSTEM_NAME MATCHES "Cygwin") | |
495 | add_definitions(-fno-builtin-memcmp -DCYGWIN) | |
496 | elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") | |
497 | add_definitions(-DOS_MACOSX) | |
7c673cae FG |
498 | elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") |
499 | add_definitions(-DOS_LINUX) | |
500 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") | |
501 | add_definitions(-DOS_SOLARIS) | |
20effc67 TL |
502 | elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD") |
503 | add_definitions(-DOS_GNU_KFREEBSD) | |
7c673cae FG |
504 | elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") |
505 | add_definitions(-DOS_FREEBSD) | |
506 | elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") | |
507 | add_definitions(-DOS_NETBSD) | |
508 | elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") | |
509 | add_definitions(-DOS_OPENBSD) | |
510 | elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly") | |
511 | add_definitions(-DOS_DRAGONFLYBSD) | |
512 | elseif(CMAKE_SYSTEM_NAME MATCHES "Android") | |
513 | add_definitions(-DOS_ANDROID) | |
514 | elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | |
515 | add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX) | |
516 | if(MINGW) | |
517 | add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA) | |
518 | endif() | |
519 | endif() | |
520 | ||
521 | if(NOT WIN32) | |
522 | add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX) | |
523 | endif() | |
524 | ||
525 | option(WITH_FALLOCATE "build with fallocate" ON) | |
7c673cae | 526 | if(WITH_FALLOCATE) |
11fdf7f2 | 527 | CHECK_CXX_SOURCE_COMPILES(" |
7c673cae FG |
528 | #include <fcntl.h> |
529 | #include <linux/falloc.h> | |
530 | int main() { | |
531 | int fd = open(\"/dev/null\", 0); | |
494da23a | 532 | fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, 1024); |
7c673cae FG |
533 | } |
534 | " HAVE_FALLOCATE) | |
535 | if(HAVE_FALLOCATE) | |
536 | add_definitions(-DROCKSDB_FALLOCATE_PRESENT) | |
537 | endif() | |
538 | endif() | |
539 | ||
11fdf7f2 TL |
540 | CHECK_CXX_SOURCE_COMPILES(" |
541 | #include <fcntl.h> | |
542 | int main() { | |
543 | int fd = open(\"/dev/null\", 0); | |
544 | sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE); | |
545 | } | |
546 | " HAVE_SYNC_FILE_RANGE_WRITE) | |
547 | if(HAVE_SYNC_FILE_RANGE_WRITE) | |
548 | add_definitions(-DROCKSDB_RANGESYNC_PRESENT) | |
549 | endif() | |
550 | ||
551 | CHECK_CXX_SOURCE_COMPILES(" | |
552 | #include <pthread.h> | |
553 | int main() { | |
554 | (void) PTHREAD_MUTEX_ADAPTIVE_NP; | |
555 | } | |
556 | " HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) | |
557 | if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) | |
558 | add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX) | |
559 | endif() | |
560 | ||
561 | include(CheckCXXSymbolExists) | |
20effc67 TL |
562 | if(CMAKE_SYSTEM_NAME MATCHES "^FreeBSD") |
563 | check_cxx_symbol_exists(malloc_usable_size malloc_np.h HAVE_MALLOC_USABLE_SIZE) | |
564 | else() | |
565 | check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE) | |
566 | endif() | |
7c673cae FG |
567 | if(HAVE_MALLOC_USABLE_SIZE) |
568 | add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE) | |
569 | endif() | |
570 | ||
11fdf7f2 TL |
571 | check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU) |
572 | if(HAVE_SCHED_GETCPU) | |
573 | add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT) | |
574 | endif() | |
575 | ||
b3b6e05e TL |
576 | check_cxx_symbol_exists(getauxval auvx.h HAVE_AUXV_GETAUXVAL) |
577 | if(HAVE_AUXV_GETAUXVAL) | |
578 | add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) | |
579 | endif() | |
580 | ||
1e59de90 TL |
581 | check_cxx_symbol_exists(F_FULLFSYNC "fcntl.h" HAVE_FULLFSYNC) |
582 | if(HAVE_FULLFSYNC) | |
583 | add_definitions(-DHAVE_FULLFSYNC) | |
584 | endif() | |
585 | ||
7c673cae FG |
586 | include_directories(${PROJECT_SOURCE_DIR}) |
587 | include_directories(${PROJECT_SOURCE_DIR}/include) | |
1e59de90 TL |
588 | |
589 | if(USE_COROUTINES) | |
590 | if(USE_FOLLY OR USE_FOLLY_LITE) | |
591 | message(FATAL_ERROR "Please specify exactly one of USE_COROUTINES," | |
592 | " USE_FOLLY, and USE_FOLLY_LITE") | |
593 | endif() | |
594 | set(CMAKE_CXX_STANDARD 20) | |
595 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines -Wno-maybe-uninitialized") | |
596 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated") | |
597 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-redundant-move") | |
598 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-memory-model") | |
599 | add_compile_definitions(USE_COROUTINES) | |
600 | set(USE_FOLLY 1) | |
601 | endif() | |
602 | ||
603 | if(USE_FOLLY) | |
604 | if(USE_FOLLY_LITE) | |
605 | message(FATAL_ERROR "Please specify one of USE_FOLLY or USE_FOLLY_LITE") | |
606 | endif() | |
607 | if(ROCKSDB_BUILD_SHARED) | |
608 | message(FATAL_ERROR "Cannot build RocksDB shared library with folly") | |
609 | endif() | |
610 | set(ROCKSDB_BUILD_SHARED OFF) | |
611 | set(GFLAGS_SHARED FALSE) | |
612 | find_package(folly) | |
613 | # If cmake could not find the folly-config.cmake file, fall back | |
614 | # to looking in third-party/folly for folly and its dependencies | |
615 | if(NOT FOLLY_LIBRARIES) | |
616 | exec_program(python3 ${PROJECT_SOURCE_DIR}/third-party/folly ARGS | |
617 | build/fbcode_builder/getdeps.py show-inst-dir OUTPUT_VARIABLE | |
618 | FOLLY_INST_PATH) | |
619 | exec_program(ls ARGS -d ${FOLLY_INST_PATH}/../boost* OUTPUT_VARIABLE | |
620 | BOOST_INST_PATH) | |
621 | exec_program(ls ARGS -d ${FOLLY_INST_PATH}/../fmt* OUTPUT_VARIABLE | |
622 | FMT_INST_PATH) | |
623 | exec_program(ls ARGS -d ${FOLLY_INST_PATH}/../gflags* OUTPUT_VARIABLE | |
624 | GFLAGS_INST_PATH) | |
625 | set(Boost_DIR ${BOOST_INST_PATH}/lib/cmake/Boost-1.78.0) | |
626 | if(EXISTS ${FMT_INST_PATH}/lib64) | |
627 | set(fmt_DIR ${FMT_INST_PATH}/lib64/cmake/fmt) | |
628 | else() | |
629 | set(fmt_DIR ${FMT_INST_PATH}/lib/cmake/fmt) | |
630 | endif() | |
631 | set(gflags_DIR ${GFLAGS_INST_PATH}/lib/cmake/gflags) | |
632 | ||
633 | exec_program(sed ARGS -i 's/gflags_shared//g' | |
634 | ${FOLLY_INST_PATH}/lib/cmake/folly/folly-targets.cmake) | |
635 | ||
636 | include(${FOLLY_INST_PATH}/lib/cmake/folly/folly-config.cmake) | |
637 | endif() | |
638 | ||
639 | add_compile_definitions(USE_FOLLY FOLLY_NO_CONFIG HAVE_CXX11_ATOMIC) | |
640 | list(APPEND THIRDPARTY_LIBS Folly::folly) | |
641 | set(FOLLY_LIBS Folly::folly) | |
642 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--copy-dt-needed-entries") | |
f67539c2 | 643 | endif() |
7c673cae FG |
644 | find_package(Threads REQUIRED) |
645 | ||
7c673cae FG |
646 | # Main library source code |
647 | ||
648 | set(SOURCES | |
20effc67 | 649 | cache/cache.cc |
1e59de90 TL |
650 | cache/cache_entry_roles.cc |
651 | cache/cache_key.cc | |
652 | cache/cache_reservation_manager.cc | |
653 | cache/charged_cache.cc | |
7c673cae | 654 | cache/clock_cache.cc |
1e59de90 | 655 | cache/compressed_secondary_cache.cc |
7c673cae | 656 | cache/lru_cache.cc |
1e59de90 | 657 | cache/secondary_cache.cc |
7c673cae | 658 | cache/sharded_cache.cc |
f67539c2 | 659 | db/arena_wrapped_db_iter.cc |
1e59de90 TL |
660 | db/blob/blob_contents.cc |
661 | db/blob/blob_fetcher.cc | |
20effc67 TL |
662 | db/blob/blob_file_addition.cc |
663 | db/blob/blob_file_builder.cc | |
664 | db/blob/blob_file_cache.cc | |
665 | db/blob/blob_file_garbage.cc | |
666 | db/blob/blob_file_meta.cc | |
667 | db/blob/blob_file_reader.cc | |
1e59de90 | 668 | db/blob/blob_garbage_meter.cc |
20effc67 TL |
669 | db/blob/blob_log_format.cc |
670 | db/blob/blob_log_sequential_reader.cc | |
671 | db/blob/blob_log_writer.cc | |
1e59de90 TL |
672 | db/blob/blob_source.cc |
673 | db/blob/prefetch_buffer_collection.cc | |
7c673cae FG |
674 | db/builder.cc |
675 | db/c.cc | |
676 | db/column_family.cc | |
f67539c2 TL |
677 | db/compaction/compaction.cc |
678 | db/compaction/compaction_iterator.cc | |
679 | db/compaction/compaction_picker.cc | |
680 | db/compaction/compaction_job.cc | |
681 | db/compaction/compaction_picker_fifo.cc | |
682 | db/compaction/compaction_picker_level.cc | |
683 | db/compaction/compaction_picker_universal.cc | |
1e59de90 TL |
684 | db/compaction/compaction_service_job.cc |
685 | db/compaction/compaction_state.cc | |
686 | db/compaction/compaction_outputs.cc | |
20effc67 | 687 | db/compaction/sst_partitioner.cc |
1e59de90 | 688 | db/compaction/subcompaction_state.cc |
7c673cae FG |
689 | db/convenience.cc |
690 | db/db_filesnapshot.cc | |
1e59de90 | 691 | db/db_impl/compacted_db_impl.cc |
f67539c2 TL |
692 | db/db_impl/db_impl.cc |
693 | db/db_impl/db_impl_write.cc | |
694 | db/db_impl/db_impl_compaction_flush.cc | |
695 | db/db_impl/db_impl_files.cc | |
696 | db/db_impl/db_impl_open.cc | |
697 | db/db_impl/db_impl_debug.cc | |
698 | db/db_impl/db_impl_experimental.cc | |
699 | db/db_impl/db_impl_readonly.cc | |
700 | db/db_impl/db_impl_secondary.cc | |
7c673cae FG |
701 | db/db_info_dumper.cc |
702 | db/db_iter.cc | |
703 | db/dbformat.cc | |
11fdf7f2 | 704 | db/error_handler.cc |
7c673cae FG |
705 | db/event_helpers.cc |
706 | db/experimental.cc | |
707 | db/external_sst_file_ingestion_job.cc | |
708 | db/file_indexer.cc | |
709 | db/flush_job.cc | |
710 | db/flush_scheduler.cc | |
711 | db/forward_iterator.cc | |
f67539c2 | 712 | db/import_column_family_job.cc |
7c673cae | 713 | db/internal_stats.cc |
11fdf7f2 | 714 | db/logs_with_prep_tracker.cc |
7c673cae FG |
715 | db/log_reader.cc |
716 | db/log_writer.cc | |
11fdf7f2 | 717 | db/malloc_stats.cc |
7c673cae FG |
718 | db/memtable.cc |
719 | db/memtable_list.cc | |
720 | db/merge_helper.cc | |
721 | db/merge_operator.cc | |
20effc67 | 722 | db/output_validator.cc |
1e59de90 | 723 | db/periodic_task_scheduler.cc |
7c673cae | 724 | db/range_del_aggregator.cc |
494da23a | 725 | db/range_tombstone_fragmenter.cc |
7c673cae | 726 | db/repair.cc |
1e59de90 | 727 | db/seqno_to_time_mapping.cc |
7c673cae FG |
728 | db/snapshot_impl.cc |
729 | db/table_cache.cc | |
730 | db/table_properties_collector.cc | |
731 | db/transaction_log_impl.cc | |
f67539c2 | 732 | db/trim_history_scheduler.cc |
7c673cae FG |
733 | db/version_builder.cc |
734 | db/version_edit.cc | |
20effc67 | 735 | db/version_edit_handler.cc |
7c673cae | 736 | db/version_set.cc |
20effc67 | 737 | db/wal_edit.cc |
7c673cae | 738 | db/wal_manager.cc |
1e59de90 TL |
739 | db/wide/wide_column_serialization.cc |
740 | db/wide/wide_columns.cc | |
7c673cae FG |
741 | db/write_batch.cc |
742 | db/write_batch_base.cc | |
743 | db/write_controller.cc | |
744 | db/write_thread.cc | |
1e59de90 | 745 | env/composite_env.cc |
7c673cae FG |
746 | env/env.cc |
747 | env/env_chroot.cc | |
11fdf7f2 | 748 | env/env_encryption.cc |
f67539c2 | 749 | env/file_system.cc |
20effc67 | 750 | env/file_system_tracer.cc |
1e59de90 | 751 | env/fs_remap.cc |
11fdf7f2 | 752 | env/mock_env.cc |
1e59de90 | 753 | env/unique_id_gen.cc |
f67539c2 TL |
754 | file/delete_scheduler.cc |
755 | file/file_prefetch_buffer.cc | |
756 | file/file_util.cc | |
757 | file/filename.cc | |
1e59de90 | 758 | file/line_file_reader.cc |
f67539c2 TL |
759 | file/random_access_file_reader.cc |
760 | file/read_write_util.cc | |
761 | file/readahead_raf.cc | |
762 | file/sequence_file_reader.cc | |
763 | file/sst_file_manager_impl.cc | |
764 | file/writable_file_writer.cc | |
765 | logging/auto_roll_logger.cc | |
766 | logging/event_logger.cc | |
767 | logging/log_buffer.cc | |
768 | memory/arena.cc | |
769 | memory/concurrent_arena.cc | |
770 | memory/jemalloc_nodump_allocator.cc | |
20effc67 | 771 | memory/memkind_kmem_allocator.cc |
1e59de90 | 772 | memory/memory_allocator.cc |
11fdf7f2 | 773 | memtable/alloc_tracker.cc |
7c673cae FG |
774 | memtable/hash_linklist_rep.cc |
775 | memtable/hash_skiplist_rep.cc | |
7c673cae FG |
776 | memtable/skiplistrep.cc |
777 | memtable/vectorrep.cc | |
11fdf7f2 | 778 | memtable/write_buffer_manager.cc |
7c673cae FG |
779 | monitoring/histogram.cc |
780 | monitoring/histogram_windowing.cc | |
f67539c2 | 781 | monitoring/in_memory_stats_history.cc |
7c673cae FG |
782 | monitoring/instrumented_mutex.cc |
783 | monitoring/iostats_context.cc | |
784 | monitoring/perf_context.cc | |
785 | monitoring/perf_level.cc | |
f67539c2 | 786 | monitoring/persistent_stats_history.cc |
7c673cae FG |
787 | monitoring/statistics.cc |
788 | monitoring/thread_status_impl.cc | |
789 | monitoring/thread_status_updater.cc | |
790 | monitoring/thread_status_util.cc | |
791 | monitoring/thread_status_util_debug.cc | |
792 | options/cf_options.cc | |
20effc67 TL |
793 | options/configurable.cc |
794 | options/customizable.cc | |
7c673cae FG |
795 | options/db_options.cc |
796 | options/options.cc | |
797 | options/options_helper.cc | |
798 | options/options_parser.cc | |
7c673cae | 799 | port/stack_trace.cc |
f67539c2 | 800 | table/adaptive/adaptive_table_factory.cc |
20effc67 | 801 | table/block_based/binary_search_index_reader.cc |
f67539c2 | 802 | table/block_based/block.cc |
f67539c2 TL |
803 | table/block_based/block_based_table_builder.cc |
804 | table/block_based/block_based_table_factory.cc | |
20effc67 | 805 | table/block_based/block_based_table_iterator.cc |
f67539c2 TL |
806 | table/block_based/block_based_table_reader.cc |
807 | table/block_based/block_builder.cc | |
20effc67 | 808 | table/block_based/block_prefetcher.cc |
f67539c2 TL |
809 | table/block_based/block_prefix_index.cc |
810 | table/block_based/data_block_hash_index.cc | |
811 | table/block_based/data_block_footer.cc | |
812 | table/block_based/filter_block_reader_common.cc | |
813 | table/block_based/filter_policy.cc | |
814 | table/block_based/flush_block_policy.cc | |
815 | table/block_based/full_filter_block.cc | |
20effc67 | 816 | table/block_based/hash_index_reader.cc |
f67539c2 | 817 | table/block_based/index_builder.cc |
20effc67 | 818 | table/block_based/index_reader_common.cc |
f67539c2 TL |
819 | table/block_based/parsed_full_filter_block.cc |
820 | table/block_based/partitioned_filter_block.cc | |
20effc67 TL |
821 | table/block_based/partitioned_index_iterator.cc |
822 | table/block_based/partitioned_index_reader.cc | |
823 | table/block_based/reader_common.cc | |
f67539c2 | 824 | table/block_based/uncompression_dict_reader.cc |
11fdf7f2 | 825 | table/block_fetcher.cc |
f67539c2 TL |
826 | table/cuckoo/cuckoo_table_builder.cc |
827 | table/cuckoo/cuckoo_table_factory.cc | |
828 | table/cuckoo/cuckoo_table_reader.cc | |
7c673cae | 829 | table/format.cc |
7c673cae | 830 | table/get_context.cc |
7c673cae FG |
831 | table/iterator.cc |
832 | table/merging_iterator.cc | |
833 | table/meta_blocks.cc | |
7c673cae | 834 | table/persistent_cache_helper.cc |
f67539c2 TL |
835 | table/plain/plain_table_bloom.cc |
836 | table/plain/plain_table_builder.cc | |
837 | table/plain/plain_table_factory.cc | |
838 | table/plain/plain_table_index.cc | |
839 | table/plain/plain_table_key_coding.cc | |
840 | table/plain/plain_table_reader.cc | |
20effc67 | 841 | table/sst_file_dumper.cc |
494da23a | 842 | table/sst_file_reader.cc |
7c673cae | 843 | table/sst_file_writer.cc |
20effc67 | 844 | table/table_factory.cc |
7c673cae FG |
845 | table/table_properties.cc |
846 | table/two_level_iterator.cc | |
1e59de90 | 847 | table/unique_id.cc |
f67539c2 TL |
848 | test_util/sync_point.cc |
849 | test_util/sync_point_impl.cc | |
850 | test_util/testutil.cc | |
851 | test_util/transaction_test_util.cc | |
852 | tools/block_cache_analyzer/block_cache_trace_analyzer.cc | |
7c673cae | 853 | tools/dump/db_dump_tool.cc |
20effc67 | 854 | tools/io_tracer_parser_tool.cc |
7c673cae FG |
855 | tools/ldb_cmd.cc |
856 | tools/ldb_tool.cc | |
857 | tools/sst_dump_tool.cc | |
11fdf7f2 | 858 | tools/trace_analyzer_tool.cc |
f67539c2 | 859 | trace_replay/block_cache_tracer.cc |
20effc67 | 860 | trace_replay/io_tracer.cc |
1e59de90 TL |
861 | trace_replay/trace_record_handler.cc |
862 | trace_replay/trace_record_result.cc | |
863 | trace_replay/trace_record.cc | |
864 | trace_replay/trace_replay.cc | |
865 | util/async_file_reader.cc | |
866 | util/cleanable.cc | |
7c673cae FG |
867 | util/coding.cc |
868 | util/compaction_job_stats_impl.cc | |
869 | util/comparator.cc | |
1e59de90 | 870 | util/compression.cc |
11fdf7f2 | 871 | util/compression_context_cache.cc |
494da23a | 872 | util/concurrent_task_limiter_impl.cc |
7c673cae | 873 | util/crc32c.cc |
7c673cae | 874 | util/dynamic_bloom.cc |
7c673cae | 875 | util/hash.cc |
7c673cae FG |
876 | util/murmurhash.cc |
877 | util/random.cc | |
878 | util/rate_limiter.cc | |
1e59de90 | 879 | util/ribbon_config.cc |
7c673cae | 880 | util/slice.cc |
f67539c2 | 881 | util/file_checksum_helper.cc |
7c673cae | 882 | util/status.cc |
1e59de90 | 883 | util/stderr_logger.cc |
7c673cae | 884 | util/string_util.cc |
7c673cae FG |
885 | util/thread_local.cc |
886 | util/threadpool_imp.cc | |
7c673cae | 887 | util/xxhash.cc |
1e59de90 TL |
888 | utilities/agg_merge/agg_merge.cc |
889 | utilities/backup/backup_engine.cc | |
11fdf7f2 | 890 | utilities/blob_db/blob_compaction_filter.cc |
7c673cae | 891 | utilities/blob_db/blob_db.cc |
11fdf7f2 TL |
892 | utilities/blob_db/blob_db_impl.cc |
893 | utilities/blob_db/blob_db_impl_filesnapshot.cc | |
894 | utilities/blob_db/blob_dump_tool.cc | |
895 | utilities/blob_db/blob_file.cc | |
1e59de90 TL |
896 | utilities/cache_dump_load.cc |
897 | utilities/cache_dump_load_impl.cc | |
11fdf7f2 TL |
898 | utilities/cassandra/cassandra_compaction_filter.cc |
899 | utilities/cassandra/format.cc | |
900 | utilities/cassandra/merge_operator.cc | |
7c673cae | 901 | utilities/checkpoint/checkpoint_impl.cc |
1e59de90 | 902 | utilities/compaction_filters.cc |
7c673cae | 903 | utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc |
1e59de90 | 904 | utilities/counted_fs.cc |
11fdf7f2 | 905 | utilities/debug.cc |
7c673cae FG |
906 | utilities/env_mirror.cc |
907 | utilities/env_timed.cc | |
20effc67 TL |
908 | utilities/fault_injection_env.cc |
909 | utilities/fault_injection_fs.cc | |
1e59de90 | 910 | utilities/fault_injection_secondary_cache.cc |
7c673cae | 911 | utilities/leveldb_options/leveldb_options.cc |
7c673cae | 912 | utilities/memory/memory_util.cc |
1e59de90 | 913 | utilities/merge_operators.cc |
11fdf7f2 | 914 | utilities/merge_operators/bytesxor.cc |
7c673cae FG |
915 | utilities/merge_operators/max.cc |
916 | utilities/merge_operators/put.cc | |
f67539c2 | 917 | utilities/merge_operators/sortlist.cc |
7c673cae FG |
918 | utilities/merge_operators/string_append/stringappend.cc |
919 | utilities/merge_operators/string_append/stringappend2.cc | |
920 | utilities/merge_operators/uint64add.cc | |
f67539c2 | 921 | utilities/object_registry.cc |
7c673cae FG |
922 | utilities/option_change_migration/option_change_migration.cc |
923 | utilities/options/options_util.cc | |
924 | utilities/persistent_cache/block_cache_tier.cc | |
925 | utilities/persistent_cache/block_cache_tier_file.cc | |
926 | utilities/persistent_cache/block_cache_tier_metadata.cc | |
927 | utilities/persistent_cache/persistent_cache_tier.cc | |
928 | utilities/persistent_cache/volatile_tier_impl.cc | |
f67539c2 | 929 | utilities/simulator_cache/cache_simulator.cc |
7c673cae | 930 | utilities/simulator_cache/sim_cache.cc |
7c673cae | 931 | utilities/table_properties_collectors/compact_on_deletion_collector.cc |
11fdf7f2 | 932 | utilities/trace/file_trace_reader_writer.cc |
1e59de90 | 933 | utilities/trace/replayer_impl.cc |
20effc67 TL |
934 | utilities/transactions/lock/lock_manager.cc |
935 | utilities/transactions/lock/point/point_lock_tracker.cc | |
936 | utilities/transactions/lock/point/point_lock_manager.cc | |
1e59de90 TL |
937 | utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc |
938 | utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc | |
7c673cae | 939 | utilities/transactions/optimistic_transaction_db_impl.cc |
11fdf7f2 TL |
940 | utilities/transactions/optimistic_transaction.cc |
941 | utilities/transactions/pessimistic_transaction.cc | |
942 | utilities/transactions/pessimistic_transaction_db.cc | |
943 | utilities/transactions/snapshot_checker.cc | |
7c673cae | 944 | utilities/transactions/transaction_base.cc |
7c673cae | 945 | utilities/transactions/transaction_db_mutex_impl.cc |
7c673cae | 946 | utilities/transactions/transaction_util.cc |
11fdf7f2 TL |
947 | utilities/transactions/write_prepared_txn.cc |
948 | utilities/transactions/write_prepared_txn_db.cc | |
949 | utilities/transactions/write_unprepared_txn.cc | |
950 | utilities/transactions/write_unprepared_txn_db.cc | |
7c673cae | 951 | utilities/ttl/db_ttl_impl.cc |
1e59de90 | 952 | utilities/wal_filter.cc |
7c673cae | 953 | utilities/write_batch_with_index/write_batch_with_index.cc |
1e59de90 TL |
954 | utilities/write_batch_with_index/write_batch_with_index_internal.cc) |
955 | ||
956 | list(APPEND SOURCES | |
957 | utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc | |
958 | utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc | |
959 | utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc | |
960 | utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc | |
961 | utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc | |
962 | utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc | |
963 | utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc | |
964 | utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc | |
965 | utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc | |
966 | utilities/transactions/lock/range/range_tree/lib/standalone_port.cc | |
967 | utilities/transactions/lock/range/range_tree/lib/util/dbt.cc | |
968 | utilities/transactions/lock/range/range_tree/lib/util/memarena.cc) | |
969 | ||
970 | message(STATUS "ROCKSDB_PLUGINS: ${ROCKSDB_PLUGINS}") | |
971 | if ( ROCKSDB_PLUGINS ) | |
972 | string(REPLACE " " ";" PLUGINS ${ROCKSDB_PLUGINS}) | |
973 | foreach (plugin ${PLUGINS}) | |
974 | add_subdirectory("plugin/${plugin}") | |
975 | foreach (src ${${plugin}_SOURCES}) | |
976 | list(APPEND SOURCES plugin/${plugin}/${src}) | |
977 | set_source_files_properties( | |
978 | plugin/${plugin}/${src} | |
979 | PROPERTIES COMPILE_FLAGS "${${plugin}_COMPILE_FLAGS}") | |
980 | endforeach() | |
981 | foreach (path ${${plugin}_INCLUDE_PATHS}) | |
982 | include_directories(${path}) | |
983 | endforeach() | |
984 | foreach (lib ${${plugin}_LIBS}) | |
985 | list(APPEND THIRDPARTY_LIBS ${lib}) | |
986 | endforeach() | |
987 | foreach (link_path ${${plugin}_LINK_PATHS}) | |
988 | link_directories(AFTER ${link_path}) | |
989 | endforeach() | |
990 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${${plugin}_CMAKE_SHARED_LINKER_FLAGS}") | |
991 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${${plugin}_CMAKE_EXE_LINKER_FLAGS}") | |
992 | endforeach() | |
993 | endif() | |
7c673cae | 994 | |
494da23a TL |
995 | if(HAVE_SSE42 AND NOT MSVC) |
996 | set_source_files_properties( | |
997 | util/crc32c.cc | |
998 | PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul") | |
11fdf7f2 TL |
999 | endif() |
1000 | ||
20effc67 | 1001 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") |
11fdf7f2 TL |
1002 | list(APPEND SOURCES |
1003 | util/crc32c_ppc.c | |
1004 | util/crc32c_ppc_asm.S) | |
20effc67 | 1005 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64") |
11fdf7f2 | 1006 | |
f67539c2 TL |
1007 | if(HAS_ARMV8_CRC) |
1008 | list(APPEND SOURCES | |
1009 | util/crc32c_arm64.cc) | |
1010 | endif(HAS_ARMV8_CRC) | |
1011 | ||
7c673cae FG |
1012 | if(WIN32) |
1013 | list(APPEND SOURCES | |
1014 | port/win/io_win.cc | |
1015 | port/win/env_win.cc | |
1016 | port/win/env_default.cc | |
1017 | port/win/port_win.cc | |
1e59de90 TL |
1018 | port/win/win_logger.cc |
1019 | port/win/win_thread.cc) | |
11fdf7f2 TL |
1020 | if(WITH_XPRESS) |
1021 | list(APPEND SOURCES | |
7c673cae | 1022 | port/win/xpress_win.cc) |
11fdf7f2 TL |
1023 | endif() |
1024 | ||
1025 | if(WITH_JEMALLOC) | |
1026 | list(APPEND SOURCES | |
1027 | port/win/win_jemalloc.cc) | |
1028 | endif() | |
1029 | ||
7c673cae FG |
1030 | else() |
1031 | list(APPEND SOURCES | |
1032 | port/port_posix.cc | |
1033 | env/env_posix.cc | |
f67539c2 | 1034 | env/fs_posix.cc |
7c673cae FG |
1035 | env/io_posix.cc) |
1036 | endif() | |
1037 | ||
1e59de90 | 1038 | if(USE_FOLLY_LITE) |
f67539c2 | 1039 | list(APPEND SOURCES |
1e59de90 | 1040 | third-party/folly/folly/container/detail/F14Table.cpp |
f67539c2 | 1041 | third-party/folly/folly/detail/Futex.cpp |
1e59de90 TL |
1042 | third-party/folly/folly/lang/SafeAssert.cpp |
1043 | third-party/folly/folly/lang/ToAscii.cpp | |
1044 | third-party/folly/folly/ScopeGuard.cpp | |
f67539c2 TL |
1045 | third-party/folly/folly/synchronization/AtomicNotification.cpp |
1046 | third-party/folly/folly/synchronization/DistributedMutex.cpp | |
1e59de90 TL |
1047 | third-party/folly/folly/synchronization/ParkingLot.cpp) |
1048 | include_directories(${PROJECT_SOURCE_DIR}/third-party/folly) | |
1049 | add_definitions(-DUSE_FOLLY -DFOLLY_NO_CONFIG) | |
1050 | list(APPEND THIRDPARTY_LIBS glog) | |
f67539c2 TL |
1051 | endif() |
1052 | ||
11fdf7f2 TL |
1053 | set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX}) |
1054 | set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX}) | |
f67539c2 | 1055 | |
11fdf7f2 | 1056 | |
7c673cae | 1057 | if(WIN32) |
f67539c2 | 1058 | set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib) |
7c673cae | 1059 | else() |
11fdf7f2 | 1060 | set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT}) |
7c673cae FG |
1061 | endif() |
1062 | ||
1e59de90 TL |
1063 | set(ROCKSDB_PLUGIN_EXTERNS "") |
1064 | set(ROCKSDB_PLUGIN_BUILTINS "") | |
1065 | message(STATUS "ROCKSDB PLUGINS TO BUILD ${ROCKSDB_PLUGINS}") | |
1066 | foreach(PLUGIN IN LISTS PLUGINS) | |
1067 | set(PLUGIN_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/plugin/${PLUGIN}/") | |
1068 | message(STATUS "PLUGIN ${PLUGIN} including rocksb plugin ${PLUGIN_ROOT}") | |
1069 | set(PLUGINMKFILE "${PLUGIN_ROOT}${PLUGIN}.mk") | |
1070 | if (NOT EXISTS ${PLUGINMKFILE}) | |
1071 | message(FATAL_ERROR "PLUGIN ${PLUGIN} Missing plugin makefile: ${PLUGINMKFILE}") | |
1072 | endif() | |
1073 | file(READ ${PLUGINMKFILE} PLUGINMK) | |
1074 | ||
1075 | string(REGEX MATCH "SOURCES = ([^\n]*)" FOO ${PLUGINMK}) | |
1076 | set(MK_SOURCES ${CMAKE_MATCH_1}) | |
1077 | separate_arguments(MK_SOURCES) | |
1078 | foreach(MK_FILE IN LISTS MK_SOURCES) | |
1079 | list(APPEND SOURCES "${PLUGIN_ROOT}${MK_FILE}") | |
1080 | message(STATUS "PLUGIN ${PLUGIN} Appending ${PLUGIN_ROOT}${MK_FILE} to SOURCES") | |
1081 | endforeach() | |
1082 | ||
1083 | string(REGEX MATCH "_FUNC = ([^\n]*)" FOO ${PLUGINMK}) | |
1084 | if (NOT ${CMAKE_MATCH_1} STREQUAL "") | |
1085 | string(APPEND ROCKSDB_PLUGIN_BUILTINS "{\"${PLUGIN}\", " ${CMAKE_MATCH_1} "},") | |
1086 | string(APPEND ROCKSDB_PLUGIN_EXTERNS "int " ${CMAKE_MATCH_1} "(ROCKSDB_NAMESPACE::ObjectLibrary&, const std::string&); ") | |
1087 | endif() | |
1088 | ||
1089 | string(REGEX MATCH "_LIBS = ([^\n]*)" FOO ${PLUGINMK}) | |
1090 | separate_arguments(CMAKE_MATCH_1) | |
1091 | foreach(MK_LIB IN LISTS CMAKE_MATCH_1) | |
1092 | list(APPEND THIRDPARTY_LIBS "${MK_LIB}") | |
1093 | endforeach() | |
1094 | message(STATUS "PLUGIN ${PLUGIN} THIRDPARTY_LIBS=${THIRDPARTY_LIBS}") | |
1095 | ||
1096 | #TODO: We need to set any compile/link-time flags and add any link libraries | |
1097 | endforeach() | |
1098 | ||
1099 | string(TIMESTAMP TS "%Y-%m-%d %H:%M:%S" UTC) | |
1100 | set(BUILD_DATE "${TS}" CACHE STRING "the time we first built rocksdb") | |
1101 | ||
1102 | find_package(Git) | |
1103 | ||
1104 | if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") | |
1105 | execute_process(WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_SHA COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD ) | |
1106 | execute_process(WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE GIT_MOD COMMAND "${GIT_EXECUTABLE}" diff-index HEAD --quiet) | |
1107 | execute_process(WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_DATE COMMAND "${GIT_EXECUTABLE}" log -1 --date=format:"%Y-%m-%d %T" --format="%ad") | |
1108 | execute_process(WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_TAG RESULT_VARIABLE rv COMMAND "${GIT_EXECUTABLE}" symbolic-ref -q --short HEAD OUTPUT_STRIP_TRAILING_WHITESPACE) | |
1109 | if (rv AND NOT rv EQUAL 0) | |
1110 | execute_process(WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_TAG COMMAND "${GIT_EXECUTABLE}" describe --tags --exact-match OUTPUT_STRIP_TRAILING_WHITESPACE) | |
1111 | endif() | |
1112 | else() | |
1113 | set(GIT_SHA 0) | |
1114 | set(GIT_MOD 1) | |
1115 | endif() | |
1116 | string(REGEX REPLACE "[^0-9a-fA-F]+" "" GIT_SHA "${GIT_SHA}") | |
1117 | string(REGEX REPLACE "[^0-9: /-]+" "" GIT_DATE "${GIT_DATE}") | |
1118 | ||
1119 | set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc) | |
1120 | configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY) | |
1121 | ||
1122 | add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES} ${BUILD_VERSION_CC}) | |
20effc67 | 1123 | target_link_libraries(${ROCKSDB_STATIC_LIB} PRIVATE |
7c673cae FG |
1124 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) |
1125 | ||
f67539c2 | 1126 | if(ROCKSDB_BUILD_SHARED) |
1e59de90 | 1127 | add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES} ${BUILD_VERSION_CC}) |
20effc67 | 1128 | target_link_libraries(${ROCKSDB_SHARED_LIB} PRIVATE |
7c673cae | 1129 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) |
f67539c2 TL |
1130 | |
1131 | if(WIN32) | |
1132 | set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES | |
1133 | COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS") | |
1134 | if(MSVC) | |
1135 | set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES | |
1136 | COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb") | |
1137 | set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES | |
1138 | COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_SHARED_LIB}.pdb") | |
1139 | endif() | |
1140 | else() | |
1141 | set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES | |
1142 | LINKER_LANGUAGE CXX | |
1143 | VERSION ${rocksdb_VERSION} | |
1144 | SOVERSION ${rocksdb_VERSION_MAJOR} | |
1e59de90 | 1145 | OUTPUT_NAME "rocksdb${ARTIFACT_SUFFIX}") |
7c673cae FG |
1146 | endif() |
1147 | endif() | |
1148 | ||
f67539c2 TL |
1149 | if(ROCKSDB_BUILD_SHARED AND NOT WIN32) |
1150 | set(ROCKSDB_LIB ${ROCKSDB_SHARED_LIB}) | |
1151 | else() | |
1152 | set(ROCKSDB_LIB ${ROCKSDB_STATIC_LIB}) | |
1153 | endif() | |
1154 | ||
7c673cae | 1155 | option(WITH_JNI "build with JNI" OFF) |
20effc67 TL |
1156 | # Tests are excluded from Release builds |
1157 | CMAKE_DEPENDENT_OPTION(WITH_TESTS "build with tests" ON | |
1158 | "CMAKE_BUILD_TYPE STREQUAL Debug" OFF) | |
1159 | option(WITH_BENCHMARK_TOOLS "build with benchmarks" ON) | |
1160 | option(WITH_CORE_TOOLS "build with ldb and sst_dump" ON) | |
1161 | option(WITH_TOOLS "build with tools" ON) | |
1162 | ||
1163 | if(WITH_TESTS OR WITH_BENCHMARK_TOOLS OR WITH_TOOLS OR WITH_JNI OR JNI) | |
1164 | include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.8.1/fused-src) | |
1165 | endif() | |
7c673cae FG |
1166 | if(WITH_JNI OR JNI) |
1167 | message(STATUS "JNI library is enabled") | |
1168 | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java) | |
1169 | else() | |
1170 | message(STATUS "JNI library is disabled") | |
1171 | endif() | |
1172 | ||
11fdf7f2 TL |
1173 | # Installation and packaging |
1174 | if(WIN32) | |
1175 | option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF) | |
1176 | endif() | |
1177 | if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS) | |
1178 | if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) | |
1179 | if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") | |
1180 | # Change default installation prefix on Linux to /usr | |
1181 | set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE) | |
1182 | endif() | |
1183 | endif() | |
1184 | ||
1185 | include(GNUInstallDirs) | |
1186 | include(CMakePackageConfigHelpers) | |
1187 | ||
1188 | set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb) | |
1189 | ||
1190 | configure_package_config_file( | |
1191 | ${CMAKE_CURRENT_LIST_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake | |
1192 | INSTALL_DESTINATION ${package_config_destination} | |
1193 | ) | |
1194 | ||
1195 | write_basic_package_version_file( | |
1196 | RocksDBConfigVersion.cmake | |
f67539c2 | 1197 | VERSION ${rocksdb_VERSION} |
11fdf7f2 TL |
1198 | COMPATIBILITY SameMajorVersion |
1199 | ) | |
1200 | ||
1e59de90 TL |
1201 | configure_file( |
1202 | ${PROJECT_NAME}.pc.in | |
1203 | ${PROJECT_NAME}.pc | |
1204 | @ONLY | |
1205 | ) | |
1206 | ||
11fdf7f2 TL |
1207 | install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") |
1208 | ||
1e59de90 TL |
1209 | foreach (plugin ${PLUGINS}) |
1210 | foreach (header ${${plugin}_HEADERS}) | |
1211 | install(FILES plugin/${plugin}/${header} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rocksdb/plugin/${plugin}) | |
1212 | endforeach() | |
1213 | endforeach() | |
1214 | ||
20effc67 TL |
1215 | install(DIRECTORY "${PROJECT_SOURCE_DIR}/cmake/modules" COMPONENT devel DESTINATION ${package_config_destination}) |
1216 | ||
11fdf7f2 TL |
1217 | install( |
1218 | TARGETS ${ROCKSDB_STATIC_LIB} | |
1219 | EXPORT RocksDBTargets | |
1220 | COMPONENT devel | |
1221 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
1222 | INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" | |
1223 | ) | |
1224 | ||
f67539c2 TL |
1225 | if(ROCKSDB_BUILD_SHARED) |
1226 | install( | |
1227 | TARGETS ${ROCKSDB_SHARED_LIB} | |
1228 | EXPORT RocksDBTargets | |
1229 | COMPONENT runtime | |
1230 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
1231 | RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" | |
1232 | LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
1233 | INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" | |
1234 | ) | |
1235 | endif() | |
11fdf7f2 TL |
1236 | |
1237 | install( | |
1238 | EXPORT RocksDBTargets | |
1239 | COMPONENT devel | |
1240 | DESTINATION ${package_config_destination} | |
1241 | NAMESPACE RocksDB:: | |
1242 | ) | |
1243 | ||
1244 | install( | |
1245 | FILES | |
1246 | ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake | |
1247 | ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake | |
1248 | COMPONENT devel | |
1249 | DESTINATION ${package_config_destination} | |
1250 | ) | |
1e59de90 TL |
1251 | |
1252 | install( | |
1253 | FILES | |
1254 | ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc | |
1255 | COMPONENT devel | |
1256 | DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig | |
1257 | ) | |
11fdf7f2 TL |
1258 | endif() |
1259 | ||
20effc67 TL |
1260 | option(WITH_ALL_TESTS "Build all test, rather than a small subset" ON) |
1261 | ||
1262 | if(WITH_TESTS OR WITH_BENCHMARK_TOOLS) | |
f67539c2 TL |
1263 | add_subdirectory(third-party/gtest-1.8.1/fused-src/gtest) |
1264 | add_library(testharness STATIC | |
20effc67 | 1265 | test_util/mock_time_env.cc |
f67539c2 TL |
1266 | test_util/testharness.cc) |
1267 | target_link_libraries(testharness gtest) | |
20effc67 | 1268 | endif() |
f67539c2 | 1269 | |
20effc67 | 1270 | if(WITH_TESTS) |
11fdf7f2 | 1271 | set(TESTS |
20effc67 TL |
1272 | db/db_basic_test.cc |
1273 | env/env_basic_test.cc | |
1274 | ) | |
1275 | if(WITH_ALL_TESTS) | |
1276 | list(APPEND TESTS | |
1e59de90 | 1277 | cache/cache_reservation_manager_test.cc |
7c673cae | 1278 | cache/cache_test.cc |
1e59de90 | 1279 | cache/compressed_secondary_cache_test.cc |
7c673cae | 1280 | cache/lru_cache_test.cc |
1e59de90 | 1281 | db/blob/blob_counting_iterator_test.cc |
20effc67 TL |
1282 | db/blob/blob_file_addition_test.cc |
1283 | db/blob/blob_file_builder_test.cc | |
1284 | db/blob/blob_file_cache_test.cc | |
1285 | db/blob/blob_file_garbage_test.cc | |
1286 | db/blob/blob_file_reader_test.cc | |
1e59de90 TL |
1287 | db/blob/blob_garbage_meter_test.cc |
1288 | db/blob/blob_source_test.cc | |
20effc67 | 1289 | db/blob/db_blob_basic_test.cc |
1e59de90 TL |
1290 | db/blob/db_blob_compaction_test.cc |
1291 | db/blob/db_blob_corruption_test.cc | |
20effc67 | 1292 | db/blob/db_blob_index_test.cc |
7c673cae FG |
1293 | db/column_family_test.cc |
1294 | db/compact_files_test.cc | |
1e59de90 | 1295 | db/compaction/clipping_iterator_test.cc |
f67539c2 TL |
1296 | db/compaction/compaction_job_stats_test.cc |
1297 | db/compaction/compaction_job_test.cc | |
1298 | db/compaction/compaction_iterator_test.cc | |
1299 | db/compaction/compaction_picker_test.cc | |
1e59de90 TL |
1300 | db/compaction/compaction_service_test.cc |
1301 | db/compaction/tiered_compaction_test.cc | |
7c673cae FG |
1302 | db/comparator_db_test.cc |
1303 | db/corruption_test.cc | |
1304 | db/cuckoo_table_db_test.cc | |
1e59de90 | 1305 | db/db_readonly_with_timestamp_test.cc |
20effc67 | 1306 | db/db_with_timestamp_basic_test.cc |
7c673cae FG |
1307 | db/db_block_cache_test.cc |
1308 | db/db_bloom_filter_test.cc | |
1309 | db/db_compaction_filter_test.cc | |
1310 | db/db_compaction_test.cc | |
1311 | db/db_dynamic_level_test.cc | |
1e59de90 | 1312 | db/db_encryption_test.cc |
7c673cae FG |
1313 | db/db_flush_test.cc |
1314 | db/db_inplace_update_test.cc | |
1315 | db/db_io_failure_test.cc | |
1316 | db/db_iter_test.cc | |
11fdf7f2 | 1317 | db/db_iter_stress_test.cc |
7c673cae | 1318 | db/db_iterator_test.cc |
1e59de90 | 1319 | db/db_kv_checksum_test.cc |
7c673cae FG |
1320 | db/db_log_iter_test.cc |
1321 | db/db_memtable_test.cc | |
1322 | db/db_merge_operator_test.cc | |
f67539c2 | 1323 | db/db_merge_operand_test.cc |
7c673cae FG |
1324 | db/db_options_test.cc |
1325 | db/db_properties_test.cc | |
1326 | db/db_range_del_test.cc | |
1e59de90 TL |
1327 | db/db_rate_limiter_test.cc |
1328 | db/db_secondary_test.cc | |
7c673cae FG |
1329 | db/db_sst_test.cc |
1330 | db/db_statistics_test.cc | |
1331 | db/db_table_properties_test.cc | |
1332 | db/db_tailing_iter_test.cc | |
1333 | db/db_test.cc | |
1334 | db/db_test2.cc | |
20effc67 | 1335 | db/db_logical_block_size_cache_test.cc |
7c673cae FG |
1336 | db/db_universal_compaction_test.cc |
1337 | db/db_wal_test.cc | |
20effc67 | 1338 | db/db_with_timestamp_compaction_test.cc |
1e59de90 | 1339 | db/db_write_buffer_manager_test.cc |
11fdf7f2 | 1340 | db/db_write_test.cc |
7c673cae FG |
1341 | db/dbformat_test.cc |
1342 | db/deletefile_test.cc | |
20effc67 | 1343 | db/error_handler_fs_test.cc |
11fdf7f2 | 1344 | db/obsolete_files_test.cc |
7c673cae FG |
1345 | db/external_sst_file_basic_test.cc |
1346 | db/external_sst_file_test.cc | |
1347 | db/fault_injection_test.cc | |
1348 | db/file_indexer_test.cc | |
1349 | db/filename_test.cc | |
1350 | db/flush_job_test.cc | |
1e59de90 | 1351 | db/import_column_family_test.cc |
7c673cae FG |
1352 | db/listener_test.cc |
1353 | db/log_test.cc | |
1354 | db/manual_compaction_test.cc | |
1355 | db/memtable_list_test.cc | |
1356 | db/merge_helper_test.cc | |
1357 | db/merge_test.cc | |
1358 | db/options_file_test.cc | |
1359 | db/perf_context_test.cc | |
1e59de90 | 1360 | db/periodic_task_scheduler_test.cc |
7c673cae | 1361 | db/plain_table_db_test.cc |
1e59de90 | 1362 | db/seqno_time_test.cc |
7c673cae | 1363 | db/prefix_test.cc |
494da23a TL |
1364 | db/range_del_aggregator_test.cc |
1365 | db/range_tombstone_fragmenter_test.cc | |
7c673cae FG |
1366 | db/repair_test.cc |
1367 | db/table_properties_collector_test.cc | |
1368 | db/version_builder_test.cc | |
1369 | db/version_edit_test.cc | |
1370 | db/version_set_test.cc | |
1371 | db/wal_manager_test.cc | |
20effc67 | 1372 | db/wal_edit_test.cc |
1e59de90 TL |
1373 | db/wide/db_wide_basic_test.cc |
1374 | db/wide/wide_column_serialization_test.cc | |
7c673cae FG |
1375 | db/write_batch_test.cc |
1376 | db/write_callback_test.cc | |
1377 | db/write_controller_test.cc | |
7c673cae | 1378 | env/env_test.cc |
20effc67 | 1379 | env/io_posix_test.cc |
7c673cae | 1380 | env/mock_env_test.cc |
f67539c2 | 1381 | file/delete_scheduler_test.cc |
20effc67 TL |
1382 | file/prefetch_test.cc |
1383 | file/random_access_file_reader_test.cc | |
f67539c2 TL |
1384 | logging/auto_roll_logger_test.cc |
1385 | logging/env_logger_test.cc | |
1386 | logging/event_logger_test.cc | |
1387 | memory/arena_test.cc | |
1e59de90 | 1388 | memory/memory_allocator_test.cc |
7c673cae FG |
1389 | memtable/inlineskiplist_test.cc |
1390 | memtable/skiplist_test.cc | |
11fdf7f2 | 1391 | memtable/write_buffer_manager_test.cc |
7c673cae FG |
1392 | monitoring/histogram_test.cc |
1393 | monitoring/iostats_context_test.cc | |
1394 | monitoring/statistics_test.cc | |
f67539c2 | 1395 | monitoring/stats_history_test.cc |
20effc67 TL |
1396 | options/configurable_test.cc |
1397 | options/customizable_test.cc | |
7c673cae FG |
1398 | options/options_settable_test.cc |
1399 | options/options_test.cc | |
20effc67 | 1400 | table/block_based/block_based_table_reader_test.cc |
f67539c2 TL |
1401 | table/block_based/block_test.cc |
1402 | table/block_based/data_block_hash_index_test.cc | |
1403 | table/block_based/full_filter_block_test.cc | |
1404 | table/block_based/partitioned_filter_block_test.cc | |
11fdf7f2 | 1405 | table/cleanable_test.cc |
f67539c2 TL |
1406 | table/cuckoo/cuckoo_table_builder_test.cc |
1407 | table/cuckoo/cuckoo_table_reader_test.cc | |
7c673cae | 1408 | table/merger_test.cc |
494da23a | 1409 | table/sst_file_reader_test.cc |
7c673cae | 1410 | table/table_test.cc |
20effc67 TL |
1411 | table/block_fetcher_test.cc |
1412 | test_util/testutil_test.cc | |
1e59de90 | 1413 | trace_replay/block_cache_tracer_test.cc |
20effc67 | 1414 | trace_replay/io_tracer_test.cc |
f67539c2 | 1415 | tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc |
20effc67 | 1416 | tools/io_tracer_parser_test.cc |
7c673cae FG |
1417 | tools/ldb_cmd_test.cc |
1418 | tools/reduce_levels_test.cc | |
1419 | tools/sst_dump_test.cc | |
11fdf7f2 | 1420 | tools/trace_analyzer_test.cc |
7c673cae FG |
1421 | util/autovector_test.cc |
1422 | util/bloom_test.cc | |
1423 | util/coding_test.cc | |
1424 | util/crc32c_test.cc | |
f67539c2 | 1425 | util/defer_test.cc |
7c673cae | 1426 | util/dynamic_bloom_test.cc |
7c673cae FG |
1427 | util/file_reader_writer_test.cc |
1428 | util/filelock_test.cc | |
11fdf7f2 | 1429 | util/hash_test.cc |
7c673cae | 1430 | util/heap_test.cc |
f67539c2 | 1431 | util/random_test.cc |
7c673cae | 1432 | util/rate_limiter_test.cc |
11fdf7f2 | 1433 | util/repeatable_thread_test.cc |
20effc67 | 1434 | util/ribbon_test.cc |
f67539c2 | 1435 | util/slice_test.cc |
7c673cae | 1436 | util/slice_transform_test.cc |
11fdf7f2 | 1437 | util/timer_queue_test.cc |
20effc67 | 1438 | util/timer_test.cc |
7c673cae FG |
1439 | util/thread_list_test.cc |
1440 | util/thread_local_test.cc | |
20effc67 | 1441 | util/work_queue_test.cc |
1e59de90 TL |
1442 | utilities/agg_merge/agg_merge_test.cc |
1443 | utilities/backup/backup_engine_test.cc | |
7c673cae | 1444 | utilities/blob_db/blob_db_test.cc |
11fdf7f2 TL |
1445 | utilities/cassandra/cassandra_functional_test.cc |
1446 | utilities/cassandra/cassandra_format_test.cc | |
1447 | utilities/cassandra/cassandra_row_merge_test.cc | |
1448 | utilities/cassandra/cassandra_serialize_test.cc | |
7c673cae | 1449 | utilities/checkpoint/checkpoint_test.cc |
1e59de90 | 1450 | utilities/env_timed_test.cc |
7c673cae FG |
1451 | utilities/memory/memory_test.cc |
1452 | utilities/merge_operators/string_append/stringappend_test.cc | |
1453 | utilities/object_registry_test.cc | |
1454 | utilities/option_change_migration/option_change_migration_test.cc | |
1455 | utilities/options/options_util_test.cc | |
1456 | utilities/persistent_cache/hash_table_test.cc | |
1457 | utilities/persistent_cache/persistent_cache_test.cc | |
f67539c2 | 1458 | utilities/simulator_cache/cache_simulator_test.cc |
11fdf7f2 | 1459 | utilities/simulator_cache/sim_cache_test.cc |
7c673cae FG |
1460 | utilities/table_properties_collectors/compact_on_deletion_collector_test.cc |
1461 | utilities/transactions/optimistic_transaction_test.cc | |
1462 | utilities/transactions/transaction_test.cc | |
20effc67 | 1463 | utilities/transactions/lock/point/point_lock_manager_test.cc |
1e59de90 | 1464 | utilities/transactions/write_committed_transaction_ts_test.cc |
11fdf7f2 TL |
1465 | utilities/transactions/write_prepared_transaction_test.cc |
1466 | utilities/transactions/write_unprepared_transaction_test.cc | |
1e59de90 TL |
1467 | utilities/transactions/lock/range/range_locking_test.cc |
1468 | utilities/transactions/timestamped_snapshot_test.cc | |
7c673cae | 1469 | utilities/ttl/ttl_test.cc |
1e59de90 | 1470 | utilities/util_merge_operators_test.cc |
7c673cae | 1471 | utilities/write_batch_with_index/write_batch_with_index_test.cc |
20effc67 TL |
1472 | ) |
1473 | endif() | |
f67539c2 | 1474 | |
11fdf7f2 TL |
1475 | set(TESTUTIL_SOURCE |
1476 | db/db_test_util.cc | |
1e59de90 | 1477 | db/db_with_timestamp_test_util.cc |
11fdf7f2 TL |
1478 | monitoring/thread_status_updater_debug.cc |
1479 | table/mock_table.cc | |
1e59de90 | 1480 | utilities/agg_merge/test_agg_merge.cc |
11fdf7f2 TL |
1481 | utilities/cassandra/test_utils.cc |
1482 | ) | |
11fdf7f2 TL |
1483 | enable_testing() |
1484 | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | |
1485 | set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX}) | |
1486 | add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE}) | |
1e59de90 | 1487 | target_link_libraries(${TESTUTILLIB} ${ROCKSDB_LIB} ${FOLLY_LIBS}) |
11fdf7f2 TL |
1488 | if(MSVC) |
1489 | set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb") | |
1490 | endif() | |
1491 | set_target_properties(${TESTUTILLIB} | |
1492 | PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 | |
1493 | EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 | |
1494 | EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 | |
20effc67 | 1495 | ) |
11fdf7f2 | 1496 | |
f67539c2 | 1497 | foreach(sourcefile ${TESTS}) |
11fdf7f2 | 1498 | get_filename_component(exename ${sourcefile} NAME_WE) |
1e59de90 TL |
1499 | add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}) |
1500 | set_target_properties(${exename}${ARTIFACT_SUFFIX} | |
11fdf7f2 TL |
1501 | PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 |
1502 | EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 | |
1503 | EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 | |
1504 | OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX} | |
20effc67 | 1505 | ) |
1e59de90 | 1506 | target_link_libraries(${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} testharness gtest ${THIRDPARTY_LIBS} ${ROCKSDB_LIB}) |
11fdf7f2 | 1507 | if(NOT "${exename}" MATCHES "db_sanity_test") |
1e59de90 TL |
1508 | gtest_discover_tests(${exename} DISCOVERY_TIMEOUT 120) |
1509 | add_dependencies(check ${exename}${ARTIFACT_SUFFIX}) | |
20effc67 | 1510 | endif() |
f67539c2 | 1511 | endforeach(sourcefile ${TESTS}) |
11fdf7f2 | 1512 | |
f67539c2 TL |
1513 | if(WIN32) |
1514 | # C executables must link to a shared object | |
1515 | if(ROCKSDB_BUILD_SHARED) | |
1516 | set(ROCKSDB_LIB_FOR_C ${ROCKSDB_SHARED_LIB}) | |
1517 | else() | |
1518 | set(ROCKSDB_LIB_FOR_C OFF) | |
1519 | endif() | |
1520 | else() | |
1521 | set(ROCKSDB_LIB_FOR_C ${ROCKSDB_LIB}) | |
1522 | endif() | |
11fdf7f2 | 1523 | |
f67539c2 TL |
1524 | if(ROCKSDB_LIB_FOR_C) |
1525 | set(C_TESTS db/c_test.c) | |
f67539c2 | 1526 | add_executable(c_test db/c_test.c) |
20effc67 | 1527 | target_link_libraries(c_test ${ROCKSDB_LIB_FOR_C} testharness) |
f67539c2 TL |
1528 | add_test(NAME c_test COMMAND c_test${ARTIFACT_SUFFIX}) |
1529 | add_dependencies(check c_test) | |
1530 | endif() | |
1531 | endif() | |
1532 | ||
f67539c2 | 1533 | if(WITH_BENCHMARK_TOOLS) |
1e59de90 TL |
1534 | add_executable(db_bench${ARTIFACT_SUFFIX} |
1535 | tools/simulated_hybrid_file_system.cc | |
f67539c2 TL |
1536 | tools/db_bench.cc |
1537 | tools/db_bench_tool.cc) | |
1e59de90 | 1538 | target_link_libraries(db_bench${ARTIFACT_SUFFIX} |
20effc67 | 1539 | ${ROCKSDB_LIB} ${THIRDPARTY_LIBS}) |
f67539c2 | 1540 | |
1e59de90 TL |
1541 | add_executable(cache_bench${ARTIFACT_SUFFIX} |
1542 | cache/cache_bench.cc | |
1543 | cache/cache_bench_tool.cc) | |
1544 | target_link_libraries(cache_bench${ARTIFACT_SUFFIX} | |
1545 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
f67539c2 | 1546 | |
1e59de90 | 1547 | add_executable(memtablerep_bench${ARTIFACT_SUFFIX} |
f67539c2 | 1548 | memtable/memtablerep_bench.cc) |
1e59de90 TL |
1549 | target_link_libraries(memtablerep_bench${ARTIFACT_SUFFIX} |
1550 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
f67539c2 | 1551 | |
1e59de90 | 1552 | add_executable(range_del_aggregator_bench${ARTIFACT_SUFFIX} |
f67539c2 | 1553 | db/range_del_aggregator_bench.cc) |
1e59de90 TL |
1554 | target_link_libraries(range_del_aggregator_bench${ARTIFACT_SUFFIX} |
1555 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
f67539c2 | 1556 | |
1e59de90 | 1557 | add_executable(table_reader_bench${ARTIFACT_SUFFIX} |
f67539c2 | 1558 | table/table_reader_bench.cc) |
1e59de90 TL |
1559 | target_link_libraries(table_reader_bench${ARTIFACT_SUFFIX} |
1560 | ${ROCKSDB_LIB} testharness ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
f67539c2 | 1561 | |
1e59de90 | 1562 | add_executable(filter_bench${ARTIFACT_SUFFIX} |
f67539c2 | 1563 | util/filter_bench.cc) |
1e59de90 TL |
1564 | target_link_libraries(filter_bench${ARTIFACT_SUFFIX} |
1565 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
f67539c2 | 1566 | |
1e59de90 | 1567 | add_executable(hash_table_bench${ARTIFACT_SUFFIX} |
f67539c2 | 1568 | utilities/persistent_cache/hash_table_bench.cc) |
1e59de90 TL |
1569 | target_link_libraries(hash_table_bench${ARTIFACT_SUFFIX} |
1570 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
1571 | endif() | |
1572 | ||
1573 | option(WITH_TRACE_TOOLS "build with trace tools" ON) | |
1574 | if(WITH_TRACE_TOOLS) | |
1575 | add_executable(block_cache_trace_analyzer${ARTIFACT_SUFFIX} | |
1576 | tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc) | |
1577 | target_link_libraries(block_cache_trace_analyzer${ARTIFACT_SUFFIX} | |
1578 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
1579 | ||
1580 | add_executable(trace_analyzer${ARTIFACT_SUFFIX} | |
1581 | tools/trace_analyzer.cc) | |
1582 | target_link_libraries(trace_analyzer${ARTIFACT_SUFFIX} | |
1583 | ${ROCKSDB_LIB} ${GFLAGS_LIB} ${FOLLY_LIBS}) | |
1584 | ||
11fdf7f2 TL |
1585 | endif() |
1586 | ||
f67539c2 | 1587 | if(WITH_CORE_TOOLS OR WITH_TOOLS) |
11fdf7f2 | 1588 | add_subdirectory(tools) |
f67539c2 TL |
1589 | add_custom_target(core_tools |
1590 | DEPENDS ${core_tool_deps}) | |
1591 | endif() | |
1592 | ||
1593 | if(WITH_TOOLS) | |
1594 | add_subdirectory(db_stress_tool) | |
1595 | add_custom_target(tools | |
1596 | DEPENDS ${tool_deps}) | |
7c673cae | 1597 | endif() |
20effc67 TL |
1598 | |
1599 | option(WITH_EXAMPLES "build with examples" OFF) | |
1600 | if(WITH_EXAMPLES) | |
1601 | add_subdirectory(examples) | |
1602 | endif() | |
1e59de90 TL |
1603 | |
1604 | option(WITH_BENCHMARK "build benchmark tests" OFF) | |
1605 | if(WITH_BENCHMARK) | |
1606 | add_subdirectory(${PROJECT_SOURCE_DIR}/microbench/) | |
1607 | endif() |