346 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			CMake
		
	
	
			
		
		
	
	
			346 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			CMake
		
	
	
| # Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
 | |
| # 
 | |
| # This program is free software; you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License, version 2.0,
 | |
| # as published by the Free Software Foundation.
 | |
| #
 | |
| # This program is also distributed with certain software (including
 | |
| # but not limited to OpenSSL) that is licensed under separate terms,
 | |
| # as designated in a particular file or component or in included license
 | |
| # documentation.  The authors of MySQL hereby grant you an additional
 | |
| # permission to link the program and your derivative works with the
 | |
| # separately licensed software that they have included with MySQL.
 | |
| #
 | |
| # 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, version 2.0, 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
 | |
| #
 | |
| 
 | |
| #
 | |
| # Run platform checks and create ndb_config.h
 | |
| #
 | |
| 
 | |
| 
 | |
| # 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_CURRENT_SOURCE_DIR}/cmake/os/${_base}.cmake)
 | |
|   IF(EXISTS ${_file})
 | |
|     INCLUDE(${_file})
 | |
|     BREAK()
 | |
|   ENDIF()
 | |
| ENDFOREACH()
 | |
| 
 | |
| 
 | |
| INCLUDE(CheckFunctionExists)
 | |
| INCLUDE(CheckIncludeFiles)
 | |
| INCLUDE(CheckCSourceCompiles)
 | |
| INCLUDE(CheckCXXSourceCompiles)
 | |
| INCLUDE(CheckCXXSourceRuns)
 | |
| INCLUDE(ndb_require_variable)
 | |
| 
 | |
| CHECK_FUNCTION_EXISTS(posix_memalign HAVE_POSIX_MEMALIGN)
 | |
| CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
 | |
| CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
 | |
| CHECK_FUNCTION_EXISTS(pthread_condattr_setclock HAVE_PTHREAD_CONDATTR_SETCLOCK)
 | |
| CHECK_FUNCTION_EXISTS(pthread_self HAVE_PTHREAD_SELF)
 | |
| CHECK_FUNCTION_EXISTS(sched_get_priority_min HAVE_SCHED_GET_PRIORITY_MIN)
 | |
| CHECK_FUNCTION_EXISTS(sched_get_priority_max HAVE_SCHED_GET_PRIORITY_MAX)
 | |
| CHECK_FUNCTION_EXISTS(sched_setaffinity HAVE_SCHED_SETAFFINITY)
 | |
| CHECK_FUNCTION_EXISTS(sched_setscheduler HAVE_SCHED_SETSCHEDULER)
 | |
| CHECK_FUNCTION_EXISTS(processor_bind HAVE_PROCESSOR_BIND)
 | |
| CHECK_FUNCTION_EXISTS(epoll_create HAVE_EPOLL_CREATE)
 | |
| CHECK_FUNCTION_EXISTS(memalign HAVE_MEMALIGN)
 | |
| CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
 | |
| CHECK_FUNCTION_EXISTS(directio HAVE_DIRECTIO)
 | |
| CHECK_FUNCTION_EXISTS(atomic_swap_32 HAVE_ATOMIC_SWAP32)
 | |
| CHECK_FUNCTION_EXISTS(mlock HAVE_MLOCK)
 | |
| CHECK_FUNCTION_EXISTS(pthread_mutexattr_init HAVE_PTHREAD_MUTEXATTR_INIT)
 | |
| CHECK_FUNCTION_EXISTS(pthread_mutexattr_settype HAVE_PTHREAD_MUTEXATTR_SETTYPE)
 | |
| CHECK_FUNCTION_EXISTS(pthread_mutexattr_setpshared HAVE_PTHREAD_MUTEXATTR_SETPSHARED)
 | |
| CHECK_FUNCTION_EXISTS(pthread_setschedparam HAVE_PTHREAD_SETSCHEDPARAM)
 | |
| CHECK_FUNCTION_EXISTS(priocntl HAVE_PRIOCNTL)
 | |
| CHECK_FUNCTION_EXISTS(processor_affinity HAVE_PROCESSOR_AFFINITY)
 | |
| CHECK_FUNCTION_EXISTS(cpuset_setaffinity HAVE_CPUSET_SETAFFINITY)
 | |
