作者: 谢瑞阳 10225101483 徐翔宇 10225101535
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

419 lines
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 years ago
  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)