]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | # Prerequisites for Windows: |
2 | # This cmake build is for Windows 64-bit only. | |
3 | # | |
4 | # Prerequisites: | |
5 | # You must have at least Visual Studio 2015 Update 3. Start the Developer Command Prompt window that is a part of Visual Studio installation. | |
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. | |
11fdf7f2 | 17 | # sample command: cmake -G "Visual Studio 15 Win64" -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 | # | |
30 | # 1. Install a recent toolchain such as devtoolset-3 if you're on a older distro. C++11 required. | |
31 | # 2. mkdir build; cd build | |
32 | # 3. cmake .. | |
33 | # 4. make -j | |
34 | ||
11fdf7f2 | 35 | cmake_minimum_required(VERSION 2.8.12) |
7c673cae | 36 | project(rocksdb) |
11fdf7f2 TL |
37 | enable_language(CXX) |
38 | enable_language(C) | |
39 | enable_language(ASM) | |
7c673cae FG |
40 | |
41 | if(POLICY CMP0042) | |
42 | cmake_policy(SET CMP0042 NEW) | |
43 | endif() | |
44 | ||
11fdf7f2 | 45 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/") |
7c673cae | 46 | |
11fdf7f2 TL |
47 | option(WITH_JEMALLOC "build with JeMalloc" OFF) |
48 | option(WITH_SNAPPY "build with SNAPPY" OFF) | |
49 | option(WITH_LZ4 "build with lz4" OFF) | |
50 | option(WITH_ZLIB "build with zlib" OFF) | |
51 | option(WITH_ZSTD "build with zstd" OFF) | |
7c673cae | 52 | if(MSVC) |
11fdf7f2 TL |
53 | # Defaults currently different for GFLAGS. |
54 | # We will address find_package work a little later | |
55 | option(WITH_GFLAGS "build with GFlags" OFF) | |
56 | option(WITH_XPRESS "build with windows built in compression" OFF) | |
7c673cae FG |
57 | include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc) |
58 | else() | |
7c673cae | 59 | if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") |
11fdf7f2 | 60 | # FreeBSD has jemalloc as default malloc |
7c673cae FG |
61 | # but it does not have all the jemalloc files in include/... |
62 | set(WITH_JEMALLOC ON) | |
63 | else() | |
64 | if(WITH_JEMALLOC) | |
65 | find_package(JeMalloc REQUIRED) | |
66 | add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE) | |
67 | include_directories(${JEMALLOC_INCLUDE_DIR}) | |
11fdf7f2 | 68 | list(APPEND THIRDPARTY_LIBS ${JEMALLOC_LIBRARIES}) |
7c673cae FG |
69 | endif() |
70 | endif() | |
11fdf7f2 TL |
71 | |
72 | # No config file for this | |
73 | option(WITH_GFLAGS "build with GFlags" ON) | |
74 | if(WITH_GFLAGS) | |
75 | find_package(gflags) | |
76 | if(gflags_FOUND) | |
77 | add_definitions(-DGFLAGS=1) | |
78 | include_directories(${gflags_INCLUDE_DIR}) | |
79 | list(APPEND THIRDPARTY_LIBS ${gflags_LIBRARIES}) | |
80 | endif() | |
81 | endif() | |
82 | ||
7c673cae FG |
83 | if(WITH_SNAPPY) |
84 | find_package(snappy REQUIRED) | |
85 | add_definitions(-DSNAPPY) | |
86 | include_directories(${SNAPPY_INCLUDE_DIR}) | |
87 | list(APPEND THIRDPARTY_LIBS ${SNAPPY_LIBRARIES}) | |
88 | endif() | |
7c673cae | 89 | |
11fdf7f2 TL |
90 | if(WITH_ZLIB) |
91 | find_package(zlib REQUIRED) | |
92 | add_definitions(-DZLIB) | |
93 | include_directories(${ZLIB_INCLUDE_DIR}) | |
94 | list(APPEND THIRDPARTY_LIBS ${ZLIB_LIBRARIES}) | |
95 | endif() | |
96 | ||
97 | option(WITH_BZ2 "build with bzip2" OFF) | |
98 | if(WITH_BZ2) | |
99 | find_package(bzip2 REQUIRED) | |
100 | add_definitions(-DBZIP2) | |
101 | include_directories(${BZIP2_INCLUDE_DIR}) | |
102 | list(APPEND THIRDPARTY_LIBS ${BZIP2_LIBRARIES}) | |
103 | endif() | |
104 | ||
105 | if(WITH_LZ4) | |
106 | find_package(lz4 REQUIRED) | |
107 | add_definitions(-DLZ4) | |
108 | include_directories(${LZ4_INCLUDE_DIR}) | |
109 | list(APPEND THIRDPARTY_LIBS ${LZ4_LIBRARIES}) | |
110 | endif() | |
111 | ||
112 | if(WITH_ZSTD) | |
113 | find_package(zstd REQUIRED) | |
114 | add_definitions(-DZSTD) | |
115 | include_directories(${ZSTD_INCLUDE_DIR}) | |
116 | list(APPEND THIRDPARTY_LIBS ${ZSTD_LIBRARIES}) | |
117 | endif() | |
7c673cae FG |
118 | endif() |
119 | ||
11fdf7f2 TL |
120 | string(TIMESTAMP GIT_DATE_TIME "%Y/%m/%d %H:%M:%S" UTC) |
121 | ||
7c673cae FG |
122 | find_package(Git) |
123 | ||
124 | if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") | |
125 | if(WIN32) | |
126 | execute_process(COMMAND $ENV{COMSPEC} /C ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA) | |
127 | else() | |
128 | execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse HEAD OUTPUT_VARIABLE GIT_SHA) | |
129 | endif() | |
130 | else() | |
131 | set(GIT_SHA 0) | |
132 | endif() | |
133 | ||
134 | string(REGEX REPLACE "[^0-9a-f]+" "" GIT_SHA "${GIT_SHA}") | |
135 | ||
7c673cae | 136 | |
11fdf7f2 TL |
137 | # Read rocksdb version from version.h header file. |
138 | file(READ include/rocksdb/version.h version_header_file) | |
139 | string(REGEX MATCH "#define ROCKSDB_MAJOR ([0-9]+)" _ ${version_header_file}) | |
140 | set(ROCKSDB_VERSION_MAJOR ${CMAKE_MATCH_1}) | |
141 | string(REGEX MATCH "#define ROCKSDB_MINOR ([0-9]+)" _ ${version_header_file}) | |
142 | set(ROCKSDB_VERSION_MINOR ${CMAKE_MATCH_1}) | |
143 | string(REGEX MATCH "#define ROCKSDB_PATCH ([0-9]+)" _ ${version_header_file}) | |
144 | set(ROCKSDB_VERSION_PATCH ${CMAKE_MATCH_1}) | |
145 | set(ROCKSDB_VERSION ${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}) | |
7c673cae | 146 | |
11fdf7f2 TL |
147 | |
148 | option(WITH_MD_LIBRARY "build with MD" ON) | |
149 | if(WIN32 AND MSVC) | |
150 | if(WITH_MD_LIBRARY) | |
151 | set(RUNTIME_LIBRARY "MD") | |
152 | else() | |
153 | set(RUNTIME_LIBRARY "MT") | |
7c673cae FG |
154 | endif() |
155 | endif() | |
156 | ||
157 | set(BUILD_VERSION_CC ${CMAKE_BINARY_DIR}/build_version.cc) | |
158 | configure_file(util/build_version.cc.in ${BUILD_VERSION_CC} @ONLY) | |
159 | add_library(build_version OBJECT ${BUILD_VERSION_CC}) | |
160 | target_include_directories(build_version PRIVATE | |
161 | ${CMAKE_CURRENT_SOURCE_DIR}/util) | |
162 | if(MSVC) | |
163 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /EHsc /GS /Gd /GR /GF /fp:precise /Zc:wchar_t /Zc:forScope /errorReport:queue") | |
11fdf7f2 | 164 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /FC /d2Zi+ /W4 /wd4127 /wd4800 /wd4996 /wd4351 /wd4100 /wd4204 /wd4324") |
7c673cae FG |
165 | else() |
166 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wextra -Wall") | |
11fdf7f2 | 167 | 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") |
7c673cae FG |
168 | if(MINGW) |
169 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format") | |
170 | endif() | |
171 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") | |
172 | if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") | |
11fdf7f2 | 173 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") |
7c673cae FG |
174 | include(CheckCXXCompilerFlag) |
175 | CHECK_CXX_COMPILER_FLAG("-momit-leaf-frame-pointer" HAVE_OMIT_LEAF_FRAME_POINTER) | |
176 | if(HAVE_OMIT_LEAF_FRAME_POINTER) | |
177 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -momit-leaf-frame-pointer") | |
178 | endif() | |
179 | endif() | |
180 | endif() | |
181 | ||
11fdf7f2 TL |
182 | include(CheckCCompilerFlag) |
183 | if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le") | |
184 | CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) | |
185 | if(HAS_ALTIVEC) | |
186 | message(STATUS " HAS_ALTIVEC yes") | |
187 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec") | |
188 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec") | |
189 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=power8") | |
190 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=power8") | |
191 | endif(HAS_ALTIVEC) | |
192 | endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le") | |
193 | ||
194 | option(PORTABLE "build a portable binary" OFF) | |
195 | option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF) | |
196 | if(PORTABLE) | |
197 | # MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h | |
198 | # is available, it is available by default. | |
199 | if(FORCE_SSE42 AND NOT MSVC) | |
200 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul") | |
201 | endif() | |
202 | else() | |
203 | if(MSVC) | |
204 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2") | |
205 | else() | |
206 | if(NOT HAVE_POWER8) | |
207 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") | |
208 | endif() | |
209 | endif() | |
210 | endif() | |
211 | ||
94b18763 FG |
212 | include(CheckCXXSourceCompiles) |
213 | if(NOT MSVC) | |
11fdf7f2 | 214 | set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul") |
94b18763 FG |
215 | endif() |
216 | CHECK_CXX_SOURCE_COMPILES(" | |
217 | #include <cstdint> | |
218 | #include <nmmintrin.h> | |
11fdf7f2 | 219 | #include <wmmintrin.h> |
94b18763 FG |
220 | int main() { |
221 | volatile uint32_t x = _mm_crc32_u32(0, 0); | |
11fdf7f2 TL |
222 | const auto a = _mm_set_epi64x(0, 0); |
223 | const auto b = _mm_set_epi64x(0, 0); | |
224 | const auto c = _mm_clmulepi64_si128(a, b, 0x00); | |
225 | auto d = _mm_cvtsi128_si64(c); | |
94b18763 FG |
226 | } |
227 | " HAVE_SSE42) | |
228 | unset(CMAKE_REQUIRED_FLAGS) | |
11fdf7f2 TL |
229 | if(HAVE_SSE42) |
230 | add_definitions(-DHAVE_SSE42) | |
231 | add_definitions(-DHAVE_PCLMUL) | |
232 | elseif(FORCE_SSE42) | |
233 | message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled") | |
234 | endif() | |
235 | ||
236 | CHECK_CXX_SOURCE_COMPILES(" | |
237 | #if defined(_MSC_VER) && !defined(__thread) | |
238 | #define __thread __declspec(thread) | |
239 | #endif | |
240 | int main() { | |
241 | static __thread int tls; | |
242 | } | |
243 | " HAVE_THREAD_LOCAL) | |
244 | if(HAVE_THREAD_LOCAL) | |
245 | add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL) | |
94b18763 FG |
246 | endif() |
247 | ||
7c673cae FG |
248 | option(FAIL_ON_WARNINGS "Treat compile warnings as errors" ON) |
249 | if(FAIL_ON_WARNINGS) | |
250 | if(MSVC) | |
251 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") | |
252 | else() # assume GCC | |
253 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") | |
254 | endif() | |
255 | endif() | |
256 | ||
257 | option(WITH_ASAN "build with ASAN" OFF) | |
258 | if(WITH_ASAN) | |
7c673cae FG |
259 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
260 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") | |
261 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") | |
262 | if(WITH_JEMALLOC) | |
263 | message(FATAL "ASAN does not work well with JeMalloc") | |
264 | endif() | |
265 | endif() | |
266 | ||
267 | option(WITH_TSAN "build with TSAN" OFF) | |
268 | if(WITH_TSAN) | |
269 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread -pie") | |
7c673cae FG |
270 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIC") |
271 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fPIC") | |
272 | if(WITH_JEMALLOC) | |
273 | message(FATAL "TSAN does not work well with JeMalloc") | |
274 | endif() | |
275 | endif() | |
276 | ||
277 | option(WITH_UBSAN "build with UBSAN" OFF) | |
278 | if(WITH_UBSAN) | |
11fdf7f2 | 279 | add_definitions(-DROCKSDB_UBSAN_RUN) |
7c673cae FG |
280 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined") |
281 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") | |
282 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") | |
283 | if(WITH_JEMALLOC) | |
284 | message(FATAL "UBSAN does not work well with JeMalloc") | |
285 | endif() | |
286 | endif() | |
287 | ||
11fdf7f2 TL |
288 | option(WITH_NUMA "build with NUMA policy support" OFF) |
289 | if(WITH_NUMA) | |
290 | find_package(NUMA REQUIRED) | |
291 | add_definitions(-DNUMA) | |
292 | include_directories(${NUMA_INCLUDE_DIR}) | |
293 | list(APPEND THIRDPARTY_LIBS ${NUMA_LIBRARIES}) | |
294 | endif() | |
7c673cae | 295 | |
11fdf7f2 TL |
296 | option(WITH_TBB "build with Threading Building Blocks (TBB)" OFF) |
297 | if(WITH_TBB) | |
298 | find_package(TBB REQUIRED) | |
299 | add_definitions(-DTBB) | |
300 | include_directories(${TBB_INCLUDE_DIR}) | |
301 | list(APPEND THIRDPARTY_LIBS ${TBB_LIBRARIES}) | |
302 | endif() | |
303 | ||
304 | # Stall notifications eat some performance from inserts | |
305 | option(DISABLE_STALL_NOTIF "Build with stall notifications" OFF) | |
306 | if(DISABLE_STALL_NOTIF) | |
307 | add_definitions(-DROCKSDB_DISABLE_STALL_NOTIFICATION) | |
308 | endif() | |
309 | ||
310 | ||
311 | if(DEFINED USE_RTTI) | |
312 | if(USE_RTTI) | |
313 | message(STATUS "Enabling RTTI") | |
314 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") | |
315 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DROCKSDB_USE_RTTI") | |
316 | else() | |
317 | if(MSVC) | |
318 | message(STATUS "Disabling RTTI in Release builds. Always on in Debug.") | |
319 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") | |
320 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-") | |
321 | else() | |
322 | message(STATUS "Disabling RTTI in Release builds") | |
323 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-rtti") | |
324 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti") | |
325 | endif() | |
326 | endif() | |
7c673cae | 327 | else() |
11fdf7f2 TL |
328 | message(STATUS "Enabling RTTI in Debug builds only (default)") |
329 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DROCKSDB_USE_RTTI") | |
330 | if(MSVC) | |
331 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GR-") | |
332 | else() | |
333 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-rtti") | |
334 | endif() | |
7c673cae FG |
335 | endif() |
336 | ||
11fdf7f2 TL |
337 | # Used to run CI build and tests so we can run faster |
338 | option(OPTDBG "Build optimized debug build with MSVC" OFF) | |
339 | option(WITH_RUNTIME_DEBUG "build with debug version of runtime library" ON) | |
7c673cae | 340 | if(MSVC) |
11fdf7f2 | 341 | if(OPTDBG) |
7c673cae | 342 | message(STATUS "Debug optimization is enabled") |
11fdf7f2 TL |
343 | set(CMAKE_CXX_FLAGS_DEBUG "/Oxt") |
344 | else() | |
345 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /RTC1 /Gm") | |
346 | endif() | |
347 | if(WITH_RUNTIME_DEBUG) | |
348 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}d") | |
7c673cae | 349 | else() |
11fdf7f2 | 350 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /${RUNTIME_LIBRARY}") |
7c673cae FG |
351 | endif() |
352 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oxt /Zp8 /Gm- /Gy /${RUNTIME_LIBRARY}") | |
353 | ||
354 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG") | |
355 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") | |
356 | endif() | |
357 | ||
358 | if(CMAKE_COMPILER_IS_GNUCXX) | |
359 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-memcmp") | |
360 | endif() | |
361 | ||
362 | option(ROCKSDB_LITE "Build RocksDBLite version" OFF) | |
363 | if(ROCKSDB_LITE) | |
364 | add_definitions(-DROCKSDB_LITE) | |
365 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") | |
366 | endif() | |
367 | ||
368 | if(CMAKE_SYSTEM_NAME MATCHES "Cygwin") | |
369 | add_definitions(-fno-builtin-memcmp -DCYGWIN) | |
370 | elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") | |
371 | add_definitions(-DOS_MACOSX) | |
372 | if(CMAKE_SYSTEM_PROCESSOR MATCHES arm) | |
373 | add_definitions(-DIOS_CROSS_COMPILE -DROCKSDB_LITE) | |
374 | # no debug info for IOS, that will make our library big | |
375 | add_definitions(-DNDEBUG) | |
376 | endif() | |
377 | elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") | |
378 | add_definitions(-DOS_LINUX) | |
379 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") | |
380 | add_definitions(-DOS_SOLARIS) | |
381 | elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") | |
382 | add_definitions(-DOS_FREEBSD) | |
383 | elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") | |
384 | add_definitions(-DOS_NETBSD) | |
385 | elseif(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") | |
386 | add_definitions(-DOS_OPENBSD) | |
387 | elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly") | |
388 | add_definitions(-DOS_DRAGONFLYBSD) | |
389 | elseif(CMAKE_SYSTEM_NAME MATCHES "Android") | |
390 | add_definitions(-DOS_ANDROID) | |
391 | elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") | |
392 | add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DNOMINMAX) | |
393 | if(MINGW) | |
394 | add_definitions(-D_WIN32_WINNT=_WIN32_WINNT_VISTA) | |
395 | endif() | |
396 | endif() | |
397 | ||
398 | if(NOT WIN32) | |
399 | add_definitions(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX) | |
400 | endif() | |
401 | ||
402 | option(WITH_FALLOCATE "build with fallocate" ON) | |
7c673cae | 403 | if(WITH_FALLOCATE) |
11fdf7f2 | 404 | CHECK_CXX_SOURCE_COMPILES(" |
7c673cae FG |
405 | #include <fcntl.h> |
406 | #include <linux/falloc.h> | |
407 | int main() { | |
408 | int fd = open(\"/dev/null\", 0); | |
409 | fallocate(fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, 0, 1024); | |
410 | } | |
411 | " HAVE_FALLOCATE) | |
412 | if(HAVE_FALLOCATE) | |
413 | add_definitions(-DROCKSDB_FALLOCATE_PRESENT) | |
414 | endif() | |
415 | endif() | |
416 | ||
11fdf7f2 TL |
417 | CHECK_CXX_SOURCE_COMPILES(" |
418 | #include <fcntl.h> | |
419 | int main() { | |
420 | int fd = open(\"/dev/null\", 0); | |
421 | sync_file_range(fd, 0, 1024, SYNC_FILE_RANGE_WRITE); | |
422 | } | |
423 | " HAVE_SYNC_FILE_RANGE_WRITE) | |
424 | if(HAVE_SYNC_FILE_RANGE_WRITE) | |
425 | add_definitions(-DROCKSDB_RANGESYNC_PRESENT) | |
426 | endif() | |
427 | ||
428 | CHECK_CXX_SOURCE_COMPILES(" | |
429 | #include <pthread.h> | |
430 | int main() { | |
431 | (void) PTHREAD_MUTEX_ADAPTIVE_NP; | |
432 | } | |
433 | " HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) | |
434 | if(HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) | |
435 | add_definitions(-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX) | |
436 | endif() | |
437 | ||
438 | include(CheckCXXSymbolExists) | |
439 | check_cxx_symbol_exists(malloc_usable_size malloc.h HAVE_MALLOC_USABLE_SIZE) | |
7c673cae FG |
440 | if(HAVE_MALLOC_USABLE_SIZE) |
441 | add_definitions(-DROCKSDB_MALLOC_USABLE_SIZE) | |
442 | endif() | |
443 | ||
11fdf7f2 TL |
444 | check_cxx_symbol_exists(sched_getcpu sched.h HAVE_SCHED_GETCPU) |
445 | if(HAVE_SCHED_GETCPU) | |
446 | add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT) | |
447 | endif() | |
448 | ||
7c673cae FG |
449 | include_directories(${PROJECT_SOURCE_DIR}) |
450 | include_directories(${PROJECT_SOURCE_DIR}/include) | |
451 | include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/third-party/gtest-1.7.0/fused-src) | |
452 | find_package(Threads REQUIRED) | |
453 | ||
454 | add_subdirectory(third-party/gtest-1.7.0/fused-src/gtest) | |
455 | ||
456 | # Main library source code | |
457 | ||
458 | set(SOURCES | |
459 | cache/clock_cache.cc | |
460 | cache/lru_cache.cc | |
461 | cache/sharded_cache.cc | |
462 | db/builder.cc | |
463 | db/c.cc | |
464 | db/column_family.cc | |
465 | db/compacted_db_impl.cc | |
466 | db/compaction.cc | |
467 | db/compaction_iterator.cc | |
468 | db/compaction_job.cc | |
469 | db/compaction_picker.cc | |
470 | db/compaction_picker_universal.cc | |
471 | db/convenience.cc | |
472 | db/db_filesnapshot.cc | |
473 | db/db_impl.cc | |
474 | db/db_impl_write.cc | |
475 | db/db_impl_compaction_flush.cc | |
476 | db/db_impl_files.cc | |
477 | db/db_impl_open.cc | |
478 | db/db_impl_debug.cc | |
479 | db/db_impl_experimental.cc | |
480 | db/db_impl_readonly.cc | |
481 | db/db_info_dumper.cc | |
482 | db/db_iter.cc | |
483 | db/dbformat.cc | |
11fdf7f2 | 484 | db/error_handler.cc |
7c673cae FG |
485 | db/event_helpers.cc |
486 | db/experimental.cc | |
487 | db/external_sst_file_ingestion_job.cc | |
488 | db/file_indexer.cc | |
489 | db/flush_job.cc | |
490 | db/flush_scheduler.cc | |
491 | db/forward_iterator.cc | |
492 | db/internal_stats.cc | |
11fdf7f2 | 493 | db/logs_with_prep_tracker.cc |
7c673cae FG |
494 | db/log_reader.cc |
495 | db/log_writer.cc | |
11fdf7f2 | 496 | db/malloc_stats.cc |
7c673cae FG |
497 | db/memtable.cc |
498 | db/memtable_list.cc | |
499 | db/merge_helper.cc | |
500 | db/merge_operator.cc | |
501 | db/range_del_aggregator.cc | |
502 | db/repair.cc | |
503 | db/snapshot_impl.cc | |
504 | db/table_cache.cc | |
505 | db/table_properties_collector.cc | |
506 | db/transaction_log_impl.cc | |
507 | db/version_builder.cc | |
508 | db/version_edit.cc | |
509 | db/version_set.cc | |
510 | db/wal_manager.cc | |
511 | db/write_batch.cc | |
512 | db/write_batch_base.cc | |
513 | db/write_controller.cc | |
514 | db/write_thread.cc | |
515 | env/env.cc | |
516 | env/env_chroot.cc | |
11fdf7f2 | 517 | env/env_encryption.cc |
7c673cae | 518 | env/env_hdfs.cc |
11fdf7f2 TL |
519 | env/mock_env.cc |
520 | memtable/alloc_tracker.cc | |
7c673cae FG |
521 | memtable/hash_cuckoo_rep.cc |
522 | memtable/hash_linklist_rep.cc | |
523 | memtable/hash_skiplist_rep.cc | |
7c673cae FG |
524 | memtable/skiplistrep.cc |
525 | memtable/vectorrep.cc | |
11fdf7f2 | 526 | memtable/write_buffer_manager.cc |
7c673cae FG |
527 | monitoring/histogram.cc |
528 | monitoring/histogram_windowing.cc | |
529 | monitoring/instrumented_mutex.cc | |
530 | monitoring/iostats_context.cc | |
531 | monitoring/perf_context.cc | |
532 | monitoring/perf_level.cc | |
533 | monitoring/statistics.cc | |
534 | monitoring/thread_status_impl.cc | |
535 | monitoring/thread_status_updater.cc | |
536 | monitoring/thread_status_util.cc | |
537 | monitoring/thread_status_util_debug.cc | |
538 | options/cf_options.cc | |
539 | options/db_options.cc | |
540 | options/options.cc | |
541 | options/options_helper.cc | |
542 | options/options_parser.cc | |
543 | options/options_sanity_check.cc | |
544 | port/stack_trace.cc | |
545 | table/adaptive_table_factory.cc | |
546 | table/block.cc | |
547 | table/block_based_filter_block.cc | |
548 | table/block_based_table_builder.cc | |
549 | table/block_based_table_factory.cc | |
550 | table/block_based_table_reader.cc | |
551 | table/block_builder.cc | |
11fdf7f2 | 552 | table/block_fetcher.cc |
7c673cae FG |
553 | table/block_prefix_index.cc |
554 | table/bloom_block.cc | |
555 | table/cuckoo_table_builder.cc | |
556 | table/cuckoo_table_factory.cc | |
557 | table/cuckoo_table_reader.cc | |
11fdf7f2 TL |
558 | table/data_block_hash_index.cc |
559 | table/data_block_footer.cc | |
7c673cae FG |
560 | table/flush_block_policy.cc |
561 | table/format.cc | |
562 | table/full_filter_block.cc | |
563 | table/get_context.cc | |
564 | table/index_builder.cc | |
565 | table/iterator.cc | |
566 | table/merging_iterator.cc | |
567 | table/meta_blocks.cc | |
568 | table/partitioned_filter_block.cc | |
569 | table/persistent_cache_helper.cc | |
570 | table/plain_table_builder.cc | |
571 | table/plain_table_factory.cc | |
572 | table/plain_table_index.cc | |
573 | table/plain_table_key_coding.cc | |
574 | table/plain_table_reader.cc | |
575 | table/sst_file_writer.cc | |
576 | table/table_properties.cc | |
577 | table/two_level_iterator.cc | |
578 | tools/db_bench_tool.cc | |
579 | tools/dump/db_dump_tool.cc | |
580 | tools/ldb_cmd.cc | |
581 | tools/ldb_tool.cc | |
582 | tools/sst_dump_tool.cc | |
11fdf7f2 | 583 | tools/trace_analyzer_tool.cc |
7c673cae FG |
584 | util/arena.cc |
585 | util/auto_roll_logger.cc | |
586 | util/bloom.cc | |
587 | util/coding.cc | |
588 | util/compaction_job_stats_impl.cc | |
589 | util/comparator.cc | |
11fdf7f2 | 590 | util/compression_context_cache.cc |
7c673cae FG |
591 | util/concurrent_arena.cc |
592 | util/crc32c.cc | |
593 | util/delete_scheduler.cc | |
594 | util/dynamic_bloom.cc | |
595 | util/event_logger.cc | |
596 | util/file_reader_writer.cc | |
597 | util/file_util.cc | |
598 | util/filename.cc | |
599 | util/filter_policy.cc | |
600 | util/hash.cc | |
601 | util/log_buffer.cc | |
602 | util/murmurhash.cc | |
603 | util/random.cc | |
604 | util/rate_limiter.cc | |
605 | util/slice.cc | |
606 | util/sst_file_manager_impl.cc | |
607 | util/status.cc | |
7c673cae FG |
608 | util/string_util.cc |
609 | util/sync_point.cc | |
11fdf7f2 | 610 | util/sync_point_impl.cc |
7c673cae FG |
611 | util/testutil.cc |
612 | util/thread_local.cc | |
613 | util/threadpool_imp.cc | |
11fdf7f2 | 614 | util/trace_replay.cc |
7c673cae FG |
615 | util/transaction_test_util.cc |
616 | util/xxhash.cc | |
617 | utilities/backupable/backupable_db.cc | |
11fdf7f2 | 618 | utilities/blob_db/blob_compaction_filter.cc |
7c673cae | 619 | utilities/blob_db/blob_db.cc |
11fdf7f2 TL |
620 | utilities/blob_db/blob_db_impl.cc |
621 | utilities/blob_db/blob_db_impl_filesnapshot.cc | |
622 | utilities/blob_db/blob_dump_tool.cc | |
623 | utilities/blob_db/blob_file.cc | |
624 | utilities/blob_db/blob_log_reader.cc | |
625 | utilities/blob_db/blob_log_writer.cc | |
626 | utilities/blob_db/blob_log_format.cc | |
627 | utilities/cassandra/cassandra_compaction_filter.cc | |
628 | utilities/cassandra/format.cc | |
629 | utilities/cassandra/merge_operator.cc | |
7c673cae FG |
630 | utilities/checkpoint/checkpoint_impl.cc |
631 | utilities/col_buf_decoder.cc | |
632 | utilities/col_buf_encoder.cc | |
633 | utilities/column_aware_encoding_util.cc | |
634 | utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc | |
635 | utilities/date_tiered/date_tiered_db_impl.cc | |
11fdf7f2 | 636 | utilities/debug.cc |
7c673cae FG |
637 | utilities/document/document_db.cc |
638 | utilities/document/json_document.cc | |
639 | utilities/document/json_document_builder.cc | |
640 | utilities/env_mirror.cc | |
641 | utilities/env_timed.cc | |
642 | utilities/geodb/geodb_impl.cc | |
643 | utilities/leveldb_options/leveldb_options.cc | |
644 | utilities/lua/rocks_lua_compaction_filter.cc | |
645 | utilities/memory/memory_util.cc | |
11fdf7f2 | 646 | utilities/merge_operators/bytesxor.cc |
7c673cae FG |
647 | utilities/merge_operators/max.cc |
648 | utilities/merge_operators/put.cc | |
649 | utilities/merge_operators/string_append/stringappend.cc | |
650 | utilities/merge_operators/string_append/stringappend2.cc | |
651 | utilities/merge_operators/uint64add.cc | |
652 | utilities/option_change_migration/option_change_migration.cc | |
653 | utilities/options/options_util.cc | |
654 | utilities/persistent_cache/block_cache_tier.cc | |
655 | utilities/persistent_cache/block_cache_tier_file.cc | |
656 | utilities/persistent_cache/block_cache_tier_metadata.cc | |
657 | utilities/persistent_cache/persistent_cache_tier.cc | |
658 | utilities/persistent_cache/volatile_tier_impl.cc | |
659 | utilities/redis/redis_lists.cc | |
660 | utilities/simulator_cache/sim_cache.cc | |
661 | utilities/spatialdb/spatial_db.cc | |
662 | utilities/table_properties_collectors/compact_on_deletion_collector.cc | |
11fdf7f2 | 663 | utilities/trace/file_trace_reader_writer.cc |
7c673cae | 664 | utilities/transactions/optimistic_transaction_db_impl.cc |
11fdf7f2 TL |
665 | utilities/transactions/optimistic_transaction.cc |
666 | utilities/transactions/pessimistic_transaction.cc | |
667 | utilities/transactions/pessimistic_transaction_db.cc | |
668 | utilities/transactions/snapshot_checker.cc | |
7c673cae | 669 | utilities/transactions/transaction_base.cc |
7c673cae | 670 | utilities/transactions/transaction_db_mutex_impl.cc |
7c673cae FG |
671 | utilities/transactions/transaction_lock_mgr.cc |
672 | utilities/transactions/transaction_util.cc | |
11fdf7f2 TL |
673 | utilities/transactions/write_prepared_txn.cc |
674 | utilities/transactions/write_prepared_txn_db.cc | |
675 | utilities/transactions/write_unprepared_txn.cc | |
676 | utilities/transactions/write_unprepared_txn_db.cc | |
7c673cae FG |
677 | utilities/ttl/db_ttl_impl.cc |
678 | utilities/write_batch_with_index/write_batch_with_index.cc | |
679 | utilities/write_batch_with_index/write_batch_with_index_internal.cc | |
680 | $<TARGET_OBJECTS:build_version>) | |
681 | ||
11fdf7f2 TL |
682 | if(HAVE_SSE42 AND NOT FORCE_SSE42) |
683 | if(NOT MSVC) | |
684 | set_source_files_properties( | |
685 | util/crc32c.cc | |
686 | PROPERTIES COMPILE_FLAGS "-msse4.2 -mpclmul") | |
687 | endif() | |
688 | endif() | |
689 | ||
690 | if(HAVE_POWER8) | |
691 | list(APPEND SOURCES | |
692 | util/crc32c_ppc.c | |
693 | util/crc32c_ppc_asm.S) | |
694 | endif(HAVE_POWER8) | |
695 | ||
7c673cae FG |
696 | if(WIN32) |
697 | list(APPEND SOURCES | |
698 | port/win/io_win.cc | |
699 | port/win/env_win.cc | |
700 | port/win/env_default.cc | |
701 | port/win/port_win.cc | |
702 | port/win/win_logger.cc | |
11fdf7f2 TL |
703 | port/win/win_thread.cc) |
704 | ||
705 | if(WITH_XPRESS) | |
706 | list(APPEND SOURCES | |
7c673cae | 707 | port/win/xpress_win.cc) |
11fdf7f2 TL |
708 | endif() |
709 | ||
710 | if(WITH_JEMALLOC) | |
711 | list(APPEND SOURCES | |
712 | port/win/win_jemalloc.cc) | |
713 | endif() | |
714 | ||
7c673cae FG |
715 | else() |
716 | list(APPEND SOURCES | |
717 | port/port_posix.cc | |
718 | env/env_posix.cc | |
719 | env/io_posix.cc) | |
720 | endif() | |
721 | ||
11fdf7f2 TL |
722 | set(ROCKSDB_STATIC_LIB rocksdb${ARTIFACT_SUFFIX}) |
723 | set(ROCKSDB_SHARED_LIB rocksdb-shared${ARTIFACT_SUFFIX}) | |
724 | set(ROCKSDB_IMPORT_LIB ${ROCKSDB_SHARED_LIB}) | |
725 | ||
726 | option(WITH_LIBRADOS "Build with librados" OFF) | |
727 | if(WITH_LIBRADOS) | |
728 | list(APPEND SOURCES | |
729 | utilities/env_librados.cc) | |
730 | list(APPEND THIRDPARTY_LIBS rados) | |
731 | endif() | |
732 | ||
7c673cae FG |
733 | if(WIN32) |
734 | set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib) | |
7c673cae FG |
735 | set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) |
736 | else() | |
11fdf7f2 | 737 | set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT}) |
7c673cae FG |
738 | set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) |
739 | ||
740 | add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES}) | |
741 | target_link_libraries(${ROCKSDB_SHARED_LIB} | |
742 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) | |
743 | set_target_properties(${ROCKSDB_SHARED_LIB} PROPERTIES | |
744 | LINKER_LANGUAGE CXX | |
745 | VERSION ${ROCKSDB_VERSION} | |
746 | SOVERSION ${ROCKSDB_VERSION_MAJOR} | |
747 | CXX_STANDARD 11 | |
748 | OUTPUT_NAME "rocksdb") | |
749 | endif() | |
750 | ||
7c673cae FG |
751 | add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES}) |
752 | target_link_libraries(${ROCKSDB_STATIC_LIB} | |
753 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) | |
754 | ||
755 | if(WIN32) | |
756 | add_library(${ROCKSDB_IMPORT_LIB} SHARED ${SOURCES}) | |
757 | target_link_libraries(${ROCKSDB_IMPORT_LIB} | |
758 | ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) | |
759 | set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES | |
760 | COMPILE_DEFINITIONS "ROCKSDB_DLL;ROCKSDB_LIBRARY_EXPORTS") | |
761 | if(MSVC) | |
762 | set_target_properties(${ROCKSDB_STATIC_LIB} PROPERTIES | |
763 | COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_STATIC_LIB}.pdb") | |
764 | set_target_properties(${ROCKSDB_IMPORT_LIB} PROPERTIES | |
765 | COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/${ROCKSDB_IMPORT_LIB}.pdb") | |
766 | endif() | |
767 | endif() | |
768 | ||
769 | option(WITH_JNI "build with JNI" OFF) | |
770 | if(WITH_JNI OR JNI) | |
771 | message(STATUS "JNI library is enabled") | |
772 | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/java) | |
773 | else() | |
774 | message(STATUS "JNI library is disabled") | |
775 | endif() | |
776 | ||
11fdf7f2 TL |
777 | # Installation and packaging |
778 | if(WIN32) | |
779 | option(ROCKSDB_INSTALL_ON_WINDOWS "Enable install target on Windows" OFF) | |
780 | endif() | |
781 | if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS) | |
782 | if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) | |
783 | if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") | |
784 | # Change default installation prefix on Linux to /usr | |
785 | set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Install path prefix, prepended onto install directories." FORCE) | |
786 | endif() | |
787 | endif() | |
788 | ||
789 | include(GNUInstallDirs) | |
790 | include(CMakePackageConfigHelpers) | |
791 | ||
792 | set(package_config_destination ${CMAKE_INSTALL_LIBDIR}/cmake/rocksdb) | |
793 | ||
794 | configure_package_config_file( | |
795 | ${CMAKE_CURRENT_LIST_DIR}/cmake/RocksDBConfig.cmake.in RocksDBConfig.cmake | |
796 | INSTALL_DESTINATION ${package_config_destination} | |
797 | ) | |
798 | ||
799 | write_basic_package_version_file( | |
800 | RocksDBConfigVersion.cmake | |
801 | VERSION ${ROCKSDB_VERSION} | |
802 | COMPATIBILITY SameMajorVersion | |
803 | ) | |
804 | ||
805 | install(DIRECTORY include/rocksdb COMPONENT devel DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") | |
806 | ||
807 | install( | |
808 | TARGETS ${ROCKSDB_STATIC_LIB} | |
809 | EXPORT RocksDBTargets | |
810 | COMPONENT devel | |
811 | ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
812 | INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" | |
813 | ) | |
814 | ||
815 | install( | |
816 | TARGETS ${ROCKSDB_SHARED_LIB} | |
817 | EXPORT RocksDBTargets | |
818 | COMPONENT runtime | |
819 | RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" | |
820 | LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" | |
821 | INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" | |
822 | ) | |
823 | ||
824 | install( | |
825 | EXPORT RocksDBTargets | |
826 | COMPONENT devel | |
827 | DESTINATION ${package_config_destination} | |
828 | NAMESPACE RocksDB:: | |
829 | ) | |
830 | ||
831 | install( | |
832 | FILES | |
833 | ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfig.cmake | |
834 | ${CMAKE_CURRENT_BINARY_DIR}/RocksDBConfigVersion.cmake | |
835 | COMPONENT devel | |
836 | DESTINATION ${package_config_destination} | |
837 | ) | |
838 | endif() | |
839 | ||
840 | option(WITH_TESTS "build with tests" ON) | |
841 | if(WITH_TESTS) | |
842 | set(TESTS | |
7c673cae FG |
843 | cache/cache_test.cc |
844 | cache/lru_cache_test.cc | |
845 | db/column_family_test.cc | |
846 | db/compact_files_test.cc | |
847 | db/compaction_iterator_test.cc | |
848 | db/compaction_job_stats_test.cc | |
849 | db/compaction_job_test.cc | |
850 | db/compaction_picker_test.cc | |
851 | db/comparator_db_test.cc | |
852 | db/corruption_test.cc | |
853 | db/cuckoo_table_db_test.cc | |
854 | db/db_basic_test.cc | |
11fdf7f2 | 855 | db/db_blob_index_test.cc |
7c673cae FG |
856 | db/db_block_cache_test.cc |
857 | db/db_bloom_filter_test.cc | |
858 | db/db_compaction_filter_test.cc | |
859 | db/db_compaction_test.cc | |
860 | db/db_dynamic_level_test.cc | |
861 | db/db_flush_test.cc | |
862 | db/db_inplace_update_test.cc | |
863 | db/db_io_failure_test.cc | |
864 | db/db_iter_test.cc | |
11fdf7f2 | 865 | db/db_iter_stress_test.cc |
7c673cae FG |
866 | db/db_iterator_test.cc |
867 | db/db_log_iter_test.cc | |
868 | db/db_memtable_test.cc | |
869 | db/db_merge_operator_test.cc | |
870 | db/db_options_test.cc | |
871 | db/db_properties_test.cc | |
872 | db/db_range_del_test.cc | |
873 | db/db_sst_test.cc | |
874 | db/db_statistics_test.cc | |
875 | db/db_table_properties_test.cc | |
876 | db/db_tailing_iter_test.cc | |
877 | db/db_test.cc | |
878 | db/db_test2.cc | |
879 | db/db_universal_compaction_test.cc | |
880 | db/db_wal_test.cc | |
11fdf7f2 | 881 | db/db_write_test.cc |
7c673cae FG |
882 | db/dbformat_test.cc |
883 | db/deletefile_test.cc | |
11fdf7f2 TL |
884 | db/error_handler_test.cc |
885 | db/obsolete_files_test.cc | |
7c673cae FG |
886 | db/external_sst_file_basic_test.cc |
887 | db/external_sst_file_test.cc | |
888 | db/fault_injection_test.cc | |
889 | db/file_indexer_test.cc | |
890 | db/filename_test.cc | |
891 | db/flush_job_test.cc | |
892 | db/listener_test.cc | |
893 | db/log_test.cc | |
894 | db/manual_compaction_test.cc | |
895 | db/memtable_list_test.cc | |
896 | db/merge_helper_test.cc | |
897 | db/merge_test.cc | |
898 | db/options_file_test.cc | |
899 | db/perf_context_test.cc | |
900 | db/plain_table_db_test.cc | |
901 | db/prefix_test.cc | |
902 | db/repair_test.cc | |
903 | db/table_properties_collector_test.cc | |
904 | db/version_builder_test.cc | |
905 | db/version_edit_test.cc | |
906 | db/version_set_test.cc | |
907 | db/wal_manager_test.cc | |
908 | db/write_batch_test.cc | |
909 | db/write_callback_test.cc | |
910 | db/write_controller_test.cc | |
911 | env/env_basic_test.cc | |
912 | env/env_test.cc | |
913 | env/mock_env_test.cc | |
914 | memtable/inlineskiplist_test.cc | |
915 | memtable/skiplist_test.cc | |
11fdf7f2 | 916 | memtable/write_buffer_manager_test.cc |
7c673cae FG |
917 | monitoring/histogram_test.cc |
918 | monitoring/iostats_context_test.cc | |
919 | monitoring/statistics_test.cc | |
920 | options/options_settable_test.cc | |
921 | options/options_test.cc | |
922 | table/block_based_filter_block_test.cc | |
923 | table/block_test.cc | |
11fdf7f2 | 924 | table/cleanable_test.cc |
7c673cae FG |
925 | table/cuckoo_table_builder_test.cc |
926 | table/cuckoo_table_reader_test.cc | |
11fdf7f2 | 927 | table/data_block_hash_index_test.cc |
7c673cae FG |
928 | table/full_filter_block_test.cc |
929 | table/merger_test.cc | |
930 | table/table_test.cc | |
931 | tools/ldb_cmd_test.cc | |
932 | tools/reduce_levels_test.cc | |
933 | tools/sst_dump_test.cc | |
11fdf7f2 | 934 | tools/trace_analyzer_test.cc |
7c673cae FG |
935 | util/arena_test.cc |
936 | util/auto_roll_logger_test.cc | |
937 | util/autovector_test.cc | |
938 | util/bloom_test.cc | |
939 | util/coding_test.cc | |
940 | util/crc32c_test.cc | |
941 | util/delete_scheduler_test.cc | |
942 | util/dynamic_bloom_test.cc | |
943 | util/event_logger_test.cc | |
944 | util/file_reader_writer_test.cc | |
945 | util/filelock_test.cc | |
11fdf7f2 | 946 | util/hash_test.cc |
7c673cae FG |
947 | util/heap_test.cc |
948 | util/rate_limiter_test.cc | |
11fdf7f2 | 949 | util/repeatable_thread_test.cc |
7c673cae | 950 | util/slice_transform_test.cc |
11fdf7f2 | 951 | util/timer_queue_test.cc |
7c673cae FG |
952 | util/thread_list_test.cc |
953 | util/thread_local_test.cc | |
954 | utilities/backupable/backupable_db_test.cc | |
955 | utilities/blob_db/blob_db_test.cc | |
11fdf7f2 TL |
956 | utilities/cassandra/cassandra_functional_test.cc |
957 | utilities/cassandra/cassandra_format_test.cc | |
958 | utilities/cassandra/cassandra_row_merge_test.cc | |
959 | utilities/cassandra/cassandra_serialize_test.cc | |
7c673cae FG |
960 | utilities/checkpoint/checkpoint_test.cc |
961 | utilities/column_aware_encoding_test.cc | |
962 | utilities/date_tiered/date_tiered_test.cc | |
963 | utilities/document/document_db_test.cc | |
964 | utilities/document/json_document_test.cc | |
965 | utilities/geodb/geodb_test.cc | |
966 | utilities/lua/rocks_lua_test.cc | |
967 | utilities/memory/memory_test.cc | |
968 | utilities/merge_operators/string_append/stringappend_test.cc | |
969 | utilities/object_registry_test.cc | |
970 | utilities/option_change_migration/option_change_migration_test.cc | |
971 | utilities/options/options_util_test.cc | |
972 | utilities/persistent_cache/hash_table_test.cc | |
973 | utilities/persistent_cache/persistent_cache_test.cc | |
974 | utilities/redis/redis_lists_test.cc | |
975 | utilities/spatialdb/spatial_db_test.cc | |
11fdf7f2 | 976 | utilities/simulator_cache/sim_cache_test.cc |
7c673cae FG |
977 | utilities/table_properties_collectors/compact_on_deletion_collector_test.cc |
978 | utilities/transactions/optimistic_transaction_test.cc | |
979 | utilities/transactions/transaction_test.cc | |
11fdf7f2 TL |
980 | utilities/transactions/write_prepared_transaction_test.cc |
981 | utilities/transactions/write_unprepared_transaction_test.cc | |
7c673cae FG |
982 | utilities/ttl/ttl_test.cc |
983 | utilities/write_batch_with_index/write_batch_with_index_test.cc | |
11fdf7f2 TL |
984 | ) |
985 | if(WITH_LIBRADOS) | |
986 | list(APPEND TESTS utilities/env_librados_test.cc) | |
987 | endif() | |
7c673cae | 988 | |
11fdf7f2 TL |
989 | set(BENCHMARKS |
990 | cache/cache_bench.cc | |
991 | memtable/memtablerep_bench.cc | |
992 | db/range_del_aggregator_bench.cc | |
993 | tools/db_bench.cc | |
994 | table/table_reader_bench.cc | |
995 | utilities/column_aware_encoding_exp.cc | |
996 | utilities/persistent_cache/hash_table_bench.cc) | |
997 | add_library(testharness OBJECT util/testharness.cc) | |
998 | foreach(sourcefile ${BENCHMARKS}) | |
7c673cae FG |
999 | get_filename_component(exename ${sourcefile} NAME_WE) |
1000 | add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile} | |
1001 | $<TARGET_OBJECTS:testharness>) | |
11fdf7f2 TL |
1002 | target_link_libraries(${exename}${ARTIFACT_SUFFIX} gtest ${LIBS}) |
1003 | endforeach(sourcefile ${BENCHMARKS}) | |
1004 | ||
1005 | # For test util library that is build only in DEBUG mode | |
1006 | # and linked to tests. Add test only code that is not #ifdefed for Release here. | |
1007 | set(TESTUTIL_SOURCE | |
1008 | db/db_test_util.cc | |
1009 | monitoring/thread_status_updater_debug.cc | |
1010 | table/mock_table.cc | |
1011 | util/fault_injection_test_env.cc | |
1012 | utilities/cassandra/test_utils.cc | |
1013 | ) | |
1014 | # test utilities are only build in debug | |
1015 | enable_testing() | |
1016 | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | |
1017 | set(TESTUTILLIB testutillib${ARTIFACT_SUFFIX}) | |
1018 | add_library(${TESTUTILLIB} STATIC ${TESTUTIL_SOURCE}) | |
1019 | if(MSVC) | |
1020 | set_target_properties(${TESTUTILLIB} PROPERTIES COMPILE_FLAGS "/Fd${CMAKE_CFG_INTDIR}/testutillib${ARTIFACT_SUFFIX}.pdb") | |
1021 | endif() | |
1022 | set_target_properties(${TESTUTILLIB} | |
1023 | PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 | |
1024 | EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 | |
1025 | EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 | |
1026 | ) | |
1027 | ||
1028 | # Tests are excluded from Release builds | |
1029 | set(TEST_EXES ${TESTS}) | |
1030 | ||
1031 | foreach(sourcefile ${TEST_EXES}) | |
1032 | get_filename_component(exename ${sourcefile} NAME_WE) | |
1033 | add_executable(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} ${sourcefile} | |
1034 | $<TARGET_OBJECTS:testharness>) | |
1035 | set_target_properties(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} | |
1036 | PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 | |
1037 | EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 | |
1038 | EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 | |
1039 | OUTPUT_NAME ${exename}${ARTIFACT_SUFFIX} | |
1040 | ) | |
1041 | target_link_libraries(${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX} testutillib${ARTIFACT_SUFFIX} gtest ${LIBS}) | |
1042 | if(NOT "${exename}" MATCHES "db_sanity_test") | |
1043 | add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX}) | |
1044 | add_dependencies(check ${CMAKE_PROJECT_NAME}_${exename}${ARTIFACT_SUFFIX}) | |
1045 | endif() | |
1046 | endforeach(sourcefile ${TEST_EXES}) | |
1047 | ||
1048 | # C executables must link to a shared object | |
1049 | set(C_TESTS db/c_test.c) | |
1050 | set(C_TEST_EXES ${C_TESTS}) | |
1051 | ||
1052 | foreach(sourcefile ${C_TEST_EXES}) | |
1053 | string(REPLACE ".c" "" exename ${sourcefile}) | |
1054 | string(REGEX REPLACE "^((.+)/)+" "" exename ${exename}) | |
1055 | add_executable(${exename}${ARTIFACT_SUFFIX} ${sourcefile}) | |
1056 | set_target_properties(${exename}${ARTIFACT_SUFFIX} | |
1057 | PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD_RELEASE 1 | |
1058 | EXCLUDE_FROM_DEFAULT_BUILD_MINRELEASE 1 | |
1059 | EXCLUDE_FROM_DEFAULT_BUILD_RELWITHDEBINFO 1 | |
1060 | ) | |
1061 | target_link_libraries(${exename}${ARTIFACT_SUFFIX} ${ROCKSDB_IMPORT_LIB} testutillib${ARTIFACT_SUFFIX}) | |
7c673cae FG |
1062 | add_test(NAME ${exename} COMMAND ${exename}${ARTIFACT_SUFFIX}) |
1063 | add_dependencies(check ${exename}${ARTIFACT_SUFFIX}) | |
11fdf7f2 TL |
1064 | endforeach(sourcefile ${C_TEST_EXES}) |
1065 | endif() | |
1066 | ||
1067 | option(WITH_TOOLS "build with tools" ON) | |
1068 | if(WITH_TOOLS) | |
1069 | add_subdirectory(tools) | |
7c673cae | 1070 | endif() |