diff options
Diffstat (limited to 'storage/rocksdb/CMakeLists.txt')
-rw-r--r-- | storage/rocksdb/CMakeLists.txt | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt new file mode 100644 index 00000000..50ff1df7 --- /dev/null +++ b/storage/rocksdb/CMakeLists.txt @@ -0,0 +1,307 @@ +# TODO: Copyrights + +IF(PLUGIN_ROCKSDB STREQUAL "NO") + ADD_FEATURE_INFO(ROCKSDB "OFF" "Storage Engine") + RETURN() +ENDIF() + +SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB server" PARENT_SCOPE) +SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed +at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE) + +MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-range-loop-construct) + +MACRO(SKIP_ROCKSDB_PLUGIN msg) + MESSAGE_ONCE(SKIP_ROCKSDB_PLUGIN "Can't build rocksdb engine - ${msg}") + ADD_FEATURE_INFO(ROCKSDB "OFF" "Storage Engine") + RETURN() +ENDMACRO() + +IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/CMakeLists.txt") + SKIP_ROCKSDB_PLUGIN("Missing CMakeLists.txt in rocksdb directory. Try \"git submodule update\".") +ENDIF() + +CHECK_LIBRARY_EXISTS(rt timer_delete "" HAVE_TIMER_DELETE) +IF (HAVE_TIMER_DELETE) + ADD_DEFINITIONS(-DHAVE_TIMER_DELETE) +ENDIF(HAVE_TIMER_DELETE) + +CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU) +IF(HAVE_SCHED_GETCPU) + ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1 -DROCKSDB_SCHED_GETCPU_PRESENT) +ENDIF() + +IF(WITH_VALGRIND) + ADD_DEFINITIONS(-DROCKSDB_VALGRIND_RUN=1) +ENDIF() + +ADD_DEFINITIONS(-Duint64_t=u_int64_t) +ADD_DEFINITIONS(-Duint32_t=u_int32_t) +ADD_DEFINITIONS(-Duint16_t=u_int16_t) +ADD_DEFINITIONS(-Duint8_t=u_int8_t) + +# We've had our builders hang during the build process. This prevents MariaRocks +# to be built on 32 bit intel OS kernels. +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i[36]86") + SKIP_ROCKSDB_PLUGIN("Intel 32 bit not supported.") +ENDIF() + +# Due to retrieved data being incorrect endian +include(TestBigEndian) +test_big_endian(BIG_ENDIAN) +if(BIG_ENDIAN) + SKIP_ROCKSDB_PLUGIN("Big Endian not supported.") +endif() + +# +# Also, disable building on 32-bit Windows +# +IF (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 4) + SKIP_ROCKSDB_PLUGIN("32-Bit Windows are temporarily disabled") +ENDIF() +IF(MSVC_ARM64) + SKIP_ROCKSDB_PLUGIN("Windows ARM64 not supported") +ENDIF() + +# +# Also, disable on ARM64 when not Linux +# Requires submodule update to v6.16.3 +# containing commit https://github.com/facebook/rocksdb/commit/ee4bd4780b321ddb5f92a0f4eb956f2a2ebd60dc +# +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") + SKIP_ROCKSDB_PLUGIN("ARM64 disabled on all except Linux") +ENDIF() + +# This plugin needs recent C++ compilers (it is using C++11 features) +# Skip build for the old compilers +SET(CXX11_FLAGS) +SET(OLD_COMPILER_MSG "requires c++11 -capable compiler (minimal supported versions are g++ 4.8, clang 3.3, VS2015)") + +IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + IF (GCC_VERSION VERSION_LESS 4.8) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() + SET(CXX11_FLAGS "-std=c++11") + IF (GCC_VERSION VERSION_LESS 5.0) + SET(CXX11_FLAGS "-std=c++11 -Wno-missing-field-initializers") + ENDIF() +ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + IF ((CMAKE_CXX_COMPILER_VERSION AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3) OR + (CLANG_VERSION_STRING AND CLANG_VERSION_STRING VERSION_LESS 3.3)) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() + SET(CXX11_FLAGS "-std=c++11 -stdlib=libstdc++") + IF(MSVC) + # clang-cl does not work yet + SKIP_ROCKSDB_PLUGIN("Clang-cl is not supported") + ENDIF() +ELSEIF(MSVC) + IF (MSVC_VERSION LESS 1900) + SKIP_ROCKSDB_PLUGIN("${OLD_COMPILER_MSG}") + ENDIF() +ELSE() + SKIP_ROCKSDB_PLUGIN("Compiler not supported") +ENDIF() + +IF(CMAKE_VERSION GREATER 3.0) + SET(CMAKE_CXX_STANDARD 11) +ELSEIF(CXX11_FLAGS) + ADD_DEFINITIONS(${CXX11_FLAGS}) +ENDIF() + +SET(ROCKSDB_SE_SOURCES + rdb_mariadb_server_port.cc + rdb_mariadb_server_port.h + ha_rocksdb.cc + ha_rocksdb.h + rdb_i_s.cc + rdb_i_s.h + rdb_io_watchdog.h + rdb_io_watchdog.cc + rdb_mutex_wrapper.cc + rdb_mutex_wrapper.h + rdb_index_merge.cc + rdb_index_merge.h + properties_collector.cc + properties_collector.h + rdb_datadic.cc + rdb_datadic.h + rdb_cf_manager.cc + rdb_cf_manager.h + rdb_utils.cc rdb_utils.h + rdb_threads.cc + rdb_threads.h + rdb_psi.h + rdb_psi.cc + rdb_sst_info.cc + rdb_sst_info.h + rdb_converter.cc + rdb_converter.h +) + +# MariaDB: the following is added in build_rocksdb.cmake, when appropriate: +# This is a strong requirement coming from RocksDB. No conditional checks here. +#ADD_DEFINITIONS(-DROCKSDB_PLATFORM_POSIX -DROCKSDB_LIB_IO_POSIX +#) + +if (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) + SET(ATOMIC_EXTRA_LIBS -latomic) +else() + SET(ATOMIC_EXTRA_LIBS) +endif() + +# don't use compression providers, there are standalone executables below +GET_PROPERTY(dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) +LIST(REMOVE_ITEM dirs ${CMAKE_SOURCE_DIR}/include/providers) +SET_PROPERTY(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "${dirs}") + +MYSQL_ADD_PLUGIN(rocksdb ${ROCKSDB_SE_SOURCES} MODULE_ONLY STORAGE_ENGINE + LINK_LIBRARIES ${ATOMIC_EXTRA_LIBS} + COMPONENT rocksdb-engine) + +IF(NOT TARGET rocksdb) + # Bail out if compilation with rocksdb engine is not requested + RETURN() +ENDIF() + +CHECK_CXX_SOURCE_COMPILES(" +#if defined(_MSC_VER) && !defined(__thread) +#define __thread __declspec(thread) +#endif +int main() { + static __thread int tls; + tls=0; + return tls; +} +" HAVE_THREAD_LOCAL) +if(HAVE_THREAD_LOCAL) + ADD_DEFINITIONS(-DROCKSDB_SUPPORT_THREAD_LOCAL) +else() + MESSAGE(SEND_ERROR "The compiler failed the check for ROCKSDB_SUPPORT_THREAD_LOCAL. " + "MyRocks requires that feature.") +endif() + +INCLUDE(build_rocksdb.cmake) + +ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib + ha_rocksdb_proto.h + logger.h + rdb_comparator.h + rdb_cf_options.cc + rdb_cf_options.h + event_listener.cc + event_listener.h + rdb_perf_context.cc + rdb_perf_context.h + rdb_buff.h + rdb_mariadb_port.h + nosql_access.cc nosql_access.h +) + +ADD_DEPENDENCIES(rocksdb_aux_lib GenError) + +# MARIAROCKS-TODO: how to properly depend on -lrt ? +TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY}) +if (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + TARGET_LINK_LIBRARIES(rocksdb_aux_lib -lrt) +endif() +TARGET_LINK_LIBRARIES(rocksdb_aux_lib ${ATOMIC_EXTRA_LIBS}) + +# IF (WITH_JEMALLOC) +# FIND_LIBRARY(JEMALLOC_LIBRARY +# NAMES libjemalloc${PIC_EXT}.a jemalloc +# HINTS ${WITH_JEMALLOC}/lib) +# SET(rocksdb_static_libs ${rocksdb_static_libs} +# ${JEMALLOC_LIBRARY}) +# ADD_DEFINITIONS(-DROCKSDB_JEMALLOC) +# ADD_DEFINITIONS(-DROCKSDB_MALLOC_USABLE_SIZE) +# ENDIF() + +# MariaDB: Q: why does the upstream add libunwind for a particular +# storage engine? +#IF (WITH_UNWIND) +# FIND_LIBRARY(UNWIND_LIBRARY +# NAMES libunwind${PIC_EXT}.a unwind +# HINTS ${WITH_UNWIND}/lib) +# SET(rocksdb_static_libs ${rocksdb_static_libs} +# ${UNWIND_LIBRARY}) +#ENDIF() + + +TARGET_LINK_LIBRARIES(rocksdb rocksdb_aux_lib) + +CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU) +IF(HAVE_SCHED_GETCPU) + ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1) +# MariaDB: don't do this: +# ADD_DEFINITIONS(-DZSTD_STATIC_LINKING_ONLY) +ENDIF() + +IF (WITH_TBB) + FIND_LIBRARY(TBB_LIBRARY + NAMES libtbb${PIC_EXT}.a tbb + HINTS ${WITH_TBB}/lib) + SET(rocksdb_static_libs ${rocksdb_static_libs} + ${TBB_LIBRARY}) + ADD_DEFINITIONS(-DTBB) +ENDIF() + +# +# MariaDB: Dynamic plugin build is not suitable with unittest ATM +# +#IF(WITH_UNIT_TESTS AND WITH_EMBEDDED_SERVER) +# ADD_SUBDIRECTORY(unittest) +#ENDIF() + +if (UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt") +endif() + + +ADD_LIBRARY(rocksdb_tools STATIC + rocksdb/tools/ldb_tool.cc + rocksdb/tools/ldb_cmd.cc + rocksdb/tools/sst_dump_tool.cc +) + +MYSQL_ADD_EXECUTABLE(sst_dump rocksdb/tools/sst_dump.cc COMPONENT rocksdb-engine) +TARGET_LINK_LIBRARIES(sst_dump rocksdblib) + +MYSQL_ADD_EXECUTABLE(mariadb-ldb tools/mysql_ldb.cc COMPONENT rocksdb-engine) +TARGET_LINK_LIBRARIES(mariadb-ldb rocksdb_tools rocksdb_aux_lib dbug) + +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/myrocks_hotbackup.py + ${CMAKE_CURRENT_BINARY_DIR}/myrocks_hotbackup @ONLY) +INSTALL_SCRIPT(${CMAKE_CURRENT_BINARY_DIR}/myrocks_hotbackup COMPONENT rocksdb-engine) + +IF(MSVC) + # RocksDB, the storage engine, overdoes "const" by adding + # additional const qualifiers to parameters of the overriden virtual functions + # This creates a lot of warnings, that we silence here. + ADD_DEFINITIONS(/wd4373) + # Some checks in C++ runtime that make debug build much slower + ADD_DEFINITIONS(-D_ITERATOR_DEBUG_LEVEL=0) + + # Temporarily disable "conversion from size_t .." warnings + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267") + ENDIF() +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET_TARGET_PROPERTIES(rocksdb_tools sst_dump mariadb-ldb PROPERTIES COMPILE_FLAGS "-Wno-error") +ENDIF() + +IF(GIT_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/.git) + EXECUTE_PROCESS( + COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rocksdb + OUTPUT_VARIABLE OUT RESULT_VARIABLE RES) + IF(RES EQUAL 0) + STRING(REGEX REPLACE "\n$" "" ROCKSDB_GIT_HASH "${OUT}") + ENDIF() +ENDIF() +IF(ROCKSDB_GIT_HASH OR + (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/rdb_source_revision.h)) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/rdb_source_revision.h.in + ${CMAKE_CURRENT_BINARY_DIR}/rdb_source_revision.h ) +ENDIF() |