~ubuntu-branches/ubuntu/trusty/mariadb-5.5/trusty-proposed

« back to all changes in this revision

Viewing changes to storage/xtradb/CMakeLists.txt

  • Committer: Package Import Robot
  • Author(s): Otto Kekäläinen
  • Date: 2013-12-22 10:27:05 UTC
  • Revision ID: package-import@ubuntu.com-20131222102705-mndw7s12mz0szrcn
Tags: upstream-5.5.32
Import upstream version 5.5.32

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
 
2
 
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.
 
6
 
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.
 
11
 
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
 
15
 
 
16
# This is the CMakeLists for XtraDB
 
17
 
 
18
INCLUDE(CheckFunctionExists)
 
19
INCLUDE(CheckCSourceCompiles)
 
20
INCLUDE(CheckCSourceRuns)
 
21
 
 
22
# OS tests
 
23
IF(UNIX)
 
24
  IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 
25
    CHECK_INCLUDE_FILES (libaio.h HAVE_LIBAIO_H)
 
26
    IF (XTRADB_PREFER_STATIC_LIBAIO)
 
27
      SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
 
28
    ENDIF()
 
29
    FIND_LIBRARY(AIO_LIBRARY aio)
 
30
    IF(AIO_LIBRARY)
 
31
      CHECK_LIBRARY_EXISTS(${AIO_LIBRARY} io_queue_init "" HAVE_LIBAIO)
 
32
      IF(HAVE_LIBAIO AND HAVE_LIBAIO_H)
 
33
        ADD_DEFINITIONS(-DLINUX_NATIVE_AIO=1)
 
34
      ENDIF()
 
35
      LINK_LIBRARIES(${AIO_LIBRARY})
 
36
    ENDIF()
 
37
    ADD_DEFINITIONS("-DUNIV_LINUX -D_GNU_SOURCE=1")
 
38
  ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP*")
 
39
    ADD_DEFINITIONS("-DUNIV_HPUX -DUNIV_MUST_NOT_INLINE")
 
40
  ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "AIX")
 
41
    ADD_DEFINITIONS("-DUNIV_AIX -DUNIX_MUST_NOT_INLINE")
 
42
  ELSEIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
 
43
    ADD_DEFINITIONS("-DUNIV_SOLARIS")
 
44
  ELSE()
 
45
   ADD_DEFINITIONS("-DUNIV_MUST_NOT_INLINE")
 
46
  ENDIF()
 
47
ENDIF()
 
48
 
 
49
# Enable InnoDB's UNIV_DEBUG for debug builds
 
50
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DUNIV_DEBUG")
 
51
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DUNIV_DEBUG")
 
52
 
 
53
IF(NOT MSVC)
 
54
# either define HAVE_IB_GCC_ATOMIC_BUILTINS or not
 
55
IF(NOT CMAKE_CROSSCOMPILING)
 
56
  CHECK_C_SOURCE_RUNS(
 
57
  "
 
58
  int main()
 
59
  {
 
60
    long        x;
 
61
    long        y;
 
62
    long        res;
 
63
    char        c;
 
64
 
 
65
    x = 10;
 
66
    y = 123;
 
67
    res = __sync_bool_compare_and_swap(&x, x, y);
 
68
    if (!res || x != y) {
 
69
      return(1);
 
70
    }
 
71
 
 
72
    x = 10;
 
73
    y = 123;
 
74
    res = __sync_bool_compare_and_swap(&x, x + 1, y);
 
75
    if (res || x != 10) {
 
76
      return(1);
 
77
    }
 
78
    x = 10;
 
79
    y = 123;
 
80
    res = __sync_add_and_fetch(&x, y);
 
81
    if (res != 123 + 10 || x != 123 + 10) {
 
82
      return(1);
 
83
    }
 
84
 
 
85
    c = 10;
 
86
    res = __sync_lock_test_and_set(&c, 123);
 
87
    if (res != 10 || c != 123) {
 
88
      return(1);
 
89
    }
 
90
    return(0);
 
91
  }"
 
92
  HAVE_IB_GCC_ATOMIC_BUILTINS
 
93
  )
 
94
  CHECK_C_SOURCE_RUNS(
 
95
  "
 
96
  #include <stdint.h>
 
97
  int main()
 
98
  {
 
99
    int64_t x, y, res;
 
100
 
 
101
    x = 10;
 
102
    y = 123;
 
103
    res = __sync_bool_compare_and_swap(&x, x, y);
 
104
    if (!res || x != y) {
 
105
      return(1);
 
106
    }
 
107
 
 
108
    x = 10;
 
109
    y = 123;
 
110
    res = __sync_add_and_fetch(&x, y);
 
111
    if (res != 123 + 10 || x != 123 + 10) {
 
112
      return(1);
 
113
    }
 
114
 
 
115
    return(0);
 
116
  }"
 
117
  HAVE_IB_GCC_ATOMIC_BUILTINS_64
 
118
  )
 
119
ENDIF()
 
120
 
 
121
IF(HAVE_IB_GCC_ATOMIC_BUILTINS)
 
