-include(CheckCXXSourceRuns)
-
function(do_build_rocksdb)
set(ROCKSDB_CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
list(APPEND ROCKSDB_CMAKE_ARGS -DWITH_GFLAGS=OFF)
ALWAYS 1)
endfunction()
-function(check_aligned_alloc)
- set(SAVE_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
- set(CMAKE_REQUIRED_FLAGS "-std=c++11 -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
- if(LINUX)
- set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -D_GNU_SOURCE")
- endif()
- set(SAVE_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
- set(CMAKE_REQUIRED_LIBRARIES ${GPERFTOOLS_TCMALLOC_LIBRARY})
- CHECK_CXX_SOURCE_RUNS("
-#include <stdlib.h>
-
-int main()
-{
-#if defined(_ISOC11_SOURCE)
- void* buf = aligned_alloc(64, 42);
- free(buf);
-#endif
-}
-" HAVE_ALIGNED_ALLOC)
- set(CMAKE_REQUIRED_FLAGS ${SAVE_CMAKE_REQUIRED_FLAGS})
- set(CMAKE_REQUIRED_LIBRARIES ${SAVE_CMAKE_REQUIRED_LIBRARIES})
-
- if(NOT HAVE_ALIGNED_ALLOC)
- message(SEND_ERROR
- "Incompatible tcmalloc v${TCMALLOC_VERSION_STRING} and rocksdb "
- "v${ROCKSDB_VERSION_STRING}, please install gperf-tools 2.5 (not 2.5.93) "
- "or >= 2.6.2, or switch to another allocator using "
- "'cmake -DALLOCATOR=libc'.")
- endif()
-endfunction()
-
macro(build_rocksdb)
do_build_rocksdb()
add_library(rocksdb STATIC IMPORTED)
endforeach()
set(ROCKSDB_VERSION_STRING
"${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}")
-
- if(ALLOCATOR MATCHES "tcmalloc(_minimal)?")
- # see http://tracker.ceph.com/issues/21422
- if(ROCKSDB_VERSION_STRING VERSION_GREATER 5.7 AND
- TCMALLOC_VERSION_STRING VERSION_GREATER 2.5 AND
- TCMALLOC_VERSION_STRING VERSION_LESS 2.6.2)
- check_aligned_alloc()
- endif()
- endif()
endmacro()