419 rader
15 KiB

Add move constructor to Status. This will result in smaller code generation when Status instances are passed around. Benchmarks don't indicate a significant change either way. CPU: 48 * Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz CPUCache: 30720 KB Keys: 16 bytes each Values: 100 bytes each (50 bytes after compression) Entries: 1000000 RawSize: 110.6 MB (estimated) FileSize: 62.9 MB (estimated) Baseline: fillseq : 3.589 micros/op; 30.8 MB/s fillsync : 4165.299 micros/op; 0.0 MB/s (1000 ops) fillrandom : 5.864 micros/op; 18.9 MB/s overwrite : 7.830 micros/op; 14.1 MB/s readrandom : 5.534 micros/op; (1000000 of 1000000 found) readrandom : 4.292 micros/op; (1000000 of 1000000 found) readseq : 0.312 micros/op; 354.1 MB/s readreverse : 0.501 micros/op; 220.8 MB/s compact : 886211.000 micros/op; readrandom : 3.518 micros/op; (1000000 of 1000000 found) readseq : 0.251 micros/op; 441.2 MB/s readreverse : 0.456 micros/op; 242.4 MB/s fill100K : 1329.723 micros/op; 71.7 MB/s (1000 ops) crc32c : 1.976 micros/op; 1976.7 MB/s (4K per op) snappycomp : 4.705 micros/op; 830.2 MB/s (output: 55.1%) snappyuncomp : 0.958 micros/op; 4079.1 MB/s acquireload : 0.727 micros/op; (each op is 1000 loads) New: fillseq : 3.129 micros/op; 35.4 MB/s fillsync : 2748.099 micros/op; 0.0 MB/s (1000 ops) fillrandom : 5.394 micros/op; 20.5 MB/s overwrite : 7.253 micros/op; 15.3 MB/s readrandom : 5.655 micros/op; (1000000 of 1000000 found) readrandom : 4.425 micros/op; (1000000 of 1000000 found) readseq : 0.298 micros/op; 371.3 MB/s readreverse : 0.508 micros/op; 217.9 MB/s compact : 885842.000 micros/op; readrandom : 3.545 micros/op; (1000000 of 1000000 found) readseq : 0.252 micros/op; 438.2 MB/s readreverse : 0.425 micros/op; 260.2 MB/s fill100K : 1418.347 micros/op; 67.2 MB/s (1000 ops) crc32c : 1.987 micros/op; 1966.0 MB/s (4K per op) snappycomp : 4.767 micros/op; 819.4 MB/s (output: 55.1%) snappyuncomp : 0.916 micros/op; 4264.9 MB/s acquireload : 0.665 micros/op; (each op is 1000 loads) ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=194002392
6 år sedan
  1. # Copyright 2017 The LevelDB Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file. See the AUTHORS file for names of contributors.
  4. cmake_minimum_required(VERSION 3.9)
  5. project(leveldb VERSION 1.21.0 LANGUAGES C CXX)
  6. # This project can use C11, but will gracefully decay down to C89.
  7. set(CMAKE_C_STANDARD 11)
  8. set(CMAKE_C_STANDARD_REQUIRED OFF)
  9. set(CMAKE_C_EXTENSIONS OFF)
  10. # This project requires C++11.
  11. set(CMAKE_CXX_STANDARD 11)
  12. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  13. set(CMAKE_CXX_EXTENSIONS OFF)
  14. option(LEVELDB_BUILD_TESTS "Build LevelDB's unit tests" ON)
  15. option(LEVELDB_BUILD_BENCHMARKS "Build LevelDB's benchmarks" ON)
  16. option(LEVELDB_INSTALL "Install LevelDB's header and library" ON)
  17. include(TestBigEndian)
  18. test_big_endian(LEVELDB_IS_BIG_ENDIAN)
  19. include(CheckIncludeFile)
  20. check_include_file("unistd.h" HAVE_UNISTD_H)
  21. include(CheckLibraryExists)
  22. check_library_exists(crc32c crc32c_value "" HAVE_CRC32C)
  23. check_library_exists(snappy snappy_compress "" HAVE_SNAPPY)
  24. check_library_exists(tcmalloc malloc "" HAVE_TCMALLOC)
  25. include(CheckSymbolExists)
  26. check_symbol_exists(fdatasync "unistd.h" HAVE_FDATASYNC)
  27. include(CheckCXXSourceCompiles)
  28. # Test whether -Wthread-safety is available. See
  29. # https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
  30. # -Werror is necessary because unknown attributes only generate warnings.
  31. set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
  32. list(APPEND CMAKE_REQUIRED_FLAGS -Werror -Wthread-safety)
  33. check_cxx_source_compiles("
  34. struct __attribute__((lockable)) Lock {
  35. void Acquire() __attribute__((exclusive_lock_function()));
  36. void Release() __attribute__((unlock_function()));
  37. };
  38. struct ThreadSafeType {
  39. Lock lock_;
  40. int data_ __attribute__((guarded_by(lock_)));
  41. };
  42. int main() { return 0; }
  43. " HAVE_CLANG_THREAD_SAFETY)
  44. set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
  45. # Test whether C++17 __has_include is available.
  46. check_cxx_source_compiles("
  47. #if defined(__has_include) && __has_include(<string>)
  48. #include <string>
  49. #endif
  50. int main() { std::string str; return 0; }
  51. " HAVE_CXX17_HAS_INCLUDE)
  52. set(LEVELDB_PUBLIC_INCLUDE_DIR "include/leveldb")
  53. set(LEVELDB_PORT_CONFIG_DIR "include/port")
  54. configure_file(
  55. "${PROJECT_SOURCE_DIR}/port/port_config.h.in"
  56. "${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h"
  57. )
  58. include_directories(
  59. "${PROJECT_BINARY_DIR}/include"
  60. "${PROJECT_SOURCE_DIR}"
  61. )
  62. if(BUILD_SHARED_LIBS)
  63. # Only export LEVELDB_EXPORT symbols from the shared library.
  64. add_compile_options(-fvisibility=hidden)
  65. endif(BUILD_SHARED_LIBS)
  66. add_library(leveldb "")
  67. target_sources(leveldb
  68. PRIVATE
  69. "${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h"
  70. "${PROJECT_SOURCE_DIR}/db/builder.cc"
  71. "${PROJECT_SOURCE_DIR}/db/builder.h"
  72. "${PROJECT_SOURCE_DIR}/db/c.cc"
  73. "${PROJECT_SOURCE_DIR}/db/db_impl.cc"
  74. "${PROJECT_SOURCE_DIR}/db/db_impl.h"
  75. "${PROJECT_SOURCE_DIR}/db/db_iter.cc"
  76. "${PROJECT_SOURCE_DIR}/db/db_iter.h"
  77. "${PROJECT_SOURCE_DIR}/db/dbformat.cc"
  78. "${PROJECT_SOURCE_DIR}/db/dbformat.h"
  79. "${PROJECT_SOURCE_DIR}/db/dumpfile.cc"
  80. "${PROJECT_SOURCE_DIR}/db/filename.cc"
  81. "${PROJECT_SOURCE_DIR}/db/filename.h"
  82. "${PROJECT_SOURCE_DIR}/db/log_format.h"
  83. "${PROJECT_SOURCE_DIR}/db/log_reader.cc"
  84. "${PROJECT_SOURCE_DIR}/db/log_reader.h"
  85. "${PROJECT_SOURCE_DIR}/db/log_writer.cc"
  86. "${PROJECT_SOURCE_DIR}/db/log_writer.h"
  87. "${PROJECT_SOURCE_DIR}/db/memtable.cc"
  88. "${PROJECT_SOURCE_DIR}/db/memtable.h"
  89. "${PROJECT_SOURCE_DIR}/db/repair.cc"
  90. "${PROJECT_SOURCE_DIR}/db/skiplist.h"
  91. "${PROJECT_SOURCE_DIR}/db/snapshot.h"
  92. "${PROJECT_SOURCE_DIR}/db/table_cache.cc"
  93. "${PROJECT_SOURCE_DIR}/db/table_cache.h"
  94. "${PROJECT_SOURCE_DIR}/db/version_edit.cc"
  95. "${PROJECT_SOURCE_DIR}/db/version_edit.h"
  96. "${PROJECT_SOURCE_DIR}/db/version_set.cc"
  97. "${PROJECT_SOURCE_DIR}/db/version_set.h"
  98. "${PROJECT_SOURCE_DIR}/db/write_batch_internal.h"
  99. "${PROJECT_SOURCE_DIR}/db/write_batch.cc"
  100. "${PROJECT_SOURCE_DIR}/port/atomic_pointer.h"
  101. "${PROJECT_SOURCE_DIR}/port/port_stdcxx.h"
  102. "${PROJECT_SOURCE_DIR}/port/port.h"
  103. "${PROJECT_SOURCE_DIR}/port/thread_annotations.h"
  104. "${PROJECT_SOURCE_DIR}/table/block_builder.cc"
  105. "${PROJECT_SOURCE_DIR}/table/block_builder.h"
  106. "${PROJECT_SOURCE_DIR}/table/block.cc"
  107. "${PROJECT_SOURCE_DIR}/table/block.h"
  108. "${PROJECT_SOURCE_DIR}/table/filter_block.cc"
  109. "${PROJECT_SOURCE_DIR}/table/filter_block.h"
  110. "${PROJECT_SOURCE_DIR}/table/format.cc"
  111. "${PROJECT_SOURCE_DIR}/table/format.h"
  112. "${PROJECT_SOURCE_DIR}/table/iterator_wrapper.h"
  113. "${PROJECT_SOURCE_DIR}/table/iterator.cc"
  114. "${PROJECT_SOURCE_DIR}/table/merger.cc"
  115. "${PROJECT_SOURCE_DIR}/table/merger.h"
  116. "${PROJECT_SOURCE_DIR}/table/table_builder.cc"
  117. "${PROJECT_SOURCE_DIR}/table/table.cc"
  118. "${PROJECT_SOURCE_DIR}/table/two_level_iterator.cc"
  119. "${PROJECT_SOURCE_DIR}/table/two_level_iterator.h"
  120. "${PROJECT_SOURCE_DIR}/util/arena.cc"
  121. "${PROJECT_SOURCE_DIR}/util/arena.h"
  122. "${PROJECT_SOURCE_DIR}/util/bloom.cc"
  123. "${PROJECT_SOURCE_DIR}/util/cache.cc"
  124. "${PROJECT_SOURCE_DIR}/util/coding.cc"
  125. "${PROJECT_SOURCE_DIR}/util/coding.h"
  126. "${PROJECT_SOURCE_DIR}/util/comparator.cc"
  127. "${PROJECT_SOURCE_DIR}/util/crc32c.cc"
  128. "${PROJECT_SOURCE_DIR}/util/crc32c.h"
  129. "${PROJECT_SOURCE_DIR}/util/env.cc"
  130. "${PROJECT_SOURCE_DIR}/util/filter_policy.cc"
  131. "${PROJECT_SOURCE_DIR}/util/hash.cc"
  132. "${PROJECT_SOURCE_DIR}/util/hash.h"
  133. "${PROJECT_SOURCE_DIR}/util/logging.cc"
  134. "${PROJECT_SOURCE_DIR}/util/logging.h"
  135. "${PROJECT_SOURCE_DIR}/util/mutexlock.h"
  136. "${PROJECT_SOURCE_DIR}/util/options.cc"
  137. "${PROJECT_SOURCE_DIR}/util/random.h"
  138. "${PROJECT_SOURCE_DIR}/util/status.cc"
  139. # Only CMake 3.3+ supports PUBLIC sources in targets exported by "install".
  140. $<$<VERSION_GREATER:CMAKE_VERSION,3.2>:PUBLIC>
  141. "${LEVELDB_PUBLIC_INCLUDE_DIR}/c.h"
  142. "${LEVELDB_PUBLIC_INCLUDE_DIR}/cache.h"
  143. "${LEVELDB_PUBLIC_INCLUDE_DIR}/comparator.h"
  144. "${LEVELDB_PUBLIC_INCLUDE_DIR}/db.h"
  145. "${LEVELDB_PUBLIC_INCLUDE_DIR}/dumpfile.h"
  146. "${LEVELDB_PUBLIC_INCLUDE_DIR}/env.h"
  147. "${LEVELDB_PUBLIC_INCLUDE_DIR}/export.h"
  148. "${LEVELDB_PUBLIC_INCLUDE_DIR}/filter_policy.h"
  149. "${LEVELDB_PUBLIC_INCLUDE_DIR}/iterator.h"
  150. "${LEVELDB_PUBLIC_INCLUDE_DIR}/options.h"
  151. "${LEVELDB_PUBLIC_INCLUDE_DIR}/slice.h"
  152. "${LEVELDB_PUBLIC_INCLUDE_DIR}/status.h"
  153. "${LEVELDB_PUBLIC_INCLUDE_DIR}/table_builder.h"
  154. "${LEVELDB_PUBLIC_INCLUDE_DIR}/table.h"
  155. "${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h"
  156. )
  157. # POSIX code is specified separately so we can leave it out in the future.
  158. target_sources(leveldb
  159. PRIVATE
  160. "${PROJECT_SOURCE_DIR}/util/env_posix.cc"
  161. "${PROJECT_SOURCE_DIR}/util/posix_logger.h"
  162. )
  163. # MemEnv is not part of the interface and could be pulled to a separate library.
  164. target_sources(leveldb
  165. PRIVATE
  166. "${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.cc"
  167. "${PROJECT_SOURCE_DIR}/helpers/memenv/memenv.h"
  168. )
  169. target_include_directories(leveldb
  170. PUBLIC
  171. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
  172. $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  173. )
  174. target_compile_definitions(leveldb
  175. PRIVATE
  176. # Used by include/export.h when building shared libraries.
  177. LEVELDB_COMPILE_LIBRARY
  178. # Used by port/port.h.
  179. LEVELDB_PLATFORM_POSIX=1
  180. )
  181. if (NOT HAVE_CXX17_HAS_INCLUDE)
  182. target_compile_definitions(leveldb
  183. PRIVATE
  184. LEVELDB_HAS_PORT_CONFIG_H=1
  185. )
  186. endif(NOT HAVE_CXX17_HAS_INCLUDE)
  187. if(BUILD_SHARED_LIBS)
  188. target_compile_definitions(leveldb
  189. PUBLIC
  190. # Used by include/export.h.
  191. LEVELDB_SHARED_LIBRARY
  192. )
  193. endif(BUILD_SHARED_LIBS)
  194. if(HAVE_CLANG_THREAD_SAFETY)
  195. target_compile_options(leveldb
  196. PUBLIC
  197. -Werror -Wthread-safety)
  198. endif(HAVE_CLANG_THREAD_SAFETY)
  199. if(HAVE_CRC32C)
  200. target_link_libraries(leveldb crc32c)
  201. endif(HAVE_CRC32C)
  202. if(HAVE_SNAPPY)
  203. target_link_libraries(leveldb snappy)
  204. endif(HAVE_SNAPPY)
  205. if(HAVE_TCMALLOC)
  206. target_link_libraries(leveldb tcmalloc)
  207. endif(HAVE_TCMALLOC)
  208. # Needed by port_stdcxx.h
  209. find_package(Threads REQUIRED)
  210. target_link_libraries(leveldb Threads::Threads)
  211. add_executable(leveldbutil
  212. "${PROJECT_SOURCE_DIR}/db/leveldbutil.cc"
  213. )
  214. target_link_libraries(leveldbutil leveldb)
  215. if(LEVELDB_BUILD_TESTS)
  216. enable_testing()
  217. function(leveldb_test test_file)
  218. get_filename_component(test_target_name "${test_file}" NAME_WE)
  219. add_executable("${test_target_name}" "")
  220. target_sources("${test_target_name}"
  221. PRIVATE
  222. "${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h"
  223. "${PROJECT_SOURCE_DIR}/util/testharness.cc"
  224. "${PROJECT_SOURCE_DIR}/util/testharness.h"
  225. "${PROJECT_SOURCE_DIR}/util/testutil.cc"
  226. "${PROJECT_SOURCE_DIR}/util/testutil.h"
  227. "${test_file}"
  228. )
  229. target_link_libraries("${test_target_name}" leveldb)
  230. target_compile_definitions("${test_target_name}"
  231. PRIVATE
  232. LEVELDB_PLATFORM_POSIX=1
  233. )
  234. if (NOT HAVE_CXX17_HAS_INCLUDE)
  235. target_compile_definitions("${test_target_name}"
  236. PRIVATE
  237. LEVELDB_HAS_PORT_CONFIG_H=1
  238. )
  239. endif(NOT HAVE_CXX17_HAS_INCLUDE)
  240. add_test(NAME "${test_target_name}" COMMAND "${test_target_name}")
  241. endfunction(leveldb_test)
  242. leveldb_test("${PROJECT_SOURCE_DIR}/db/c_test.c")
  243. leveldb_test("${PROJECT_SOURCE_DIR}/db/fault_injection_test.cc")
  244. leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue178_test.cc")
  245. leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue200_test.cc")
  246. leveldb_test("${PROJECT_SOURCE_DIR}/util/env_test.cc")
  247. leveldb_test("${PROJECT_SOURCE_DIR}/util/status_test.cc")
  248. if(NOT BUILD_SHARED_LIBS)
  249. leveldb_test("${PROJECT_SOURCE_DIR}/db/autocompact_test.cc")
  250. leveldb_test("${PROJECT_SOURCE_DIR}/db/corruption_test.cc")
  251. leveldb_test("${PROJECT_SOURCE_DIR}/db/db_test.cc")
  252. leveldb_test("${PROJECT_SOURCE_DIR}/db/dbformat_test.cc")
  253. leveldb_test("${PROJECT_SOURCE_DIR}/db/filename_test.cc")
  254. leveldb_test("${PROJECT_SOURCE_DIR}/db/log_test.cc")
  255. leveldb_test("${PROJECT_SOURCE_DIR}/db/recovery_test.cc")
  256. leveldb_test("${PROJECT_SOURCE_DIR}/db/skiplist_test.cc")
  257. leveldb_test("${PROJECT_SOURCE_DIR}/db/version_edit_test.cc")
  258. leveldb_test("${PROJECT_SOURCE_DIR}/db/version_set_test.cc")
  259. leveldb_test("${PROJECT_SOURCE_DIR}/db/write_batch_test.cc")
  260. leveldb_test("${PROJECT_SOURCE_DIR}/helpers/memenv/memenv_test.cc")
  261. leveldb_test("${PROJECT_SOURCE_DIR}/table/filter_block_test.cc")
  262. leveldb_test("${PROJECT_SOURCE_DIR}/table/table_test.cc")
  263. leveldb_test("${PROJECT_SOURCE_DIR}/util/arena_test.cc")
  264. leveldb_test("${PROJECT_SOURCE_DIR}/util/bloom_test.cc")
  265. leveldb_test("${PROJECT_SOURCE_DIR}/util/cache_test.cc")
  266. leveldb_test("${PROJECT_SOURCE_DIR}/util/coding_test.cc")
  267. leveldb_test("${PROJECT_SOURCE_DIR}/util/crc32c_test.cc")
  268. leveldb_test("${PROJECT_SOURCE_DIR}/util/hash_test.cc")
  269. leveldb_test("${PROJECT_SOURCE_DIR}/util/logging_test.cc")
  270. # TODO(costan): This test also uses
  271. # "${PROJECT_SOURCE_DIR}/util/env_posix_test_helper.h"
  272. leveldb_test("${PROJECT_SOURCE_DIR}/util/env_posix_test.cc")
  273. endif(NOT BUILD_SHARED_LIBS)
  274. endif(LEVELDB_BUILD_TESTS)
  275. if(LEVELDB_BUILD_BENCHMARKS)
  276. function(leveldb_benchmark bench_file)
  277. get_filename_component(bench_target_name "${bench_file}" NAME_WE)
  278. add_executable("${bench_target_name}" "")
  279. target_sources("${bench_target_name}"
  280. PRIVATE
  281. "${PROJECT_BINARY_DIR}/${LEVELDB_PORT_CONFIG_DIR}/port_config.h"
  282. "${PROJECT_SOURCE_DIR}/util/histogram.cc"
  283. "${PROJECT_SOURCE_DIR}/util/histogram.h"
  284. "${PROJECT_SOURCE_DIR}/util/testharness.cc"
  285. "${PROJECT_SOURCE_DIR}/util/testharness.h"
  286. "${PROJECT_SOURCE_DIR}/util/testutil.cc"
  287. "${PROJECT_SOURCE_DIR}/util/testutil.h"
  288. "${bench_file}"
  289. )
  290. target_link_libraries("${bench_target_name}" leveldb)
  291. target_compile_definitions("${bench_target_name}"
  292. PRIVATE
  293. LEVELDB_PLATFORM_POSIX=1
  294. )
  295. if (NOT HAVE_CXX17_HAS_INCLUDE)
  296. target_compile_definitions("${bench_target_name}"
  297. PRIVATE
  298. LEVELDB_HAS_PORT_CONFIG_H=1
  299. )
  300. endif(NOT HAVE_CXX17_HAS_INCLUDE)
  301. endfunction(leveldb_benchmark)
  302. if(NOT BUILD_SHARED_LIBS)
  303. leveldb_benchmark("${PROJECT_SOURCE_DIR}/db/db_bench.cc")
  304. endif(NOT BUILD_SHARED_LIBS)
  305. check_library_exists(sqlite3 sqlite3_open "" HAVE_SQLITE3)
  306. if(HAVE_SQLITE3)
  307. leveldb_benchmark("${PROJECT_SOURCE_DIR}/doc/bench/db_bench_sqlite3.cc")
  308. target_link_libraries(db_bench_sqlite3 sqlite3)
  309. endif(HAVE_SQLITE3)
  310. # check_library_exists is insufficient here because the library names have
  311. # different manglings when compiled with clang or gcc, at least when installed
  312. # with Homebrew on Mac.
  313. set(OLD_CMAKE_REQURED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
  314. list(APPEND CMAKE_REQUIRED_LIBRARIES kyotocabinet)
  315. check_cxx_source_compiles("
  316. #include <kcpolydb.h>
  317. int main() {
  318. kyotocabinet::TreeDB* db = new kyotocabinet::TreeDB();
  319. delete db;
  320. return 0;
  321. }
  322. " HAVE_KYOTOCABINET)
  323. set(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQURED_LIBRARIES})
  324. if(HAVE_KYOTOCABINET)
  325. leveldb_benchmark("${PROJECT_SOURCE_DIR}/doc/bench/db_bench_tree_db.cc")
  326. target_link_libraries(db_bench_tree_db kyotocabinet)
  327. endif(HAVE_KYOTOCABINET)
  328. endif(LEVELDB_BUILD_BENCHMARKS)
  329. if(LEVELDB_INSTALL)
  330. include(GNUInstallDirs)
  331. install(TARGETS leveldb
  332. EXPORT leveldbTargets
  333. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  334. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  335. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  336. )
  337. install(
  338. FILES
  339. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/c.h"
  340. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/cache.h"
  341. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/comparator.h"
  342. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/db.h"
  343. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/dumpfile.h"
  344. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/env.h"
  345. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/export.h"
  346. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/filter_policy.h"
  347. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/iterator.h"
  348. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/options.h"
  349. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/slice.h"
  350. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/status.h"
  351. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/table_builder.h"
  352. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/table.h"
  353. "${PROJECT_SOURCE_DIR}/${LEVELDB_PUBLIC_INCLUDE_DIR}/write_batch.h"
  354. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/leveldb
  355. )
  356. include(CMakePackageConfigHelpers)
  357. write_basic_package_version_file(
  358. "${PROJECT_BINARY_DIR}/leveldbConfigVersion.cmake"
  359. COMPATIBILITY SameMajorVersion
  360. )
  361. install(
  362. EXPORT leveldbTargets
  363. NAMESPACE leveldb::
  364. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/leveldb"
  365. )
  366. install(
  367. FILES
  368. "${PROJECT_SOURCE_DIR}/cmake/leveldbConfig.cmake"
  369. "${PROJECT_BINARY_DIR}/leveldbConfigVersion.cmake"
  370. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/leveldb"
  371. )
  372. endif(LEVELDB_INSTALL)