1
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; version 2 of the License.
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
# GNU General Public License for more details.
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16
# This is the CMakeLists for InnoDB
18
INCLUDE(CheckFunctionExists)
19
INCLUDE(CheckCSourceCompiles)
20
INCLUDE(CheckCSourceRuns)
24
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
25
CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
26
CHECK_LIBRARY_EXISTS(aio io_queue_init "" HAVE_LIBAIO)
27
ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1")
28
IF(HAVE_LIBAIO_H AND HAVE_LIBAIO)
29
ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1)
32
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP*")
33
ADD_DEFINITIONS("-DUNIV_HPUX")
34
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "AIX")
35
ADD_DEFINITIONS("-DUNIV_AIX")
36
ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
37
ADD_DEFINITIONS("-DUNIV_SOLARIS")
41
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
42
# After: WL#5825 Using C++ Standard Library with MySQL code
43
# we no longer use -fno-exceptions
44
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
47
# Enable InnoDB's UNIV_DEBUG and UNIV_SYNC_DEBUG in debug builds
48
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DUNIV_DEBUG -DUNIV_SYNC_DEBUG")
50
# Add -Wconversion if compiling with GCC
51
## As of Mar 15 2011 this flag causes 3573+ warnings. If you are reading this
52
## please fix them and enable the following code:
53
#IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
54
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wconversion")
57
CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU)
60
# either define HAVE_IB_GCC_ATOMIC_BUILTINS or not
61
IF(NOT CMAKE_CROSSCOMPILING)
73
res = __sync_bool_compare_and_swap(&x, x, y);
80
res = __sync_bool_compare_and_swap(&x, x + 1, y);
86
res = __sync_add_and_fetch(&x, y);
87
if (res != 123 + 10 || x != 123 + 10) {
92
res = __sync_lock_test_and_set(&c, 123);
93
if (res != 10 || c != 123) {
98
HAVE_IB_GCC_ATOMIC_BUILTINS
108
res = __sync_sub_and_fetch(&y, x);
109
if (res != y || y != 113) {
112
res = __sync_add_and_fetch(&y, x);
113
if (res != y || y != 123) {
118
HAVE_IB_GCC_ATOMIC_BUILTINS_64
122
IF(HAVE_IB_GCC_ATOMIC_BUILTINS)
123
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS=1)
126
IF(HAVE_IB_GCC_ATOMIC_BUILTINS_64)
127
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS_64=1)
130
# either define HAVE_IB_ATOMIC_PTHREAD_T_GCC or not
131
IF(NOT CMAKE_CROSSCOMPILING)
142
memset(&x1, 0x0, sizeof(x1));
143
memset(&x2, 0x0, sizeof(x2));
144
memset(&x3, 0x0, sizeof(x3));
146
__sync_bool_compare_and_swap(&x1, x2, x3);
150
HAVE_IB_ATOMIC_PTHREAD_T_GCC)
152
IF(HAVE_IB_ATOMIC_PTHREAD_T_GCC)
153
ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1)
158
CHECK_FUNCTION_EXISTS(asprintf HAVE_ASPRINTF)
159
CHECK_FUNCTION_EXISTS(vasprintf HAVE_VASPRINTF)
162
IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
163
CHECK_FUNCTION_EXISTS(atomic_cas_ulong HAVE_ATOMIC_CAS_ULONG)
164
CHECK_FUNCTION_EXISTS(atomic_cas_32 HAVE_ATOMIC_CAS_32)
165
CHECK_FUNCTION_EXISTS(atomic_cas_64 HAVE_ATOMIC_CAS_64)
166
CHECK_FUNCTION_EXISTS(atomic_add_long_nv HAVE_ATOMIC_ADD_LONG_NV)
167
CHECK_FUNCTION_EXISTS(atomic_swap_uchar HAVE_ATOMIC_SWAP_UCHAR)
168
IF(HAVE_ATOMIC_CAS_ULONG AND
169
HAVE_ATOMIC_CAS_32 AND
170
HAVE_ATOMIC_CAS_64 AND
171
HAVE_ATOMIC_ADD_LONG_NV AND
172
HAVE_ATOMIC_SWAP_UCHAR)
173
SET(HAVE_IB_SOLARIS_ATOMICS 1)
176
IF(HAVE_IB_SOLARIS_ATOMICS)
177
ADD_DEFINITIONS(-DHAVE_IB_SOLARIS_ATOMICS=1)
180
IF(NOT CMAKE_CROSSCOMPILING)
181
# either define HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS or not
182
CHECK_C_SOURCE_COMPILES(
183
" #include <pthread.h>
186
int main(int argc, char** argv) {
191
memset(&x1, 0x0, sizeof(x1));
192
memset(&x2, 0x0, sizeof(x2));
193
memset(&x3, 0x0, sizeof(x3));
195
if (sizeof(pthread_t) == 4) {
197
atomic_cas_32(&x1, x2, x3);
199
} else if (sizeof(pthread_t) == 8) {
201
atomic_cas_64(&x1, x2, x3);
210
" HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
212
IF(HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
213
ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=1)
219
# this is needed to know which one of atomic_cas_32() or atomic_cas_64()
220
# to use in the source
221
SET(CMAKE_EXTRA_INCLUDE_FILES pthread.h)
222
CHECK_TYPE_SIZE(pthread_t SIZEOF_PTHREAD_T)
223
SET(CMAKE_EXTRA_INCLUDE_FILES)
227
ADD_DEFINITIONS(-DSIZEOF_PTHREAD_T=${SIZEOF_PTHREAD_T})
231
ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS)
235
# Include directories under innobase
236
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/innobase/include
237
${CMAKE_SOURCE_DIR}/storage/innobase/handler)
239
# Sun Studio bug with -xO2
240
IF(CMAKE_CXX_COMPILER_ID MATCHES "SunPro"
241
AND CMAKE_CXX_FLAGS_RELEASE MATCHES "O2"
242
AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
243
# Sun Studio 12 crashes with -xO2 flag, but not with higher optimization
245
SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/rem/rem0rec.cc
246
PROPERTIES COMPILE_FLAGS -xO3)
249
# Removing compiler optimizations for innodb/mem/* files on 64-bit Windows
250
# due to 64-bit compiler error, See MySQL Bug #19424, #36366, #34297
251
IF (MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
252
SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.cc mem/mem0pool.cc
253
PROPERTIES COMPILE_FLAGS -Od)
279
dict/dict0stats_bg.cc
300
handler/handler0alter.cc
375
SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
378
MYSQL_ADD_PLUGIN(innobase ${INNOBASE_SOURCES} STORAGE_ENGINE
380
MODULE_OUTPUT_NAME ha_innodb
381
LINK_LIBRARIES ${ZLIB_LIBRARY})