mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
e1384dc718
suffer. The problem was that when custom C flags were defined with in environment variable CFLAGS, WITH_DEBUG did not have any effect. Also, switch from WITH_DEBUG=ON to WITH_DEBUG=OFF was not handled correctly .Expected is switch to with RelwithDebInfo or when custom compiler flags are defined, to None.
293 lines
9.5 KiB
CMake
Executable file
293 lines
9.5 KiB
CMake
Executable file
# Copyright (C) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
|
# Avoid warnings in higher versions
|
|
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
|
|
CMAKE_POLICY(VERSION 2.8)
|
|
endif()
|
|
|
|
|
|
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
# First, decide about build type (debug or release)
|
|
# If custom compiler flags are set or cmake is invoked with -DCMAKE_BUILD_TYPE,
|
|
# respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG{_FULL}
|
|
# is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo.
|
|
|
|
|
|
IF(DEFINED CMAKE_BUILD_TYPE)
|
|
SET(HAVE_CMAKE_BUILD_TYPE TRUE)
|
|
ENDIF()
|
|
SET(CUSTOM_C_FLAGS $ENV{CFLAGS})
|
|
|
|
OPTION(WITH_DEBUG "Use dbug/safemutex" OFF)
|
|
OPTION(WITH_DEBUG_FULL "Use dbug and safemalloc/safemutex. Slow" OFF)
|
|
|
|
|
|
# We choose to provide WITH_DEBUG as alias to standard CMAKE_BUILD_TYPE=Debug
|
|
# which turns out to be not trivial, as this involves synchronization
|
|
# between CMAKE_BUILD_TYPE and WITH_DEBUG. Besides, we have to deal with cases
|
|
# where WITH_DEBUG is reset from ON to OFF and here we need to reset
|
|
# CMAKE_BUILD_TYPE to either none or default RelWithDebInfo
|
|
|
|
SET(BUILDTYPE_DOCSTRING
|
|
"Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
|
|
CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel")
|
|
|
|
IF(WITH_DEBUG OR WITH_DEBUG_FULL)
|
|
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
|
|
SET(OLD_WITH_DEBUG 1 CACHE INTERNAL "" FORCE)
|
|
ELSEIF(NOT HAVE_CMAKE_BUILD_TYPE OR OLD_WITH_DEBUG)
|
|
IF(CUSTOM_C_FLAGS)
|
|
SET(CMAKE_BUILD_TYPE "" CACHE STRING ${BUILDTYPE_DOCSTRING} FORCE)
|
|
ELSE(CMAKE_BUILD_TYPE MATCHES "Debug" OR NOT HAVE_CMAKE_BUILD_TYPE)
|
|
SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
|
${BUILDTYPE_DOCSTRING} FORCE)
|
|
ENDIF()
|
|
SET(OLD_WITH_DEBUG 0 CACHE INTERNAL "" FORCE)
|
|
ENDIF()
|
|
|
|
IF(BUILD_CONFIG)
|
|
SET(CMAKE_USER_MAKE_RULES_OVERRIDE
|
|
${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
|
|
ENDIF()
|
|
|
|
PROJECT(MySQL)
|
|
|
|
# Include the platform-specific file. To allow exceptions, this code
|
|
# looks for files in order of how specific they are. If there is, for
|
|
# example, a generic Linux.cmake and a version-specific
|
|
# Linux-2.6.28-11-generic, it will pick Linux-2.6.28-11-generic and
|
|
# include it. It is then up to the file writer to include the generic
|
|
# version if necessary.
|
|
FOREACH(_base
|
|
${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}-${CMAKE_SYSTEM_PROCESSOR}
|
|
${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}
|
|
${CMAKE_SYSTEM_NAME})
|
|
SET(_file ${CMAKE_SOURCE_DIR}/cmake/os/${_base}.cmake)
|
|
IF(EXISTS ${_file})
|
|
INCLUDE(${_file})
|
|
BREAK()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
|
|
|
|
# Following autotools tradition, add preprocessor definitions
|
|
# specified in environment variable CPPFLAGS
|
|
IF(DEFINED ENV{CPPFLAGS})
|
|
ADD_DEFINITIONS($ENV{CPPFLAGS})
|
|
ENDIF()
|
|
|
|
# Add macros
|
|
INCLUDE(character_sets)
|
|
INCLUDE(zlib)
|
|
INCLUDE(ssl)
|
|
INCLUDE(readline)
|
|
INCLUDE(mysql_version)
|
|
INCLUDE(libutils)
|
|
INCLUDE(dtrace)
|
|
INCLUDE(plugin)
|
|
INCLUDE(install_macros)
|
|
INCLUDE(install_layout)
|
|
INCLUDE(mysql_add_executable)
|
|
|
|
# Handle options
|
|
OPTION(DISABLE_SHARED
|
|
"Don't build shared libraries, compile code as position-dependent" OFF)
|
|
IF(DISABLE_SHARED)
|
|
SET(WITHOUT_DYNAMIC_PLUGINS 1)
|
|
ENDIF()
|
|
OPTION(ENABLED_PROFILING "Enable profiling" ON)
|
|
OPTION(CYBOZU "" OFF)
|
|
OPTION(BACKUP_TEST "" OFF)
|
|
OPTION(WITHOUT_SERVER OFF)
|
|
OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON)
|
|
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
|
|
|
|
|
|
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON)
|
|
IF(ENABLE_DEBUG_SYNC)
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
|
|
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
|
|
ENDIF()
|
|
|
|
OPTION(WITH_ERROR_INJECT
|
|
"Enable error injection in MySQL Server (debug builds only)" OFF)
|
|
IF(WITH_ERROR_INJECT)
|
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT")
|
|
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DERROR_INJECT_SUPPORT")
|
|
ENDIF()
|
|
|
|
OPTION(ENABLE_LOCAL_INFILE
|
|
"If we should should enable LOAD DATA LOCAL by default" ${IF_WIN})
|
|
MARK_AS_ADVANCED(ENABLE_LOCAL_INFILE)
|
|
|
|
OPTION(WITH_FAST_MUTEXES "Compile with fast mutexes" OFF)
|
|
MARK_AS_ADVANCED(WITH_FAST_MUTEXES)
|
|
|
|
# Set DBUG_OFF and other optional release-only flags for non-debug project types
|
|
FOREACH(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL)
|
|
FOREACH(LANG C CXX)
|
|
SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE}
|
|
"${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DDBUG_OFF")
|
|
IF(WITH_FAST_MUTEXES)
|
|
SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE}
|
|
"${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DMY_PTHREAD_FASTMUTEX=1")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ENDFOREACH()
|
|
|
|
IF(NOT CMAKE_BUILD_TYPE
|
|
AND NOT CMAKE_GENERATOR MATCHES "Visual Studio"
|
|
AND NOT CMAKE_GENERATOR MATCHES "Xcode")
|
|
# This is the case of no CMAKE_BUILD_TYPE choosen, typical for VS and Xcode
|
|
# or if custom C flags are set. In VS and Xcode for non-Debug configurations
|
|
# DBUG_OFF is already correctly set. Use DBUG_OFF for Makefile based projects
|
|
# without build type too, unless user specifically requests DBUG.
|
|
IF(NOT CMAKE_C_FLAGS MATCHES "-DDBUG_ON")
|
|
ADD_DEFINITIONS(-DDBUG_OFF)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Add safemalloc and safemutex for debug condifurations, except on Windows
|
|
# (C runtime library provides safemalloc functionality and safemutex has never
|
|
# worked there)
|
|
IF(WITH_DEBUG OR WITH_DEBUG_FULL AND NOT WIN32)
|
|
FOREACH(LANG C CXX)
|
|
IF(WITH_DEBUG_FULL)
|
|
SET(CMAKE_${LANG}_FLAGS_DEBUG
|
|
"${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
|
|
ELSE()
|
|
SET(CMAKE_${LANG}_FLAGS_DEBUG
|
|
"${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX")
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
ENDIF()
|
|
|
|
|
|
# Set commonly used variables
|
|
IF(WIN32)
|
|
SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" )
|
|
SET(SHAREDIR share)
|
|
ELSE()
|
|
SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
|
|
SET(SHAREDIR ${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLSHAREDIR})
|
|
ENDIF()
|
|
|
|
SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}")
|
|
SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLDATADIR}" CACHE PATH
|
|
"default MySQL data directory")
|
|
SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}")
|
|
SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}")
|
|
IF(SYSCONFDIR)
|
|
SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}")
|
|
ENDIF()
|
|
|
|
|
|
# Run platform tests
|
|
INCLUDE(configure.cmake)
|
|
|
|
# Common defines and includes
|
|
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
|
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/include)
|
|
|
|
# Add bundled or system zlib.
|
|
MYSQL_CHECK_ZLIB_WITH_COMPRESS()
|
|
# Optionally add bundled yassl/taocrypt or system openssl.
|
|
MYSQL_CHECK_SSL()
|
|
# Add readline or libedit.
|
|
MYSQL_CHECK_READLINE()
|
|
|
|
IF(NOT WITHOUT_SERVER)
|
|
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
|
# Add storage engines and plugins.
|
|
CONFIGURE_PLUGINS()
|
|
ENDIF()
|
|
|
|
ADD_SUBDIRECTORY(include)
|
|
ADD_SUBDIRECTORY(dbug)
|
|
ADD_SUBDIRECTORY(strings)
|
|
ADD_SUBDIRECTORY(vio)
|
|
ADD_SUBDIRECTORY(regex)
|
|
ADD_SUBDIRECTORY(mysys)
|
|
ADD_SUBDIRECTORY(libmysql)
|
|
|
|
|
|
IF(WITH_UNIT_TESTS)
|
|
ENABLE_TESTING()
|
|
ENDIF()
|
|
IF(WITH_UNIT_TESTS)
|
|
ADD_SUBDIRECTORY(unittest/mytap)
|
|
ADD_SUBDIRECTORY(unittest/mysys)
|
|
ENDIF()
|
|
|
|
ADD_SUBDIRECTORY(extra)
|
|
IF(NOT WITHOUT_SERVER)
|
|
ADD_SUBDIRECTORY(tests)
|
|
ADD_SUBDIRECTORY(client)
|
|
ADD_SUBDIRECTORY(sql)
|
|
ADD_SUBDIRECTORY(sql/share)
|
|
ADD_SUBDIRECTORY(libservices)
|
|
OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
|
|
IF(WITH_EMBEDDED_SERVER)
|
|
ADD_SUBDIRECTORY(libmysqld)
|
|
ADD_SUBDIRECTORY(libmysqld/examples)
|
|
ENDIF(WITH_EMBEDDED_SERVER)
|
|
|
|
ADD_SUBDIRECTORY(mysql-test)
|
|
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
|
ADD_SUBDIRECTORY(support-files)
|
|
ADD_SUBDIRECTORY(scripts)
|
|
ADD_SUBDIRECTORY(sql-bench)
|
|
IF(UNIX)
|
|
ADD_SUBDIRECTORY(man)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
INCLUDE(cmake/abi_check.cmake)
|
|
|
|
CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/my_config.h)
|
|
CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/include/config.h)
|
|
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
|
|
${CMAKE_BINARY_DIR}/include/mysql_version.h )
|
|
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
|
|
${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
|
|
|
|
# Packaging
|
|
IF(WIN32)
|
|
SET(CPACK_GENERATOR "ZIP")
|
|
ELSE()
|
|
SET(CPACK_GENERATOR "TGZ")
|
|
ENDIF()
|
|
INCLUDE(CPack)
|
|
INSTALL(FILES COPYING EXCEPTIONS-CLIENT LICENSE.mysql DESTINATION ${INSTALL_DOCREADMEDIR} OPTIONAL)
|
|
INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR})
|
|
IF(UNIX)
|
|
INSTALL(FILES Docs/INSTALL-BINARY DESTINATION
|
|
${INSTALL_DOCREADMEDIR})
|
|
ENDIF()
|
|
# MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory
|
|
SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied")
|
|
MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION)
|
|
INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR}
|
|
PATTERN "INSTALL-BINARY" EXCLUDE
|
|
PATTERN "Makefile.*" EXCLUDE
|
|
PATTERN "myisam.txt" EXCLUDE
|
|
PATTERN "glibc*" EXCLUDE
|
|
PATTERN "sp-imp-spec.txt" EXCLUDE
|
|
PATTERN "linuxthreads.txt" EXCLUDE
|
|
)
|