| CHECK_FUNCTION_EXISTS(setpriority HAVE_SETPRIORITY)
 | |
| 
 | |
| CHECK_SYMBOL_EXISTS(bzero "strings.h" HAVE_BZERO)
 | |
| CHECK_SYMBOL_EXISTS(ffs "strings.h" HAVE_FFS)
 | |
| 
 | |
| CHECK_INCLUDE_FILES(sun_prefetch.h HAVE_SUN_PREFETCH_H)
 | |
| CHECK_INCLUDE_FILES(Processtopologyapi.h HAVE_PROCESSTOPOLOGYAPI_H)
 | |
| CHECK_INCLUDE_FILES(Processthreadsapi.h HAVE_PROCESSTHREADSAPI_H)
 | |
| CHECK_INCLUDE_FILES(ncursesw/curses.h HAVE_NCURSESW_CURSES_H)
 | |
| CHECK_INCLUDE_FILES(ncursesw.h HAVE_NCURSESW_H)
 | |
| CHECK_INCLUDE_FILES(ncurses.h HAVE_NCURSES_H)
 | |
| CHECK_INCLUDE_FILES(ncurses/curses.h HAVE_NCURSES_CURSES_H)
 | |
| 
 | |
| CHECK_CXX_SOURCE_RUNS("
 | |
| template<class T> void ignore(const T&) {}
 | |
| unsigned A = 7;
 | |
| int main()
 | |
| {
 | |
|   unsigned a = __builtin_ffs(A);
 | |
|   ignore(a);
 | |
|   return 0;
 | |
| }"
 | |
| HAVE___BUILTIN_FFS)
 | |
| 
 | |
| CHECK_CXX_SOURCE_COMPILES("
 | |
| unsigned A = 7;
 | |
| int main()
 | |
| {
 | |
|   unsigned a = __builtin_ctz(A);
 | |
|   return (int)a;
 | |
| }"
 | |
| HAVE___BUILTIN_CTZ)
 | |
| 
 | |
| CHECK_CXX_SOURCE_COMPILES("
 | |
| unsigned A = 7;
 | |
| int main()
 | |
| {
 | |
|   unsigned a = __builtin_clz(A);
 | |
|   return (int)a;
 | |
| }"
 | |
| HAVE___BUILTIN_CLZ)
 | |
| 
 | |
| CHECK_C_SOURCE_COMPILES("
 | |
| #include <intrin.h>
 | |
| unsigned long A = 7;
 | |
| int main()
 | |
| {
 | |
|   unsigned long a;
 | |
|   unsigned char res = _BitScanForward(&a, A);
 | |
|   return (int)a;
 | |
| }"
 | |
| HAVE__BITSCANFORWARD)
 | |
| 
 | |
| CHECK_C_SOURCE_COMPILES("
 | |
| #include <intrin.h>
 | |
| unsigned long A = 7;
 | |
| int main()
 | |
| {
 | |
|   unsigned long a;
 | |
|   unsigned char res = _BitScanReverse(&a, A);
 | |
|   return (int)a;
 | |
| }"
 | |
| HAVE__BITSCANREVERSE)
 | |
| 
 | |
| #Mac OS X thread CPU usage
 | |
| CHECK_CXX_SOURCE_COMPILES("
 | |
| #include <mach/mach_init.h>
 | |
| #include <mach/thread_act.h>
 | |
| #include <mach/mach_port.h>
 | |
| int main()
 | |
| {
 | |
| mach_port_t thread_port;
 | |
| kern_return_t ret_code;
 | |
| mach_msg_type_number_t basic_info_count;
 | |
| thread_basic_info_data_t basic_info;
 | |
| mach_port_t current_task = mach_task_self();
 | |
| 
 | |
| thread_port = mach_thread_self();
 | |
| ret_code = thread_info(thread_port,
 | |
|                        THREAD_BASIC_INFO,
 | |
|                        (thread_info_t) &basic_info,
 | |
|                        &basic_info_count);
 | |
| mach_port_deallocate(current_task, thread_port);
 | |
| return ret_code;
 | |
| }"
 | |
| HAVE_MAC_OS_X_THREAD_INFO)
 | |
