1
# Copyright (C) 2009 Oracle/Innobase Oy
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
# This is the CMakeLists for Embedded InnoDB
17
CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)
19
PROJECT (EMBEDDED_INNODB)
21
# Set both LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH
22
SET (LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
23
SET (EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
25
# Print out CMake info
26
MESSAGE(STATUS "CMAKE_GENERATOR: " ${CMAKE_GENERATOR})
27
MESSAGE(STATUS "CMAKE_SOURCE_DIR: " ${CMAKE_SOURCE_DIR})
29
# Print out system information
30
MESSAGE(STATUS "CMAKE_SYSTEM: " ${CMAKE_SYSTEM})
31
MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: " ${CMAKE_SYSTEM_PROCESSOR})
32
MESSAGE(STATUS "UNIX: " ${UNIX})
33
MESSAGE(STATUS "WIN32: " ${WIN32})
35
MESSAGE(STATUS "WIN64: " ${WIN64})
36
MESSAGE(STATUS "MSVC: " ${MSVC})
38
# Set the library version
39
SET(IB_MAJOR_VERSION 1)
40
SET(IB_MINOR_VERSION 0)
41
SET(IB_PATCH_VERSION 0)
43
SET(IB_LANG "english")
45
# Check for programs required to build InnoDB e.g., Bison and Flex
46
FIND_PROGRAM(FLEX flex)
47
FIND_PROGRAM(BISON bison)
49
include(CheckTypeSize)
50
CHECK_TYPE_SIZE(char SIZEOF_CHAR)
51
CHECK_TYPE_SIZE("unsigned char" SIZEOF_UCHAR)
52
CHECK_TYPE_SIZE(short SIZEOF_SHORT)
53
CHECK_TYPE_SIZE("unsigned short" SIZEOF_USHORT)
54
CHECK_TYPE_SIZE(int SIZEOF_INT)
55
CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
56
CHECK_TYPE_SIZE(long SIZEOF_LONG)
57
CHECK_TYPE_SIZE("unsigned long" SIZEOF_ULONG)
58
CHECK_TYPE_SIZE("long long int" SIZEOF_LONG_LONG)
59
CHECK_TYPE_SIZE("unsigned long long int" SIZEOF_ULONG_LONG)
60
CHECK_TYPE_SIZE(char* SIZEOF_CHARP)
61
CHECK_TYPE_SIZE(void* SIZEOF_VOIDP)
62
CHECK_TYPE_SIZE(off_t SIZEOF_OFF_T)
63
CHECK_TYPE_SIZE(int8_t HAVE_INT8_T)
64
CHECK_TYPE_SIZE(uint8_t HAVE_UINT8_T)
65
CHECK_TYPE_SIZE(int16_t HAVE_INT16_T)
66
CHECK_TYPE_SIZE(uint16_t HAVE_UINT16_T)
67
CHECK_TYPE_SIZE(int32_t HAVE_INT32_T)
68
CHECK_TYPE_SIZE(uint32_t HAVE_UINT32_T)
69
CHECK_TYPE_SIZE(int64_t HAVE_INT64_T)
70
CHECK_TYPE_SIZE(uint64_t HAVE_UINT64_T)
72
include(CheckIncludeFiles)
73
CHECK_INCLUDE_FILES(alloca.h HAVE_ALLOCA_H)
74
CHECK_INCLUDE_FILES(assert.h HAVE_ASSERT_H)
75
CHECK_INCLUDE_FILES(atomic.h HAVE_ATOMIC_H)
76
CHECK_INCLUDE_FILES(ctype.h HAVE_CTYPE_H)
77
CHECK_INCLUDE_FILES(dirent.h HAVE_DIRENT_H)
78
CHECK_INCLUDE_FILES(errno.h HAVE_ERRNO_H)
79
CHECK_INCLUDE_FILES(fcntl.h HAVE_FCNTL_H)
80
CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
81
CHECK_INCLUDE_FILES(libintl.h HAVE_LIBINTL_H)
82
CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
83
CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
84
CHECK_INCLUDE_FILES(pthread.h HAVE_PTHREAD_H)
85
CHECK_INCLUDE_FILES(sched.h HAVE_SCHED_H)
86
CHECK_INCLUDE_FILES(stdarg.h HAVE_STDARG_H)
87
CHECK_INCLUDE_FILES(stddef.h HAVE_STDDEF_H)
88
CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
89
CHECK_INCLUDE_FILES(stdio.h HAVE_STDIO_H)
90
CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
91
CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
92
CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
93
CHECK_INCLUDE_FILES(sys/ipc.h sys/HAVE_IPC_H)
94
CHECK_INCLUDE_FILES(sys/mman.h sys/HAVE_MMAN_H)
95
CHECK_INCLUDE_FILES(sys/resource.h sys/HAVE_RESOURCE_H)
96
CHECK_INCLUDE_FILES(sys/shm.h sys/HAVE_SHM_H)
97
CHECK_INCLUDE_FILES(sys/stat.h sys/HAVE_STAT_H)
98
CHECK_INCLUDE_FILES(sys/time.h sys/HAVE_TIME_H)
99
CHECK_INCLUDE_FILES(sys/types.h sys/HAVE_TYPES_H)
100
CHECK_INCLUDE_FILES(sys/utsname.h sys/HAVE_UTSNAME_H)
101
CHECK_INCLUDE_FILES(time.h HAVE_TIME_H)
102
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
103
CHECK_INCLUDE_FILES(valgrind/memcheck.h HAVE_MEMCHECK_H)
104
CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
106
include(CheckLibraryExists)
107
CHECK_LIBRARY_EXISTS(m floor "" HAVE_MATH)
108
CHECK_LIBRARY_EXISTS(z inflate "" HAVE_ZLIB)
109
CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
111
Include(CheckFunctionExists)
112
CHECK_FUNCTION_EXISTS(bcmp HAVE_BCMP)
113
CHECK_FUNCTION_EXISTS(fcntl HAVE_FCNTL)
114
CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
115
CHECK_FUNCTION_EXISTS(fsync HAVE_FSYNC)
116
CHECK_FUNCTION_EXISTS(ftruncate HAVE_FTRUNCATE)
117
CHECK_FUNCTION_EXISTS(getcwd HAVE_GETCWD)
118
CHECK_FUNCTION_EXISTS(getrusage HAVE_GETRUSAGE)
119
CHECK_FUNCTION_EXISTS(index HAVE_INDEX)
120
CHECK_FUNCTION_EXISTS(localtime_r HAVE_LOCALTIME_R)
121
CHECK_FUNCTION_EXISTS(locking HAVE_LOCKING)
122
CHECK_FUNCTION_EXISTS(memcpy HAVE_MEMCPY)
123
CHECK_FUNCTION_EXISTS(memmove HAVE_MEMMOVE)
124
CHECK_FUNCTION_EXISTS(perror HAVE_PERROR)
125
CHECK_FUNCTION_EXISTS(pread HAVE_PREAD)
126
CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
127
CHECK_FUNCTION_EXISTS(getpagesize HAVE_GETPAGESIZE)
128
CHECK_FUNCTION_EXISTS(pthread_attr_setstacksize HAVE_PTHREAD_ATTR_SETSTACKSIZE)
129
CHECK_FUNCTION_EXISTS(pthread_setprio HAVE_PTHREAD_SETPRIO)
130
CHECK_FUNCTION_EXISTS(rename HAVE_RENAME)
131
CHECK_FUNCTION_EXISTS(rint HAVE_RINT)
132
CHECK_FUNCTION_EXISTS(shmget HAVE_SHMGET)
133
CHECK_FUNCTION_EXISTS(shmat HAVE_SHMAT)
134
CHECK_FUNCTION_EXISTS(shmdt HAVE_SHMDT)
135
CHECK_FUNCTION_EXISTS(shmctl HAVE_SHMCTL)
136
CHECK_FUNCTION_EXISTS(sleep HAVE_SLEEP)
137
CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
138
CHECK_FUNCTION_EXISTS(stpcpy HAVE_STPCPY)
139
CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
140
CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR)
141
CHECK_FUNCTION_EXISTS(strstr HAVE_STRSTR)
142
CHECK_FUNCTION_EXISTS(strtoul HAVE_STRTOUL)
143
CHECK_FUNCTION_EXISTS(tell HAVE_TELL)
145
# Checks for Solaris 10+ atomic functions
146
IF(CMAKE_SYSTEM_NAME MATCHES "Solaris")
147
CHECK_FUNCTION_EXISTS(atomic_cas_ulong HAVE_ATOMIC_CAS_ULONG)
148
CHECK_FUNCTION_EXISTS(atomic_cas_32 HAVE_ATOMIC_CAS_32)
149
CHECK_FUNCTION_EXISTS(atomic_cas_64 HAVE_ATOMIC_CAS_64)
150
CHECK_FUNCTION_EXISTS(atomic_add_long HAVE_ATOMIC_ADD_LONG)
152
IF(DEFINED HAVE_ATOMIC_CAS_ULONG
153
AND DEFINED HAVE_ATOMIC_CAS_32
154
AND DEFINED HAVE_ATOMIC_CAS_64
155
AND DEFINED HAVE_ATOMIC_ADD_LONG)
156
SET(HAVE_SOLARIS_ATOMICS TRUE)
157
ENDIF(DEFINED HAVE_ATOMIC_CAS_ULONG
158
AND DEFINED HAVE_ATOMIC_CAS_32
159
AND DEFINED HAVE_ATOMIC_CAS_64
160
AND DEFINED HAVE_ATOMIC_ADD_LONG)
161
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Solaris")
163
SET(CMAKE_EXTRA_INCLUDE_FILES pthread.h)
164
CHECK_TYPE_SIZE(pthread_t SIZEOF_PTHREAD_T)
165
SET(CMAKE_EXTRA_INCLUDE_FILES)
167
# Include directories under innobase
168
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
170
SET(INNODB_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c
171
btr/btr0sea.c buf/buf0buddy.c buf/buf0buf.c
172
buf/buf0flu.c buf/buf0lru.c buf/buf0rea.c
173
data/data0data.c data/data0type.c
174
dict/dict0boot.c dict/dict0crea.c dict/dict0dict.c
175
dict/dict0load.c dict/dict0mem.c
177
eval/eval0eval.c eval/eval0proc.c
180
fut/fut0fut.c fut/fut0lst.c
181
ha/ha0ha.c ha/hash0hash.c ha/ha0storage.c
183
pars/lexyy.c pars/pars0grm.c pars/pars0opt.c
184
pars/pars0pars.c pars/pars0sym.c
185
lock/lock0lock.c lock/lock0iter.c
186
log/log0log.c log/log0recv.c
189
mtr/mtr0log.c mtr/mtr0mtr.c
190
os/os0file.c os/os0proc.c os/os0sync.c os/os0thread.c
191
page/page0cur.c page/page0page.c page/page0zip.c
194
rem/rem0cmp.c rem/rem0rec.c
195
row/row0ext.c row/row0ins.c row/row0merge.c
196
row/row0purge.c row/row0row.c row/row0prebuilt.c
197
row/row0sel.c row/row0uins.c row/row0umod.c
198
row/row0undo.c row/row0upd.c row/row0vers.c
199
srv/srv0que.c srv/srv0srv.c srv/srv0start.c
200
sync/sync0arr.c sync/sync0rw.c sync/sync0sync.c
202
trx/trx0purge.c trx/trx0rec.c
203
trx/trx0roll.c trx/trx0rseg.c
204
trx/trx0sys.c trx/trx0trx.c trx/trx0undo.c
205
usr/usr0sess.c ut/ut0byte.c ut/ut0dbg.c ut/ut0mem.c
206
ut/ut0rnd.c ut/ut0ut.c ut/ut0vec.c ut/ut0list.c
208
api/api0api.c api/api0misc.c api/api0ucode.c
213
ADD_DEFINITIONS("-D__WIN__ -D_WINDOWS -D_CRT_SECURE_NO_DEPRECATE")
215
# Check for 64 bit platform
216
IF(CMAKE_SIZEOF_VOIDP MATCHES 8)
218
ADD_DEFINITIONS("-D_WIN64")
219
ELSE(CMAKE_SIZEOF_VOIDP MATCHES 8)
221
ADD_DEFINITIONS("-D_WIN32")
222
ENDIF(CMAKE_SIZEOF_VOIDP MATCHES 8)
224
SET(CMAKE_EXE_LINKER_FLAGS
225
"${CMAKE_EXE_LINKER_FLAGS} /MAP /MAPINFO:EXPORTS")
227
SET(CMAKE_EXE_LINKER_FLAGS
228
"${CMAKE_EXE_LINKER_FLAGS} /STACK:1048576")
230
# Removing compiler optimizations for innodb/mem/* files
231
# on 64-bit Windows due to 64-bit compiler error, See MySQL
232
# Bug #19424, #36366, #34297
233
IF(ARCH MATCHES "amd64")
234
SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.c
235
PROPERTIES COMPILE_FLAGS -Od)
236
ENDIF(ARCH MATCHES "amd64")
238
# By default we use the Windows InterLocked functions
239
# Windows Interlocked functions require Windows 2000 or newer
241
ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS
242
-DINNODB_RW_LOCKS_USE_ATOMICS)
244
# Windows we always build a DLL
245
ADD_LIBRARY(innodb SHARED ${INNODB_SOURCES} win/innodb.def)
247
IF(CMAKE_BUILD_TYPE MATCHES debug)
248
ADD_DEFINITIONS(-g -Wall -DUNIV_DEBUG)
249
ELSEIF(CMAKE_BUILD_TYPE MATCHES release)
251
ELSE(CMAKE_BUILD_TYPE MATCHES debug)
252
ADD_DEFINITIONS(-g -Wall -Werror)
253
ENDIF(CMAKE_BUILD_TYPE MATCHES debug)
255
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
257
ADD_DEFINITIONS(-DUNIV_LINUX)
259
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Solaris"
260
OR CMAKE_SYSTEM_NAME MATCHES "SunOS")
262
ADD_DEFINITIONS(-DUNIV_SOLARIS)
264
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "aix")
266
ADD_DEFINITIONS(-DUNIV_AIX)
268
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
270
# Static build for now
271
ADD_LIBRARY(innodb STATIC ${INNODB_SOURCES})
276
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake
277
${CMAKE_CURRENT_BINARY_DIR}/include/ib0config.h)
279
# List all install files and use CPack for packaging and installation
280
SET(CMAKE_INSTALL_PREFIX package)
282
INSTALL(FILES include/api0api.h
286
INSTALL(FILES tests/ib_test1.c
298
DESTINATION examples)
299
INSTALL(TARGETS innodb
300
RUNTIME DESTINATION bin
301
LIBRARY DESTINATION lib
302
ARCHIVE DESTINATION lib
b'\\ No newline at end of file'