122
 ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS=1)
 
123
ENDIF()
 
124
 
 
125
IF(HAVE_IB_GCC_ATOMIC_BUILTINS_64)
 
126
 ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS_64=1)
 
127
ENDIF()
 
128
 
 
129
 # either define HAVE_IB_ATOMIC_PTHREAD_T_GCC or not
 
130
IF(NOT CMAKE_CROSSCOMPILING)
 
131
  CHECK_C_SOURCE_RUNS(
 
132
  "
 
133
  #include <pthread.h>
 
134
  #include <string.h>
 
135
 
 
136
  int main() {
 
137
    pthread_t       x1;
 
138
    pthread_t       x2;
 
139
    pthread_t       x3;
 
140
 
 
141
    memset(&x1, 0x0, sizeof(x1));
 
142
    memset(&x2, 0x0, sizeof(x2));
 
143
    memset(&x3, 0x0, sizeof(x3));
 
144
 
 
145
    __sync_bool_compare_and_swap(&x1, x2, x3);
 
146
 
 
147
    return(0);
 
148
  }"
 
149
  HAVE_IB_ATOMIC_PTHREAD_T_GCC)
 
150
ENDIF()
 
151
IF(HAVE_IB_ATOMIC_PTHREAD_T_GCC)
 
152
  ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1)
 
153
ENDIF()
 
154
 
 
155
ENDIF(NOT MSVC)
 
156
 
 
157
# Solaris atomics
 
158
IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
 
159
  CHECK_FUNCTION_EXISTS(atomic_cas_ulong  HAVE_ATOMIC_CAS_ULONG)
 
160
  CHECK_FUNCTION_EXISTS(atomic_cas_32 HAVE_ATOMIC_CAS_32)
 
161
  CHECK_FUNCTION_EXISTS(atomic_cas_64 HAVE_ATOMIC_CAS_64)
 
162
  CHECK_FUNCTION_EXISTS(atomic_add_long_nv HAVE_ATOMIC_ADD_LONG_NV)
 
163
  CHECK_FUNCTION_EXISTS(atomic_swap_uchar HAVE_ATOMIC_SWAP_UCHAR)
 
164
  IF(HAVE_ATOMIC_CAS_ULONG AND
 
165
     HAVE_ATOMIC_CAS_32 AND
 
166
     HAVE_ATOMIC_CAS_64 AND
 
167
     HAVE_ATOMIC_ADD_LONG_NV AND
 
168
     HAVE_ATOMIC_SWAP_UCHAR)
 
169
    SET(HAVE_IB_SOLARIS_ATOMICS 1)
 
170
  ENDIF()
 
171
  
 
172
  IF(HAVE_IB_SOLARIS_ATOMICS)
 
173
    ADD_DEFINITIONS(-DHAVE_IB_SOLARIS_ATOMICS=1)
 
174
  ENDIF()
 
175
 
 
176
  IF(NOT CMAKE_CROSSCOMPILING)
 
177
  # either define HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS or not
 
