]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | function(build_rocksdb) |
2 | set(rocksdb_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON) | |
3 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_GFLAGS=OFF) | |
4 | ||
9f95a23c TL |
5 | # cmake doesn't properly handle arguments containing ";", such as |
6 | # CMAKE_PREFIX_PATH, for which reason we'll have to use some other separator. | |
7 | string(REPLACE ";" "!" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}") | |
8 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}) | |
9 | if(CMAKE_TOOLCHAIN_FILE) | |
10 | list(APPEND rocksdb_CMAKE_ARGS | |
f67539c2 | 11 | -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) |
9f95a23c TL |
12 | endif() |
13 | ||
11fdf7f2 TL |
14 | if(ALLOCATOR STREQUAL "jemalloc") |
15 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_JEMALLOC=ON) | |
16 | list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES JeMalloc::JeMalloc) | |
17 | endif() | |
18 | ||
9f95a23c | 19 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) |
11fdf7f2 TL |
20 | |
21 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_SNAPPY=${SNAPPY_FOUND}) | |
22 | if(SNAPPY_FOUND) | |
23 | list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES snappy::snappy) | |
24 | endif() | |
25 | # libsnappy is a C++ library, we need to force rocksdb to link against | |
26 | # libsnappy statically. | |
27 | if(SNAPPY_FOUND AND WITH_STATIC_LIBSTDCXX) | |
28 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_SNAPPY_STATIC_LIB=ON) | |
29 | endif() | |
30 | ||
31 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_LZ4=${LZ4_FOUND}) | |
32 | if(LZ4_FOUND) | |
33 | list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES LZ4::LZ4) | |
9f95a23c | 34 | # When cross compiling, cmake may fail to locate lz4. |
f67539c2 TL |
35 | list(APPEND rocksdb_CMAKE_ARGS -Dlz4_INCLUDE_DIRS=${LZ4_INCLUDE_DIR}) |
36 | list(APPEND rocksdb_CMAKE_ARGS -Dlz4_LIBRARIES=${LZ4_LIBRARY}) | |
11fdf7f2 TL |
37 | endif() |
38 | ||
39 | list(APPEND rocksdb_CMAKE_ARGS -DWITH_ZLIB=${ZLIB_FOUND}) | |
40 | if(ZLIB_FOUND) | |
41 | list(APPEND rocksdb_INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) | |
42 | endif() | |
43 | ||
44 | list(APPEND rocksdb_CMAKE_ARGS -DPORTABLE=ON) | |
45 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_AR=${CMAKE_AR}) | |
46 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) | |
47 | list(APPEND rocksdb_CMAKE_ARGS -DFAIL_ON_WARNINGS=OFF) | |
48 | list(APPEND rocksdb_CMAKE_ARGS -DUSE_RTTI=1) | |
49 | CHECK_C_COMPILER_FLAG("-Wno-stringop-truncation" HAS_WARNING_STRINGOP_TRUNCATION) | |
50 | if(HAS_WARNING_STRINGOP_TRUNCATION) | |
9f95a23c TL |
51 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_C_FLAGS=-Wno-stringop-truncation) |
52 | endif() | |
53 | include(CheckCXXCompilerFlag) | |
54 | check_cxx_compiler_flag("-Wno-deprecated-copy" HAS_WARNING_DEPRECATED_COPY) | |
55 | if(HAS_WARNING_DEPRECATED_COPY) | |
56 | set(rocksdb_CXX_FLAGS -Wno-deprecated-copy) | |
57 | endif() | |
58 | check_cxx_compiler_flag("-Wno-pessimizing-move" HAS_WARNING_PESSIMIZING_MOVE) | |
59 | if(HAS_WARNING_PESSIMIZING_MOVE) | |
60 | set(rocksdb_CXX_FLAGS "${rocksdb_CXX_FLAGS} -Wno-pessimizing-move") | |
61 | endif() | |
62 | if(rocksdb_CXX_FLAGS) | |
63 | list(APPEND rocksdb_CMAKE_ARGS -DCMAKE_CXX_FLAGS='${rocksdb_CXX_FLAGS}') | |
11fdf7f2 TL |
64 | endif() |
65 | # we use an external project and copy the sources to bin directory to ensure | |
66 | # that object files are built outside of the source tree. | |
67 | include(ExternalProject) | |
68 | set(rocksdb_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb") | |
69 | set(rocksdb_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/rocksdb") | |
9f95a23c TL |
70 | set(rocksdb_LIBRARY "${rocksdb_BINARY_DIR}/librocksdb.a") |
71 | if(CMAKE_MAKE_PROGRAM MATCHES "make") | |
72 | # try to inherit command line arguments passed by parent "make" job | |
73 | set(make_cmd $(MAKE) rocksdb) | |
74 | else() | |
75 | set(make_cmd ${CMAKE_COMMAND} --build <BINARY_DIR> --target rocksdb) | |
76 | endif() | |
77 | ||
11fdf7f2 TL |
78 | ExternalProject_Add(rocksdb_ext |
79 | SOURCE_DIR "${rocksdb_SOURCE_DIR}" | |
80 | CMAKE_ARGS ${rocksdb_CMAKE_ARGS} | |
81 | BINARY_DIR "${rocksdb_BINARY_DIR}" | |
9f95a23c | 82 | BUILD_COMMAND "${make_cmd}" |
9f95a23c | 83 | BUILD_BYPRODUCTS "${rocksdb_LIBRARY}" |
20effc67 | 84 | INSTALL_COMMAND "" |
9f95a23c | 85 | LIST_SEPARATOR !) |
11fdf7f2 TL |
86 | |
87 | add_library(RocksDB::RocksDB STATIC IMPORTED) | |
88 | add_dependencies(RocksDB::RocksDB rocksdb_ext) | |
89 | set(rocksdb_INCLUDE_DIR "${rocksdb_SOURCE_DIR}/include") | |
11fdf7f2 TL |
90 | foreach(ver "MAJOR" "MINOR" "PATCH") |
91 | file(STRINGS "${rocksdb_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE | |
92 | REGEX "^#define[ \t]+ROCKSDB_${ver}[ \t]+[0-9]+$") | |
93 | string(REGEX REPLACE "^#define[ \t]+ROCKSDB_${ver}[ \t]+([0-9]+)$" | |
94 | "\\1" ROCKSDB_VERSION_${ver} "${ROCKSDB_VER_${ver}_LINE}") | |
95 | unset(ROCKDB_VER_${ver}_LINE) | |
96 | endforeach() | |
97 | set(rocksdb_VERSION_STRING | |
98 | "${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}") | |
99 | set_target_properties(RocksDB::RocksDB PROPERTIES | |
100 | INTERFACE_INCLUDE_DIRECTORIES "${rocksdb_INCLUDE_DIR}" | |
101 | INTERFACE_LINK_LIBRARIES "${rocksdb_INTERFACE_LINK_LIBRARIES}" | |
102 | IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" | |
103 | IMPORTED_LOCATION "${rocksdb_LIBRARY}" | |
104 | VERSION "${rocksdb_VERSION_STRING}") | |
105 | endfunction() |