mariadb/storage/tokudb/CMakeLists.txt

147 lines
5.3 KiB
Text
Raw Normal View History

2015-10-26 12:48:26 +01:00
SET(TOKUDB_VERSION 5.6.26-74.0)
# PerconaFT only supports x86-64 and cmake-2.8.9+
IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND
NOT CMAKE_VERSION VERSION_LESS "2.8.9")
CHECK_CXX_SOURCE_COMPILES(
"
struct a {int b; int c; };
struct a d = { .b=1, .c=2 };
int main() { return 0; }
" TOKUDB_OK)
ELSE()
IF(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
MESSAGE(WARNING "Not Intel 64 bit CPU")
ELSE()
MESSAGE(WARNING "Too old CMAKE VERSION. 2.8.9 or higher is required by TokuDB")
ENDIF()
ENDIF()
IF(NOT TOKUDB_OK OR WITHOUT_TOKUDB OR WITHOUT_TOKUDB_STORAGE_ENGINE)
MESSAGE(STATUS "TokuDB disabled")
cmake fixes for tokudb cmake/jemalloc.cmake: for dependencies to work, LIBJEMALLOC should be the target name, not the path storage/tokudb/CMakeLists.txt: * check the preconditions * disable bdb tests (compilation errors) * set variable, instead of SET_PROPERTY. same effect, but doesn't fail when a plugin is disabled (that is, a target does not exist) storage/tokudb/ft-index/CMakeLists.txt: cmake should not look into examples/ directory, there is hand-crafted examples/Makefile that cmake will overwrite storage/tokudb/ft-index/buildheader/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake: Libraries must be specified in the specific order, REMOVE_DUPLICATES cannot be used, because it destroys this order. (when OSLIBS contains "-lpthread -ljemalloc -lpthread", REMOVE_DUPLICATES makes it "-lpthread -ljemalloc". But a thread library *must* be *after* jemalloc) storage/tokudb/ft-index/cmake_modules/TokuSetupCTest.cmake: * 'which' might print errors to stderr, they are not important, shut them up * we don't have TOKUDB_DATA, no need to warn about it * don't configure_file into itself (with input=output) storage/tokudb/ft-index/cmake_modules/TokuThirdParty.cmake: jemalloc is built externally to tokudb/ft-index storage/tokudb/ft-index/ft/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/ft/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/locktree/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/portability/CMakeLists.txt: s/jemalloc/libjemalloc/ storage/tokudb/ft-index/portability/os_malloc.cc: unnecessary include file storage/tokudb/ft-index/portability/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/src/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/util/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/utils/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name
2013-09-09 13:57:22 +02:00
RETURN()
ENDIF()
IF(NOT LIBJEMALLOC)
MESSAGE(WARNING "TokuDB is enabled, but jemalloc is not. This configuration is not supported")
ENDIF()
2014-12-19 11:35:44 +01:00
IF (HAVE_WVLA)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-vla")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-vla")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wno-vla")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-vla")
ENDIF()
############################################
2013-11-13 23:03:48 +01:00
SET(TOKUDB_DEB_FILES "usr/lib/mysql/plugin/ha_tokudb.so\netc/mysql/conf.d/tokudb.cnf\nusr/bin/tokuftdump\nusr/share/doc/mariadb-server-10.0/README-TOKUDB\nusr/share/doc/mariadb-server-10.0/README.md" PARENT_SCOPE)
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)
cmake fixes for tokudb cmake/jemalloc.cmake: for dependencies to work, LIBJEMALLOC should be the target name, not the path storage/tokudb/CMakeLists.txt: * check the preconditions * disable bdb tests (compilation errors) * set variable, instead of SET_PROPERTY. same effect, but doesn't fail when a plugin is disabled (that is, a target does not exist) storage/tokudb/ft-index/CMakeLists.txt: cmake should not look into examples/ directory, there is hand-crafted examples/Makefile that cmake will overwrite storage/tokudb/ft-index/buildheader/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake: Libraries must be specified in the specific order, REMOVE_DUPLICATES cannot be used, because it destroys this order. (when OSLIBS contains "-lpthread -ljemalloc -lpthread", REMOVE_DUPLICATES makes it "-lpthread -ljemalloc". But a thread library *must* be *after* jemalloc) storage/tokudb/ft-index/cmake_modules/TokuSetupCTest.cmake: * 'which' might print errors to stderr, they are not important, shut them up * we don't have TOKUDB_DATA, no need to warn about it * don't configure_file into itself (with input=output) storage/tokudb/ft-index/cmake_modules/TokuThirdParty.cmake: jemalloc is built externally to tokudb/ft-index storage/tokudb/ft-index/ft/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/ft/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/locktree/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/portability/CMakeLists.txt: s/jemalloc/libjemalloc/ storage/tokudb/ft-index/portability/os_malloc.cc: unnecessary include file storage/tokudb/ft-index/portability/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/src/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/util/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/utils/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name
2013-09-09 13:57:22 +02:00
############################################
SET(BUILD_TESTING OFF CACHE BOOL "")
SET(USE_VALGRIND OFF CACHE BOOL "")
SET(TOKU_DEBUG_PARANOID OFF CACHE BOOL "")
IF(NOT DEFINED TOKUDB_VERSION)
IF(DEFINED ENV{TOKUDB_VERSION})
SET(TOKUDB_VERSION $ENV{TOKUDB_VERSION})
ENDIF()
ENDIF()
IF(DEFINED TOKUDB_VERSION)
2014-10-18 03:23:17 +02:00
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}")
2014-10-18 03:23:17 +02:00
ADD_DEFINITIONS("-DTOKUDB_VERSION_PATCH=${CMAKE_MATCH_3}")
ENDIF()
ENDIF()
2014-03-31 17:05:45 +02:00
IF(DEFINED TOKUDB_NOPATCH_CONFIG)
ADD_DEFINITIONS("-DTOKUDB_NOPATCH_CONFIG=${TOKUDB_NOPATCH_CONFIG}")
ENDIF()
IF(DEFINED TOKUDB_CHECK_JEMALLOC)
ADD_DEFINITIONS("-DTOKUDB_CHECK_JEMALLOC=${TOKUDB_CHECK_JEMALLOC}")
ENDIF()
## adds a compiler flag if the compiler supports it
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
macro(set_cflags_if_supported)
foreach(flag ${ARGN})
string(REGEX REPLACE "-" "_" temp_flag ${flag})
check_c_compiler_flag(${flag} HAVE_C_${temp_flag})
if (HAVE_C_${temp_flag})
set(CMAKE_C_FLAGS "${flag} ${CMAKE_C_FLAGS}")
endif ()
check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag})
if (HAVE_CXX_${temp_flag})
set(CMAKE_CXX_FLAGS "${flag} ${CMAKE_CXX_FLAGS}")
endif ()
endforeach(flag)
endmacro(set_cflags_if_supported)
macro(append_cflags_if_supported)
foreach(flag ${ARGN})
string(REGEX REPLACE "-" "_" temp_flag ${flag})
check_c_compiler_flag(${flag} HAVE_C_${temp_flag})
if (HAVE_C_${temp_flag})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
endif ()
check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag})
if (HAVE_CXX_${temp_flag})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
endif ()
endforeach(flag)
endmacro(append_cflags_if_supported)
set_cflags_if_supported(-Wno-missing-field-initializers)
append_cflags_if_supported(-Wno-vla)
2015-10-26 12:48:26 +01:00
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 ()
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)
SET(TOKUDB_PLUGIN_DYNAMIC "ha_tokudb")
SET(TOKUDB_SOURCES ha_tokudb.cc)
MYSQL_ADD_PLUGIN(tokudb ${TOKUDB_SOURCES} STORAGE_ENGINE MODULE_ONLY
2013-09-23 11:17:18 +02:00
LINK_LIBRARIES tokufractaltree_static tokuportability_static ${ZLIB_LIBRARY} stdc++)
cmake fixes for tokudb cmake/jemalloc.cmake: for dependencies to work, LIBJEMALLOC should be the target name, not the path storage/tokudb/CMakeLists.txt: * check the preconditions * disable bdb tests (compilation errors) * set variable, instead of SET_PROPERTY. same effect, but doesn't fail when a plugin is disabled (that is, a target does not exist) storage/tokudb/ft-index/CMakeLists.txt: cmake should not look into examples/ directory, there is hand-crafted examples/Makefile that cmake will overwrite storage/tokudb/ft-index/buildheader/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake: Libraries must be specified in the specific order, REMOVE_DUPLICATES cannot be used, because it destroys this order. (when OSLIBS contains "-lpthread -ljemalloc -lpthread", REMOVE_DUPLICATES makes it "-lpthread -ljemalloc". But a thread library *must* be *after* jemalloc) storage/tokudb/ft-index/cmake_modules/TokuSetupCTest.cmake: * 'which' might print errors to stderr, they are not important, shut them up * we don't have TOKUDB_DATA, no need to warn about it * don't configure_file into itself (with input=output) storage/tokudb/ft-index/cmake_modules/TokuThirdParty.cmake: jemalloc is built externally to tokudb/ft-index storage/tokudb/ft-index/ft/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/ft/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/locktree/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/portability/CMakeLists.txt: s/jemalloc/libjemalloc/ storage/tokudb/ft-index/portability/os_malloc.cc: unnecessary include file storage/tokudb/ft-index/portability/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/src/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/util/tests/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name storage/tokudb/ft-index/utils/CMakeLists.txt: the syntax is ADD_EXECUTABLE(target source) and "source" is the file name
2013-09-09 13:57:22 +02:00
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")
SET(CPACK_RPM_server_PACKAGE_OBSOLETES
2013-11-13 23:03:48 +01:00
"${CPACK_RPM_server_PACKAGE_OBSOLETES} MariaDB-tokudb-engine < 10.0.5" PARENT_SCOPE)
IF (INSTALL_SYSCONF2DIR)
INSTALL(FILES tokudb.cnf DESTINATION ${INSTALL_SYSCONF2DIR} COMPONENT Server)
ENDIF(INSTALL_SYSCONF2DIR)