CMakeLists.txt 7.78 KB
Newer Older
1
# Copyright (C) 2006-2008 MySQL AB, 2009 Sun Microsystems, Inc
unknown's avatar
unknown committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 
# 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

16 17 18 19 20 21
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()

22

23
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
24

25 26 27 28
# 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.
29 30


31
IF(DEFINED CMAKE_BUILD_TYPE)
32 33 34 35 36 37
  SET(HAVE_CMAKE_BUILD_TYPE TRUE)
ENDIF()
SET(CUSTOM_C_FLAGS $ENV{CFLAGS})
IF(NOT CUSTOM_C_FLAGS)
  SET(CUSTOM_C_FLAGS ${CMAKE_C_FLAGS})
ENDIF()
unknown's avatar
unknown committed
38

39 40 41
OPTION(WITH_DEBUG "Use dbug" OFF)
OPTION(WITH_DEBUG_FULL "Use dbug and safemalloc/safemutex. Slow" OFF)

42 43 44 45 46 47 48 49
IF(NOT HAVE_CMAKE_BUILD_TYPE)
   IF(BUILD_CONFIG OR NOT CUSTOM_C_FLAGS)
     IF(WITH_DEBUG)
       SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Debug build" FORCE)
     ELSE()
       SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING 
        "RelWithDebInfo build" FORCE)
     ENDIF()
50 51
   ENDIF()
ENDIF()
52

53 54 55 56
IF(WITH_DEBUG_FULL)
  SET(WITH_DEBUG ON CACHE BOOL "Use DBUG")
ENDIF()

57
IF(BUILD_CONFIG)
58 59
  SET(CMAKE_USER_MAKE_RULES_OVERRIDE 
    ${CMAKE_SOURCE_DIR}/cmake/build_configurations/${BUILD_CONFIG}.cmake)
60 61
ENDIF()

62 63 64
PROJECT(MySQL)


65 66 67
IF(CYGWIN)
  SET(WIN32 0)
ENDIF()
68

69
IF(WIN32)
70 71 72 73 74 75
  SET(IF_WIN 0)
ELSE()
  SET(IF_WIN 1)
ENDIF()

# Add macros
76 77 78 79 80 81 82 83 84
INCLUDE(character_sets)
INCLUDE(zlib)
INCLUDE(ssl)
INCLUDE(readline)
INCLUDE(mysql_version)
INCLUDE(libutils)
INCLUDE(dtrace)
INCLUDE(plugin)
INCLUDE(install_macros)
85
INCLUDE(mysql_add_executable)
86 87

# Handle options
88 89 90 91 92
OPTION(DISABLE_SHARED 
 "Don't build shared libraries, compile code as position-dependent" OFF)
IF(DISABLE_SHARED)
  SET(WITHOUT_DYNAMIC_PLUGINS 1)
ENDIF()
93 94 95 96
OPTION(ENABLED_PROFILING "Enable profiling" ON)
OPTION(CYBOZU "" OFF)
OPTION(BACKUP_TEST "" OFF)
OPTION(WITHOUT_SERVER OFF)
97
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

 
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)

117 118 119 120
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
121 122 123 124
FOREACH(BUILD_TYPE RELEASE RELWITHDEBINFO MINSIZEREL)
  FOREACH(LANG C CXX)
    SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
     "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DDBUG_OFF")
125 126 127 128
    IF(WITH_FAST_MUTEXES)
      SET(CMAKE_${LANG}_FLAGS_${BUILD_TYPE} 
        "${CMAKE_${LANG}_FLAGS_${BUILD_TYPE}} -DMY_PTHREAD_FASTMUTEX=1")
    ENDIF()
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
  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)
150 151
      SET(CMAKE_${LANG}_FLAGS_DEBUG 
        "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
152
    ELSE()
153 154
      SET(CMAKE_${LANG}_FLAGS_DEBUG 
        "${CMAKE_${LANG}_FLAGS_DEBUG} -DSAFE_MUTEX")
155 156 157 158 159 160 161 162 163
    ENDIF()
  ENDFOREACH()
ENDIF()




# Set commonly used variables
IF(WIN32)
164
  SET(DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server ${MYSQL_BASE_VERSION}" )
165 166
  SET(SHAREDIR share)
ELSE()
167
  SET(DEFAULT_MYSQL_HOME ${CMAKE_INSTALL_PREFIX})
168
  SET(SHAREDIR ${DEFAULT_MYSQL_HOME}/share)
169 170 171
ENDIF()

SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}")
172
SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/data")
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}")


# Optionally read user configuration, generated by configure.js.
# This is left for backward compatibility reasons only.
IF(WIN32)
 INCLUDE(win/configure.data OPTIONAL)
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)
197
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
198 199 200 201 202
 # Add storage engines and plugins.
 CONFIGURE_PLUGINS()
ENDIF()

ADD_SUBDIRECTORY(include)
203 204
ADD_SUBDIRECTORY(dbug)
ADD_SUBDIRECTORY(strings)
205
ADD_SUBDIRECTORY(vio)
206 207
ADD_SUBDIRECTORY(regex)
ADD_SUBDIRECTORY(mysys)
unknown's avatar
unknown committed
208
ADD_SUBDIRECTORY(libmysql)
209 210 211 212 213 214 215 216 217 218

OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON)
IF(WITH_UNIT_TESTS)
 ENABLE_TESTING()
ENDIF()
IF(WITH_UNIT_TESTS)
  ADD_SUBDIRECTORY(unittest/mytap)
  ADD_SUBDIRECTORY(unittest/mysys)
ENDIF()

219
ADD_SUBDIRECTORY(extra)
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
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 )
248 249
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
    ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
250 251 252 253 254 255 256 257 258 259 260 261

# Packaging
IF(WIN32)
  SET(CPACK_GENERATOR "ZIP")
ELSE()
  SET(CPACK_GENERATOR "TGZ")
ENDIF() 
INCLUDE(CPack)
INSTALL(FILES COPYING EXCEPTIONS-CLIENT README DESTINATION .)
IF(UNIX)
  INSTALL(FILES Docs/INSTALL-BINARY DESTINATION .)
ENDIF()
Vladislav Vaintroub's avatar
Vladislav Vaintroub committed
262 263 264 265
# 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 .)