CMakeLists.txt 40 KB

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