394 lines
13 KiB
CMake
394 lines
13 KiB
CMake
# Copyright (c) 2008, 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
|
|
|
|
IF(NOT WITH_NDBCLUSTER)
|
|
RETURN()
|
|
ENDIF()
|
|
|
|
# Add both MySQL and NDB cmake repositories to search path
|
|
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
|
${CMAKE_SOURCE_DIR}/cmake
|
|
${CMAKE_SOURCE_DIR}/storage/ndb/cmake)
|
|
INCLUDE(ndb_add_target_property)
|
|
INCLUDE(ndb_add_test)
|
|
INCLUDE(ndb_add_executable)
|
|
|
|
#
|
|
# Add the ndbcluster plugin
|
|
#
|
|
SET(NDBCLUSTER_SOURCES
|
|
plugin/ha_ndbcluster.cc
|
|
plugin/ha_ndbcluster_cond.cc
|
|
plugin/ha_ndbcluster_push.cc
|
|
plugin/ha_ndbcluster_connection.cc
|
|
plugin/ha_ndbcluster_binlog.cc
|
|
plugin/ha_ndb_index_stat.cc
|
|
plugin/ha_ndb_ddl_fk.cc
|
|
plugin/ha_ndbinfo.cc
|
|
plugin/ndb_local_connection.cc
|
|
plugin/ndb_share.cc
|
|
plugin/ndb_thd.cc
|
|
plugin/ndb_thd_ndb.cc
|
|
plugin/ndb_global_schema_lock.cc
|
|
plugin/ndb_mi.cc
|
|
plugin/ndb_conflict_trans.cc
|
|
plugin/ndb_anyvalue.cc
|
|
plugin/ndb_ndbapi_util.cc
|
|
plugin/ndb_binlog_extra_row_info.cc
|
|
plugin/ndb_event_data.cc
|
|
plugin/ndb_schema_object.cc
|
|
plugin/ndb_schema_dist.cc
|
|
plugin/ndb_component.cc
|
|
plugin/ndb_repl_tab.cc
|
|
plugin/ndb_conflict.cc
|
|
plugin/ndb_tdc.cc
|
|
plugin/ndb_log.cc
|
|
plugin/ndb_binlog_thread.cc
|
|
plugin/ndb_name_util.cc
|
|
plugin/ndb_bitmap.cc
|
|
plugin/ndb_table_map.cc
|
|
plugin/ndb_dd.cc
|
|
plugin/ndb_modifiers.cc
|
|
plugin/ndb_dd_client.cc
|
|
plugin/ndb_dd_schema.cc
|
|
plugin/ndb_dd_table.cc
|
|
plugin/ndb_dd_sdi.cc
|
|
plugin/ndb_plugin_reference.cc
|
|
plugin/ndb_server_hooks.cc
|
|
plugin/ndb_binlog_client.cc
|
|
plugin/ndb_metadata.cc
|
|
plugin/ndb_dd_disk_data.cc
|
|
plugin/ndb_dd_upgrade_table.cc
|
|
plugin/ndb_binlog_hooks.cc
|
|
plugin/ndb_util_table.cc
|
|
plugin/ndb_schema_dist_table.cc
|
|
plugin/ndb_fk_util.cpp
|
|
plugin/ndb_schema_trans_guard.cc
|
|
plugin/ndb_create_helper.cc
|
|
plugin/ndb_apply_status_table.cc
|
|
plugin/ndb_metadata_change_monitor.cc
|
|
plugin/ndb_schema_result_table.cc
|
|
plugin/ndb_metadata_sync.cc
|
|
plugin/ndb_ddl_transaction_ctx.cc
|
|
plugin/ndb_record_layout.cc
|
|
plugin/ndb_sql_metadata_table.cc
|
|
plugin/ndb_stored_grants.cc
|
|
)
|
|
|
|
# Include directories used when building ha_ndbcluster
|
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/storage/ndb/include)
|
|
|
|
IF(SOLARIS_INTEL)
|
|
# Sun Studio 12.6 on x86 machines creates a bogus code
|
|
# when -xO2 is used and crashes the executable whenever
|
|
# it calls std::condition_variable::wait_for()
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_RELWITHDEBINFO " -xO1")
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_RELEASE " -xO1")
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_MINSIZEREL " -xO1")
|
|
ENDIF()
|
|
|
|
IF(NOT WITHOUT_SERVER)
|
|
MYSQL_ADD_PLUGIN(ndbcluster ${NDBCLUSTER_SOURCES} STORAGE_ENGINE
|
|
DEFAULT STATIC_ONLY
|
|
LINK_LIBRARIES ndbclient_static)
|
|
|
|
# Sanity check that MYSQL_ADD_PLUGIN didn't decide to skip build
|
|
IF (NOT WITH_NDBCLUSTER)
|
|
MESSAGE(FATAL_ERROR "MYSQL_ADD_PLUGIN decided to skip build")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Disable strict-aliasing for storage/ndb
|
|
IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
|
|
ENDIF()
|
|
|
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
MESSAGE(STATUS "Building NDB 32-bit")
|
|
ELSE()
|
|
MESSAGE(STATUS "Building NDB 64-bit")
|
|
ENDIF()
|
|
|
|
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/ndb_configure.cmake)
|
|
|
|
INCLUDE_DIRECTORIES(
|
|
# NDB includes
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/util
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/portlib
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/debugger
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/transporter
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/kernel
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/mgmapi
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/mgmcommon
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/ndbapi
|
|
${CMAKE_CURRENT_SOURCE_DIR}/include/logger
|
|
${CMAKE_CURRENT_BINARY_DIR}/include
|
|
)
|
|
|
|
# The root of storage/ndb/
|
|
SET(NDB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
OPTION(WITH_NDB_TEST
|
|
"Include the NDB Cluster ndbapi test programs" OFF)
|
|
IF(WITH_NDB_TEST)
|
|
MESSAGE(STATUS "Building NDB test programs")
|
|
ELSE()
|
|
# Turn on NDB tests automatically for gcov builds
|
|
IF(ENABLE_GCOV AND NOT WIN32 AND NOT APPLE)
|
|
MESSAGE(STATUS "Building NDB test programs for improved gcov coverage")
|
|
SET(WITH_NDB_TEST ON)
|
|
MESSAGE(STATUS "Building NdbApi examples for improved gcov coverage")
|
|
SET(WITH_NDBAPI_EXAMPLES ON)
|
|
ENDIF()
|
|
# Turn on NDB tests automatically for valgrind builds
|
|
IF(WITH_VALGRIND)
|
|
MESSAGE(STATUS "Building NDB test programs for improved valgrind coverage")
|
|
SET(WITH_NDB_TEST ON)
|
|
MESSAGE(STATUS "Building NdbApi examples for improved valgrind coverage")
|
|
SET(WITH_NDBAPI_EXAMPLES ON)
|
|
ENDIF()
|
|
# Turn on NDB tests automatically for "-devbld" debug builds
|
|
# to increase test coverage
|
|
IF(PACKAGE_SUFFIX STREQUAL "-devbld" AND
|
|
CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG")
|
|
MESSAGE(STATUS "Building NDB test programs for \"-devbld\" debug build")
|
|
SET(WITH_NDB_TEST ON)
|
|
MESSAGE(STATUS "Building NdbApi examples for \"-devbld\" debug build")
|
|
SET(WITH_NDBAPI_EXAMPLES ON)
|
|
ENDIF()
|
|
# Turn on build of NDB tests automatically for "-werror" builds
|
|
IF(PACKAGE_SUFFIX STREQUAL "-werror")
|
|
MESSAGE(STATUS "Building NDB test programs for \"-werror\" build")
|
|
SET(WITH_NDB_TEST ON)
|
|
MESSAGE(STATUS "Building NdbApi examples for \"-werror\" build")
|
|
SET(WITH_NDBAPI_EXAMPLES ON)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
OPTION(WITH_ERROR_INSERT
|
|
"Enable error injection in NDB" OFF)
|
|
|
|
OPTION(WITH_NDB_DEBUG
|
|
"Enable special ndb NDB features(including ERROR_INSERT)" OFF)
|
|
|
|
IF(WITH_NDB_DEBUG OR CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG")
|
|
MESSAGE(STATUS "Turning on special NDB debug features")
|
|
ADD_DEFINITIONS(-DVM_TRACE)
|
|
ADD_DEFINITIONS(-DNDB_DEBUG)
|
|
ADD_DEFINITIONS(-DERROR_INSERT)
|
|
ADD_DEFINITIONS(-DARRAY_GUARD)
|
|
ADD_DEFINITIONS(-DACC_SAFE_QUEUE)
|
|
ADD_DEFINITIONS(-DAPI_TRACE)
|
|
ELSE()
|
|
IF(WITH_ERROR_INSERT)
|
|
ADD_DEFINITIONS(-DERROR_INSERT)
|
|
ENDIF()
|
|
ADD_DEFINITIONS(-DNDEBUG)
|
|
ENDIF()
|
|
|
|
# Set extra compiler switches from WITH_NDB_CCFLAGS
|
|
SET(WITH_NDB_CCFLAGS "" CACHE STRING "Extra compiler flags for NDB")
|
|
IF(WITH_NDB_CCFLAGS)
|
|
MESSAGE(STATUS "Appending extra compiler flags for NDB: \"${WITH_NDB_CCFLAGS}\"")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WITH_NDB_CCFLAGS}")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WITH_NDB_CCFLAGS}")
|
|
ENDIF()
|
|
|
|
# Set extra compiler switches from environment variable NDB_EXTRA_FLAGS
|
|
SET(ndb_flags_env $ENV{NDB_EXTRA_FLAGS})
|
|
IF(ndb_flags_env)
|
|
MESSAGE(STATUS "Appending extra compiler flags for NDB from "
|
|
"environment: \"${ndb_flags_env}\"")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ndb_flags_env}")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ndb_flags_env}")
|
|
ENDIF()
|
|
|
|
SET(HAVE_JAVA FALSE)
|
|
SET(HAVE_JDK FALSE)
|
|
SET(WITH_NDB_JAVA_DEFAULT ON)
|
|
# Check if the default for WITH_NDB_JAVA should be overriden
|
|
# by environment variable
|
|
IF (DEFINED ENV{WITH_NDB_JAVA_DEFAULT})
|
|
SET(WITH_NDB_JAVA_DEFAULT $ENV{WITH_NDB_JAVA_DEFAULT})
|
|
MESSAGE(STATUS "Default value for WITH_NDB_JAVA set to ${WITH_NDB_JAVA_DEFAULT}")
|
|
ELSE()
|
|
# Check if the default for WITH_NDB_JAVA should be
|
|
# magically overriden
|
|
SET(magic_value $ENV{PRODUCT_ID})
|
|
IF (magic_value STREQUAL "bootstrap-cmake-tar-gz" OR
|
|
magic_value STREQUAL "source-dist-tar-gz")
|
|
SET(WITH_NDB_JAVA_DEFAULT OFF)
|
|
MESSAGE(STATUS "Default value for WITH_NDB_JAVA set to 0 since "
|
|
"bootstrapping was detected")
|
|
ENDIF()
|
|
IF(NOT MYSQL_CLUSTER_VERSION)
|
|
# Don't build the Java parts of NDB by default in MySQL Server
|
|
# (this lowers the threshold for checking that things
|
|
# work also with engine = NDB)
|
|
SET(WITH_NDB_JAVA_DEFAULT OFF)
|
|
MESSAGE(STATUS "Default value for WITH_NDB_JAVA set to 0 in "
|
|
"MySQL Server version")
|
|
ENDIF()
|
|
ENDIF()
|
|
OPTION(WITH_NDB_JAVA
|
|
"Include NDB Cluster Java components" ${WITH_NDB_JAVA_DEFAULT})
|
|
IF(WITH_ASAN)
|
|
MESSAGE(STATUS "Skip building ClusterJ for ASAN builds")
|
|
ELSEIF(WITH_NDB_JAVA)
|
|
#
|
|
# Check for Java and JDK needed by ndbjtie and clusterj
|
|
#
|
|
|
|
# Print value of JAVA_HOME if set
|
|
IF(DEFINED ENV{JAVA_HOME})
|
|
MESSAGE(STATUS "Looking for Java in JAVA_HOME=" $ENV{JAVA_HOME} " "
|
|
"and standard locations")
|
|
ELSE()
|
|
MESSAGE(STATUS "Looking for Java in standard locations")
|
|
ENDIF()
|
|
|
|
FIND_PACKAGE(Java 1.8 COMPONENTS Development)
|
|
IF(NOT JAVA_FOUND)
|
|
IF(DEFINED ENV{JAVA_HOME})
|
|
# Could not find Java in the specific location set by JAVA_HOME
|
|
# or in standard paths, don't search further
|
|
MESSAGE(FATAL_ERROR "Could NOT find Java: neither in specified "
|
|
"JAVA_HOME=" $ENV{JAVA_HOME} " or standard location")
|
|
ENDIF()
|
|
|
|
#
|
|
# Continue looking for Java in some additional
|
|
# well known locations
|
|
#
|
|
|
|
# Prefer Java with same bit size as current build
|
|
SET(_bit_suffix)
|
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
SET(_bit_suffix "-64")
|
|
ENDIF()
|
|
|
|
# Use well known standard base
|
|
SET(_base_path /usr/local/java/)
|
|
IF(WINDOWS)
|
|
SET(_base_path C:\\java\\)
|
|
ENDIF()
|
|
|
|
# Search for version in specified order
|
|
SET(_preferred_versions 1.8)
|
|
|
|
FOREACH(_version ${_preferred_versions})
|
|
SET(_path ${_base_path}jdk${_version}${_bit_suffix})
|
|
MESSAGE(STATUS "Looking for Java in ${_path}...")
|
|
SET(ENV{JAVA_HOME} ${_path})
|
|
FIND_PACKAGE(Java ${_version} COMPONENTS Development)
|
|
IF(JAVA_FOUND)
|
|
# Found java, no need to search further
|
|
MESSAGE(STATUS "Found Java in ${_path}")
|
|
BREAK()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
IF(NOT JAVA_FOUND)
|
|
# Could not find Java in well known locations either
|
|
MESSAGE(FATAL_ERROR "Could NOT find suitable version of Java")
|
|
ENDIF()
|
|
|
|
ENDIF()
|
|
|
|
MESSAGE(STATUS "Java_VERSION: ${Java_VERSION}")
|
|
MESSAGE(STATUS "Java_VERSION_STRING: ${Java_VERSION_STRING}")
|
|
MESSAGE(STATUS "JAVA_RUNTIME: ${JAVA_RUNTIME}")
|
|
MESSAGE(STATUS "JAVA_COMPILE: ${JAVA_COMPILE}")
|
|
MESSAGE(STATUS "JAVA_ARCHIVE: ${JAVA_ARCHIVE}")
|
|
NDB_REQUIRE_VARIABLE(JAVA_RUNTIME)
|
|
NDB_REQUIRE_VARIABLE(JAVA_COMPILE)
|
|
NDB_REQUIRE_VARIABLE(JAVA_ARCHIVE)
|
|
|
|
# Help FindJNI by setting JAVA_HOME (if not already set)
|
|
# to point at the java found above
|
|
IF(NOT DEFINED ENV{JAVA_HOME})
|
|
# Convert to realpath
|
|
GET_FILENAME_COMPONENT(java_home ${JAVA_COMPILE} REALPATH)
|
|
# Remove filename
|
|
GET_FILENAME_COMPONENT(java_home ${java_home} PATH)
|
|
# Remove dir
|
|
GET_FILENAME_COMPONENT(java_home ${java_home} PATH)
|
|
MESSAGE(STATUS "Setting JAVA_HOME=${java_home}")
|
|
SET(ENV{JAVA_HOME} ${java_home})
|
|
ENDIF()
|
|
|
|
FIND_PACKAGE(JNI REQUIRED)
|
|
MESSAGE(STATUS "JNI_FOUND: ${JNI_FOUND}")
|
|
MESSAGE(STATUS "JNI_INCLUDE_DIRS: ${JNI_INCLUDE_DIRS}")
|
|
MESSAGE(STATUS "JNI_LIBRARIES: ${JNI_LIBRARIES}")
|
|
NDB_REQUIRE_VARIABLE(JNI_INCLUDE_DIRS)
|
|
|
|
INCLUDE("${NDB_SOURCE_DIR}/config/type_JAVA.cmake")
|
|
SET(HAVE_JAVA TRUE)
|
|
SET(HAVE_JDK TRUE)
|
|
SET(WITH_CLASSPATH ${WITH_CLASSPATH} CACHE STRING
|
|
"Enable the classpath for MySQL Cluster Java Connector")
|
|
ELSE(WITH_NDB_JAVA)
|
|
MESSAGE(STATUS "Excluding Cluster Java components")
|
|
ENDIF(WITH_ASAN)
|
|
|
|
ADD_SUBDIRECTORY(include)
|
|
ADD_SUBDIRECTORY(src)
|
|
ADD_SUBDIRECTORY(tools)
|
|
ADD_SUBDIRECTORY(test)
|
|
IF(WITH_NDB_TEST)
|
|
ADD_SUBDIRECTORY(src/cw/cpcd)
|
|
ENDIF()
|
|
IF (HAVE_JAVA AND HAVE_JDK)
|
|
ADD_SUBDIRECTORY(clusterj)
|
|
ENDIF()
|
|
ADD_SUBDIRECTORY(memcache)
|
|
ADD_SUBDIRECTORY(mcc)
|
|
|
|
SET(WITH_NDB_NODEJS_DEFAULT ON)
|
|
|
|
# Check if the default for WITH_NDB_NODEJS should be overriden
|
|
# by environment variable
|
|
IF(DEFINED ENV{WITH_NDB_NODEJS_DEFAULT})
|
|
SET(WITH_NDB_NODEJS_DEFAULT $ENV{WITH_NDB_NODEJS_DEFAULT})
|
|
MESSAGE(STATUS "Default value for WITH_NDB_NODEJS set to ${WITH_NDB_NODEJS_DEFAULT}")
|
|
ENDIF(DEFINED ENV{WITH_NDB_NODEJS_DEFAULT})
|
|
OPTION(WITH_NDB_NODEJS
|
|
"Include NDB Cluster node.js components" ${WITH_NDB_NODEJS_DEFAULT})
|
|
IF(WITH_NDB_NODEJS)
|
|
ADD_SUBDIRECTORY(nodejs)
|
|
ENDIF(WITH_NDB_NODEJS)
|
|
|
|
OPTION(WITH_NDBAPI_EXAMPLES "Build the NdbApi example programs" OFF)
|
|
IF(WITH_NDBAPI_EXAMPLES)
|
|
MESSAGE(STATUS "Building the NdbApi example programs")
|
|
ADD_SUBDIRECTORY(ndbapi-examples)
|
|
ENDIF()
|
|
|
|
ADD_SUBDIRECTORY(wix)
|
|
|
|
IF(WITH_UNIT_TESTS)
|
|
FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/unittest/ndb)
|
|
ENDIF()
|