CMakeLists.txt 60 KB

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