| 
 | |
| # Linux scheduling and locking support
 | |
| CHECK_C_SOURCE_COMPILES("
 | |
| #ifndef _GNU_SOURCE
 | |
| #define _GNU_SOURCE
 | |
| #endif
 | |
| #include <sys/types.h>
 | |
| #include <unistd.h>
 | |
| #include <sched.h>
 | |
| #include <sys/syscall.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   const cpu_set_t *p= (const cpu_set_t*)0;
 | |
|   struct sched_param loc_sched_param;
 | |
|   int policy = 0;
 | |
|   pid_t tid = (unsigned)syscall(SYS_gettid);
 | |
|   tid = getpid();
 | |
|   sched_setaffinity(tid, sizeof(* p), p);
 | |
|   sched_setscheduler(tid, policy, &loc_sched_param);
 | |
|   return 0;
 | |
| }"
 | |
| HAVE_LINUX_SCHEDULING)
 | |
| 
 | |
| # Solaris affinity support
 | |
| CHECK_C_SOURCE_COMPILES("
 | |
| #include <sys/types.h>
 | |
| #include <sys/lwp.h>
 | |
| #include <sys/processor.h>
 | |
| #include <sys/procset.h>
 | |
| int main()
 | |
| {
 | |
|   processorid_t cpu_id = (processorid_t)0;
 | |
|   id_t tid = _lwp_self();
 | |
|   processor_bind(P_LWPID, tid, cpu_id, 0);
 | |
| }"
 | |
| HAVE_SOLARIS_AFFINITY)
 | |
| 
 | |
| # Linux futex support
 | |
| CHECK_C_SOURCE_COMPILES("
 | |
| #ifndef _GNU_SOURCE
 | |
| #define _GNU_SOURCE
 | |
| #endif
 | |
| #include <sys/types.h>
 | |
| #include <unistd.h>
 | |
| #include <errno.h>
 | |
| #include <sys/syscall.h>
 | |
| #define FUTEX_WAIT        0
 | |
| #define FUTEX_WAKE        1
 | |
| #define FUTEX_FD          2
 | |
| #define FUTEX_REQUEUE     3
 | |
| #define FUTEX_CMP_REQUEUE 4
 | |
| #define FUTEX_WAKE_OP     5
 | |
| int main()
 | |
| {
 | |
|   int a = 0; int * addr = &a;
 | |
|   return syscall(SYS_futex, addr, FUTEX_WAKE, 1, 0, 0, 0) == 0 ? 0 : errno;
 | |
| }"
 | |
| HAVE_LINUX_FUTEX)
 | |
| 
 | |
| IF (NOT WIN32 AND NOT SOLARIS)
 | |
|   FIND_LIBRARY(NCURSESW_LIB
 | |
|                NAMES ncursesw)
 | |
|   IF (NOT NCURSESW_LIB)
 | |
|     FIND_LIBRARY(NCURSESW_LIB
 | |
|                  NAMES ncurses)
 | |
|   ENDIF()
 | |
|   CHECK_LIBRARY_EXISTS("${NCURSESW_LIB}"
 | |
|     stdscr "" NCURSES_HAS_STDSCR)
 | |
|   IF(NOT NCURSES_HAS_STDSCR)
 | |
|     FIND_LIBRARY(NCURSES_TINFO_LIB
 | |
|                  NAMES tinfo)
 | |
|     CHECK_LIBRARY_EXISTS("${NCURSES_TINFO_LIB}"
 | |
|       stdscr "" TINFO_HAS_STDSCR)
 | |
|     IF(TINFO_HAS_STDSCR)
 | |
|       LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${NCURSES_TINFO_LIB} ${NCURSESW_LIB})
 | |
|     ELSE()
 | |
|       LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${NCURSESW_LIB})
 | |
|     ENDIF()
 | |
|   ELSE()
 | |
|     LIST(APPEND CMAKE_REQUIRED_LIBRARIES ${NCURSESW_LIB})
 | |
|   ENDIF()
 | |
| 
 | |
