diff options
Diffstat (limited to 'storage/tokudb/CMakeLists.txt')
-rw-r--r-- | storage/tokudb/CMakeLists.txt | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt new file mode 100644 index 00000000..bc7e5826 --- /dev/null +++ b/storage/tokudb/CMakeLists.txt @@ -0,0 +1,174 @@ +SET(TOKUDB_VERSION 5.6.49-89.0) +# PerconaFT only supports x86-64 and cmake-2.8.9+ +IF(WIN32) + # tokudb never worked there + RETURN() +ELSEIF(CMAKE_VERSION VERSION_LESS "2.8.9") + MESSAGE(STATUS "CMake 2.8.9 or higher is required by TokuDB") +ELSEIF(NOT HAVE_DLOPEN) + MESSAGE(STATUS "dlopen is required by TokuDB") +ELSEIF(PLUGIN_PERFSCHEMA MATCHES "^NO$") + MESSAGE(STATUS "Performance Schema is required by TokuDB") + RETURN() +ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR + CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") +# tokudb requires F_NOCACHE or O_DIRECT, and designated initializers +CHECK_CXX_SOURCE_COMPILES( +" +#include <fcntl.h> +struct a {int b; int c; }; +struct a d = { .b=1, .c=2 }; +#if defined(O_DIRECT) || defined(F_NOCACHE) +int main() { return 0; } +#else +#error +#endif +" TOKUDB_OK) +ENDIF() + +IF(NOT TOKUDB_OK) + RETURN() +ENDIF() + +SET(TOKUDB_SOURCES + ha_tokudb.cc + tokudb_background.cc + tokudb_information_schema.cc + tokudb_sysvars.cc + tokudb_thread.cc + tokudb_dir_cmd.cc) +MYSQL_ADD_PLUGIN(tokudb ${TOKUDB_SOURCES} STORAGE_ENGINE MODULE_ONLY + DISABLED + COMPONENT tokudb-engine CONFIG ${CMAKE_CURRENT_BINARY_DIR}/tokudb.cnf) + +IF(NOT TARGET tokudb) + RETURN() +ENDIF() + +INCLUDE(jemalloc) +CHECK_JEMALLOC() + +IF(NOT LIBJEMALLOC) + MESSAGE(WARNING "TokuDB is enabled, but jemalloc is not. This configuration is not supported") +ELSEIF(LIBJEMALLOC STREQUAL jemalloc_pic) + CHECK_CXX_SOURCE_COMPILES( +" +#include <jemalloc/jemalloc.h> +#if JEMALLOC_VERSION_MAJOR < 5 +int main() { return 0; } +#else +#error +#endif +" JEMALLOC_OK) + IF (NOT JEMALLOC_OK) + MESSAGE(FATAL_ERROR "static jemalloc_pic.a can only be used up to jemalloc 4") + ENDIF() +ELSEIF(LIBJEMALLOC STREQUAL jemalloc) + FIND_LIBRARY(LIBJEMALLOC_SO jemalloc) + IF(NOT LIBJEMALLOC_SO) + MESSAGE(FATAL_ERROR "jemalloc is present, but cannot be found?") + ENDIF() + GET_FILENAME_COMPONENT(LIBJEMALLOC_PATH ${LIBJEMALLOC_SO} REALPATH CACHE) + + IF(RPM OR DEB) + UNSET(LIBJEMALLOC) + GET_DIRECTORY_PROPERTY(V DIRECTORY ${CMAKE_SOURCE_DIR} DEFINITION CPACK_RPM_tokudb-engine_PACKAGE_REQUIRES) + SET(CPACK_RPM_tokudb-engine_PACKAGE_REQUIRES "${V} jemalloc" PARENT_SCOPE) + ENDIF() + + IF(INSTALL_SYSCONFDIR) + SET(systemd_env "Environment=\"LD_PRELOAD=${LIBJEMALLOC_PATH}\"") + SET(cnf_malloc_lib "malloc-lib=${LIBJEMALLOC_PATH}") + CONFIGURE_FILE(tokudb.conf.in tokudb.conf @ONLY) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tokudb.conf + DESTINATION ${INSTALL_SYSCONFDIR}/systemd/system/mariadb.service.d/ + COMPONENT tokudb-engine) + ENDIF() +ENDIF() + +CONFIGURE_FILE(tokudb.cnf.in tokudb.cnf @ONLY) + +MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-shadow") +MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-vla" DEBUG) +MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-implicit-fallthrough") +MY_CHECK_AND_SET_COMPILER_FLAG("-Wno-cpp" DEBUG) + +############################################ +MARK_AS_ADVANCED(BUILDNAME) +MARK_AS_ADVANCED(BUILD_TESTING) +MARK_AS_ADVANCED(CMAKE_TOKUDB_REVISION) +MARK_AS_ADVANCED(LIBTOKUDB) +MARK_AS_ADVANCED(LIBTOKUPORTABILITY) +MARK_AS_ADVANCED(PROFILING) +MARK_AS_ADVANCED(SNAPPY_SOURCE_DIR) +MARK_AS_ADVANCED(TOKUDB_DATA) +MARK_AS_ADVANCED(TOKU_DEBUG_PARANOID) +MARK_AS_ADVANCED(USE_VALGRIND) +MARK_AS_ADVANCED(XZ_SOURCE_DIR) +MARK_AS_ADVANCED(gcc_ar) +MARK_AS_ADVANCED(gcc_ranlib) +############################################ + +# pick language dialect +MY_CHECK_AND_SET_COMPILER_FLAG(-std=c++11) + +SET(BUILD_TESTING OFF CACHE BOOL "") +SET(USE_VALGRIND OFF CACHE BOOL "") +SET(TOKU_DEBUG_PARANOID OFF CACHE BOOL "") + +# Enable TokuDB's TOKUDB_DEBUG in debug builds +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTOKUDB_DEBUG") + +IF(NOT DEFINED TOKUDB_VERSION) + IF(DEFINED ENV{TOKUDB_VERSION}) + SET(TOKUDB_VERSION $ENV{TOKUDB_VERSION}) + ENDIF() +ENDIF() +IF(DEFINED TOKUDB_VERSION) + ADD_DEFINITIONS("-DTOKUDB_VERSION=${TOKUDB_VERSION}") + IF (${TOKUDB_VERSION} MATCHES "^tokudb-([0-9]+)\\.([0-9]+)\\.([0-9]+.*)") + ADD_DEFINITIONS("-DTOKUDB_VERSION_MAJOR=${CMAKE_MATCH_1}") + ADD_DEFINITIONS("-DTOKUDB_VERSION_MINOR=${CMAKE_MATCH_2}") + ADD_DEFINITIONS("-DTOKUDB_VERSION_PATCH=${CMAKE_MATCH_3}") + ENDIF() +ENDIF() + +IF(DEFINED TOKUDB_NOPATCH_CONFIG) + ADD_DEFINITIONS("-DTOKUDB_NOPATCH_CONFIG=${TOKUDB_NOPATCH_CONFIG}") +ENDIF() + +MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-missing-format-attribute) +MY_CHECK_AND_SET_COMPILER_FLAG(-Wno-missing-field-initializers) + +IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/PerconaFT/") + IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ft-index/") + MESSAGE(FATAL_ERROR "Found both PerconaFT and ft-index sources. Don't know which to use.") + ENDIF () + SET(TOKU_FT_DIR_NAME "PerconaFT") + +ELSEIF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ft-index/") + MESSAGE(WARNING "Found ft-index sources, ft-index is deprecated and replaced with PerconaFT.") + SET(TOKU_FT_DIR_NAME "ft-index") +ELSE () + MESSAGE(FATAL_ERROR "Could not find PerconaFT sources.") +ENDIF () + +IF (WITH_VALGRIND) + SET(USE_VALGRIND "ON") +ENDIF () + +ADD_SUBDIRECTORY(${TOKU_FT_DIR_NAME}) +INCLUDE_DIRECTORIES(${TOKU_FT_DIR_NAME}) +INCLUDE_DIRECTORIES(${TOKU_FT_DIR_NAME}/portability) +INCLUDE_DIRECTORIES(${TOKU_FT_DIR_NAME}/util) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/${TOKU_FT_DIR_NAME}) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/${TOKU_FT_DIR_NAME}/buildheader) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/${TOKU_FT_DIR_NAME}/portability) + +TARGET_LINK_LIBRARIES(tokudb tokufractaltree_static tokuportability_static + ${ZLIB_LIBRARY} ${LIBJEMALLOC} stdc++) + +SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -flto -fuse-linker-plugin") +SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} -flto -fuse-linker-plugin") + +ADD_SUBDIRECTORY(man) |