leveldb.cmake raw

   1  # Copyright (c) 2023-present The Limenka developers
   2  # Distributed under the MIT software license, see the accompanying
   3  # file COPYING or https://opensource.org/license/mit/.
   4  
   5  # This file is part of the transition from Autotools to CMake. Once CMake
   6  # support has been merged we should switch to using the upstream CMake
   7  # buildsystem.
   8  
   9  include(CheckCXXSymbolExists)
  10  check_cxx_symbol_exists(F_FULLFSYNC "fcntl.h" HAVE_FULLFSYNC)
  11  
  12  add_library(leveldb STATIC EXCLUDE_FROM_ALL
  13    ${PROJECT_SOURCE_DIR}/src/leveldb/db/builder.cc
  14    ${PROJECT_SOURCE_DIR}/src/leveldb/db/db_impl.cc
  15    ${PROJECT_SOURCE_DIR}/src/leveldb/db/db_iter.cc
  16    ${PROJECT_SOURCE_DIR}/src/leveldb/db/dbformat.cc
  17    ${PROJECT_SOURCE_DIR}/src/leveldb/db/filename.cc
  18    ${PROJECT_SOURCE_DIR}/src/leveldb/db/log_reader.cc
  19    ${PROJECT_SOURCE_DIR}/src/leveldb/db/log_writer.cc
  20    ${PROJECT_SOURCE_DIR}/src/leveldb/db/memtable.cc
  21    ${PROJECT_SOURCE_DIR}/src/leveldb/db/repair.cc
  22    ${PROJECT_SOURCE_DIR}/src/leveldb/db/table_cache.cc
  23    ${PROJECT_SOURCE_DIR}/src/leveldb/db/version_edit.cc
  24    ${PROJECT_SOURCE_DIR}/src/leveldb/db/version_set.cc
  25    ${PROJECT_SOURCE_DIR}/src/leveldb/db/write_batch.cc
  26    ${PROJECT_SOURCE_DIR}/src/leveldb/table/block.cc
  27    ${PROJECT_SOURCE_DIR}/src/leveldb/table/block_builder.cc
  28    ${PROJECT_SOURCE_DIR}/src/leveldb/table/filter_block.cc
  29    ${PROJECT_SOURCE_DIR}/src/leveldb/table/format.cc
  30    ${PROJECT_SOURCE_DIR}/src/leveldb/table/iterator.cc
  31    ${PROJECT_SOURCE_DIR}/src/leveldb/table/merger.cc
  32    ${PROJECT_SOURCE_DIR}/src/leveldb/table/table.cc
  33    ${PROJECT_SOURCE_DIR}/src/leveldb/table/table_builder.cc
  34    ${PROJECT_SOURCE_DIR}/src/leveldb/table/two_level_iterator.cc
  35    ${PROJECT_SOURCE_DIR}/src/leveldb/util/arena.cc
  36    ${PROJECT_SOURCE_DIR}/src/leveldb/util/bloom.cc
  37    ${PROJECT_SOURCE_DIR}/src/leveldb/util/cache.cc
  38    ${PROJECT_SOURCE_DIR}/src/leveldb/util/coding.cc
  39    ${PROJECT_SOURCE_DIR}/src/leveldb/util/comparator.cc
  40    ${PROJECT_SOURCE_DIR}/src/leveldb/util/crc32c.cc
  41    ${PROJECT_SOURCE_DIR}/src/leveldb/util/env.cc
  42    $<$<NOT:$<BOOL:${WIN32}>>:${PROJECT_SOURCE_DIR}/src/leveldb/util/env_posix.cc>
  43    $<$<BOOL:${WIN32}>:${PROJECT_SOURCE_DIR}/src/leveldb/util/env_windows.cc>
  44    ${PROJECT_SOURCE_DIR}/src/leveldb/util/filter_policy.cc
  45    ${PROJECT_SOURCE_DIR}/src/leveldb/util/hash.cc
  46    ${PROJECT_SOURCE_DIR}/src/leveldb/util/logging.cc
  47    ${PROJECT_SOURCE_DIR}/src/leveldb/util/options.cc
  48    ${PROJECT_SOURCE_DIR}/src/leveldb/util/status.cc
  49    ${PROJECT_SOURCE_DIR}/src/leveldb/helpers/memenv/memenv.cc
  50  )
  51  
  52  target_compile_definitions(leveldb
  53    PRIVATE
  54      HAVE_SNAPPY=0
  55      HAVE_CRC32C=1
  56      HAVE_FDATASYNC=$<BOOL:${HAVE_FDATASYNC}>
  57      HAVE_FULLFSYNC=$<BOOL:${HAVE_FULLFSYNC}>
  58      HAVE_O_CLOEXEC=$<BOOL:${HAVE_O_CLOEXEC}>
  59      FALLTHROUGH_INTENDED=[[fallthrough]]
  60      $<$<NOT:$<BOOL:${WIN32}>>:LEVELDB_PLATFORM_POSIX>
  61      $<$<BOOL:${WIN32}>:LEVELDB_PLATFORM_WINDOWS>
  62      $<$<BOOL:${WIN32}>:_UNICODE;UNICODE>
  63  )
  64  if(MINGW)
  65    target_compile_definitions(leveldb
  66      PRIVATE
  67        __USE_MINGW_ANSI_STDIO=1
  68    )
  69  endif()
  70  
  71  target_include_directories(leveldb
  72    PRIVATE
  73      $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb>
  74    PUBLIC
  75      $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/include>
  76      $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/leveldb/helpers/memenv>
  77  )
  78  
  79  add_library(nowarn_leveldb_interface INTERFACE)
  80  if(MSVC)
  81    target_compile_options(nowarn_leveldb_interface INTERFACE
  82      /wd4722
  83    )
  84    target_compile_definitions(nowarn_leveldb_interface INTERFACE
  85      _CRT_NONSTDC_NO_WARNINGS
  86    )
  87  else()
  88    try_append_cxx_flags("-Wconditional-uninitialized" TARGET nowarn_leveldb_interface SKIP_LINK
  89      IF_CHECK_PASSED "-Wno-conditional-uninitialized"
  90    )
  91    try_append_cxx_flags("-Wsuggest-override" TARGET nowarn_leveldb_interface SKIP_LINK
  92      IF_CHECK_PASSED "-Wno-suggest-override"
  93    )
  94  endif()
  95  
  96  target_link_libraries(leveldb PRIVATE
  97    core_interface
  98    nowarn_leveldb_interface
  99    crc32c
 100  )
 101  
 102  set_target_properties(leveldb PROPERTIES
 103    EXPORT_COMPILE_COMMANDS OFF
 104  )
 105