178
  CHECK_C_SOURCE_COMPILES(
 
179
  "   #include <pthread.h>
 
180
      #include <string.h>
 
181
 
 
182
      int main(int argc, char** argv) {
 
183
        pthread_t       x1;
 
184
        pthread_t       x2;
 
185
        pthread_t       x3;
 
186
 
 
187
        memset(&x1, 0x0, sizeof(x1));
 
188
        memset(&x2, 0x0, sizeof(x2));
 
189
        memset(&x3, 0x0, sizeof(x3));
 
190
 
 
191
        if (sizeof(pthread_t) == 4) {
 
192
        
 
193
          atomic_cas_32(&x1, x2, x3);
 
194
        
 
195
        } else if (sizeof(pthread_t) == 8) {
 
196
        
 
197
          atomic_cas_64(&x1, x2, x3);
 
198
        
 
199
        } else {
 
200
        
 
201
          return(1);
 
202
        }
 
203
 
 
204
      return(0);
 
205
    }
 
206
  " HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
 
207
  ENDIF()
 
208
  IF(HAVE_IB_ATOMIC_PTHREAD_T_SOLARIS)
 
209
    ADD_DEFINITIONS(-DHAVE_IB_ATOMIC_PTHREAD_T_SOLARIS=1)
 
210
  ENDIF()
 
211
ENDIF()
 
212
 
 
213
 
 
214
IF(UNIX)
 
215
# this is needed to know which one of atomic_cas_32() or atomic_cas_64()
 
216
# to use in the source
 
217
SET(CMAKE_EXTRA_INCLUDE_FILES pthread.h)
 
218
CHECK_TYPE_SIZE(pthread_t SIZEOF_PTHREAD_T)
 
219
SET(CMAKE_EXTRA_INCLUDE_FILES)
 
220
ENDIF()
 
221
 
 
222
IF(SIZEOF_PTHREAD_T)
 
223
  ADD_DEFINITIONS(-DSIZEOF_PTHREAD_T=${SIZEOF_PTHREAD_T})
 
224
ENDIF()
 
225
 
 
226
IF(MSVC)
 
227
  ADD_DEFINITIONS(-DHAVE_WINDOWS_ATOMICS)
 
228
 
 
229
  # Avoid "unreferenced label" warning in generated file
 
230
  GET_FILENAME_COMPONENT(_SRC_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
 
231
  SET_SOURCE_FILES_PROPERTIES(${_SRC_DIR}/pars/pars0grm.c
 
232
          PROPERTIES COMPILE_FLAGS "/wd4102")
 
233
  SET_SOURCE_FILES_PROPERTIES(${_SRC_DIR}/pars/lexyy.c
 
234
          PROPERTIES COMPILE_FLAGS "/wd4003")
 
235
ENDIF()
 
236
 
 
237
 
 
238
# Include directories under xtradb
 
239
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/xtradb/include
 
240
                    ${CMAKE_SOURCE_DIR}/storage/xtradb/handler)
 
241
 
 
242
# Sun Studio bug with -xO2
 
243
IF(CMAKE_C_COMPILER_ID MATCHES "SunPro" 
 
244
        AND CMAKE_C_FLAGS_RELEASE MATCHES "O2" 
 
245
        AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
 
246
        # Sun Studio 12 crashes with -xO2 flag, but not with higher optimization
 
247
        # -xO3
 
248
        SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/rem/rem0rec.c 
 
249
    PROPERTIES COMPILE_FLAGS -xO3)
 
250
ENDIF()
 
251
 
 
252
# Removing compiler optimizations for innodb/mem/* files on 64-bit Windows
 
253
# due to 64-bit compiler error, See MySQL Bug #19424, #36366, #34297
 
254
IF (MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 8)
 
255
        SET_SOURCE_FILES_PROPERTIES(mem/mem0mem.c mem/mem0pool.c
 
256
                                    PROPERTIES COMPILE_FLAGS -Od)
 
257
ENDIF()
 
258
 
 
259
SET(INNOBASE_SOURCES    btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c
 
260
                        buf/buf0buddy.c buf/buf0buf.c buf/buf0flu.c buf/buf0lru.c buf/buf0rea.c
 
261
                        data/data0data.c data/data0type.c
 
262
                        dict/dict0boot.c dict/dict0crea.c dict/dict0dict.c dict/dict0load.c dict/dict0mem.c
 
263
                        dyn/dyn0dyn.c
 
264
                        eval/eval0eval.c eval/eval0proc.c
 
265
                        fil/fil0fil.c
 
266
                        fsp/fsp0fsp.c
 
267
                        fut/fut0fut.c fut/fut0lst.c
 
268
                        ha/ha0ha.c ha/hash0hash.c ha/ha0storage.c
 
269
                        ibuf/ibuf0ibuf.c
 
270
                        pars/lexyy.c pars/pars0grm.c pars/pars0opt.c pars/pars0pars.c pars/pars0sym.c
 
271
                        lock/lock0lock.c lock/lock0iter.c
 
272
                        log/log0log.c log/log0recv.c log/log0online.c
 
273
                        mach/mach0data.c
 
274
                        mem/mem0mem.c mem/mem0pool.c
 
275
                        mtr/mtr0log.c mtr/mtr0mtr.c
 
276
                        os/os0file.c os/os0proc.c os/os0sync.c os/os0thread.c
 
277
                        page/page0cur.c page/page0page.c page/page0zip.c
 
278
                        que/que0que.c
 
279
                        handler/ha_innodb.cc handler/handler0alter.cc handler/i_s.cc
 
280
                        read/read0read.c
 
281
                        rem/rem0cmp.c rem/rem0rec.c
 
282
                        row/row0ext.c row/row0ins.c row/row0merge.c row/row0mysql.c row/row0purge.c row/row0row.c
 
283
                        row/row0sel.c row/row0uins.c row/row0umod.c row/row0undo.c row/row0upd.c row/row0vers.c
 
284
                        srv/srv0srv.c srv/srv0start.c
 
285
                        sync/sync0arr.c sync/sync0rw.c sync/sync0sync.c
 
286
                        trx/trx0i_s.c trx/trx0purge.c trx/trx0rec.c trx/trx0roll.c trx/trx0rseg.c
 
287
                        trx/trx0sys.c trx/trx0trx.c trx/trx0undo.c
 
288
                        usr/usr0sess.c
 
289
                        ut/ut0byte.c ut/ut0dbg.c ut/ut0list.c ut/ut0mem.c ut/ut0rbt.c ut/ut0rnd.c
 
290
                        ut/ut0ut.c ut/ut0vec.c ut/ut0wqueue.c ut/ut0bh.c)
 
291
 
 
292
IF(WITH_INNODB)
 
293
  # Legacy option
 
294
  SET(WITH_INNOBASE_STORAGE_ENGINE TRUE)
 
295
ENDIF()
 
296
 
 
297
MYSQL_ADD_PLUGIN(xtradb ${INNOBASE_SOURCES} STORAGE_ENGINE DEFAULT
 
298
  LINK_LIBRARIES ${ZLIB_LIBRARY} RECOMPILE_FOR_EMBEDDED)