|   CHECK_CXX_SOURCE_COMPILES("
 | |
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <curses.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   wcstombs(NULL, NULL, 0);
 | |
|   addstr(NULL);
 | |
|   return 0;
 | |
| }"
 | |
|   HAVE_NCURSESW_1 )
 | |
| 
 | |
|   CHECK_CXX_SOURCE_COMPILES("
 | |
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <ncursesw/curses.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   wcstombs(NULL, NULL, 0);
 | |
|   addstr(NULL);
 | |
|   return 0;
 | |
| }"
 | |
|   HAVE_NCURSESW_2 )
 | |
| 
 | |
|   CHECK_CXX_SOURCE_COMPILES("
 | |
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <ncurses/curses.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   wcstombs(NULL, NULL, 0);
 | |
|   addstr(NULL);
 | |
|   return 0;
 | |
| }"
 | |
|   HAVE_NCURSESW_3 )
 | |
| 
 | |
|   CHECK_CXX_SOURCE_COMPILES("
 | |
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <ncurses.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   wcstombs(NULL, NULL, 0);
 | |
|   addstr(NULL);
 | |
|   return 0;
 | |
| }"
 | |
|   HAVE_NCURSESW_4 )
 | |
| 
 | |
|   CHECK_CXX_SOURCE_COMPILES("
 | |
| #define _XOPEN_SOURCE_EXTENDED
 | |
| #include <ncursesw.h>
 | |
| #include <stdlib.h>
 | |
| int main()
 | |
| {
 | |
|   wcstombs(NULL, NULL, 0);
 | |
|   addstr(NULL);
 | |
|   return 0;
 | |
| }"
 | |
|   HAVE_NCURSESW_5 )
 | |
| ENDIF()
 | |
| 
 | |
| OPTION(WITH_NDBMTD
 | |
|   "Build the MySQL Cluster multithreadded data node" ON)
 | |
| 
 | |
| SET(WITH_NDB_PORT "" CACHE STRING
 | |
|   "Default port used by MySQL Cluster management server")
 | |
| IF(WITH_NDB_PORT GREATER 0)
 | |
|   SET(NDB_PORT ${WITH_NDB_PORT})
 | |
|   MESSAGE(STATUS "Setting MySQL Cluster management server port to ${NDB_PORT}")
 | |
| ENDIF()
 | |
| 
 | |
| CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/ndb_config.h.in
 | |
|                ${CMAKE_CURRENT_BINARY_DIR}/include/ndb_config.h)
 | |
| # Exclude ndb_config.h from "make dist"
 | |
| LIST(APPEND CPACK_SOURCE_IGNORE_FILES include/ndb_config\\\\.h$)
 | |
| 
 | |
| # Define HAVE_NDB_CONFIG_H to make ndb_global.h include the
 | |
| # generated ndb_config.h
 | |
| ADD_DEFINITIONS(-DHAVE_NDB_CONFIG_H)
 | |
| 
 | |
| # check zlib
 | |
| IF(NOT DEFINED WITH_ZLIB)
 | |
|   # Hardcode use of the bundled zlib if not set by MySQL
 | |
|   MESSAGE(STATUS "Using bundled zlib (hardcoded)")
 | |
|   SET(ZLIB_LIBRARY zlib)
 | |
|   INCLUDE_DIRECTORIES(SYSTEM ${CMAKE_SOURCE_DIR}/extra/zlib)
 | |
| ENDIF()
 | |
| NDB_REQUIRE_VARIABLE(ZLIB_LIBRARY)
 | |
| 
 | |
| IF(WITH_CLASSPATH)
 | |
|   MESSAGE(STATUS "Using supplied classpath: ${WITH_CLASSPATH}")
 | |
| ELSE()
 | |
|   SET(WITH_CLASSPATH "$ENV{CLASSPATH}")
 | |
|   IF(WIN32)
 | |
|     STRING(REPLACE "\\" "/" WITH_CLASSPATH "${WITH_CLASSPATH}")
 | |
|   ENDIF()
 | |
|   IF(WITH_CLASSPATH)
 | |
|     MESSAGE(STATUS "Using CLASSPATH from environment: ${WITH_CLASSPATH}")    
 | |
|   ENDIF()
 | |
| ENDIF()
 |