266 lines
10 KiB
CMake
266 lines
10 KiB
CMake
# Copyright (c) 2012, 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
|
|
|
|
INCLUDE(CheckCCompilerFlag)
|
|
INCLUDE(CheckCXXCompilerFlag)
|
|
INCLUDE(cmake/floating_point.cmake)
|
|
|
|
IF(SIZEOF_VOIDP EQUAL 4)
|
|
SET(32BIT 1)
|
|
ENDIF()
|
|
IF(SIZEOF_VOIDP EQUAL 8)
|
|
SET(64BIT 1)
|
|
ENDIF()
|
|
|
|
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
# Compiler options
|
|
IF(UNIX)
|
|
|
|
IF(MY_COMPILER_IS_GNU_OR_CLANG)
|
|
SET(SECTIONS_FLAG "-ffunction-sections -fdata-sections")
|
|
ELSE()
|
|
SET(SECTIONS_FLAG)
|
|
ENDIF()
|
|
|
|
# Default GCC flags
|
|
IF(MY_COMPILER_IS_GNU)
|
|
SET(COMMON_C_FLAGS "-fno-omit-frame-pointer")
|
|
# Disable inline optimizations for valgrind testing to avoid false positives
|
|
IF(WITH_VALGRIND)
|
|
STRING_PREPEND(COMMON_C_FLAGS "-fno-inline ")
|
|
ENDIF()
|
|
# Disable floating point expression contractions to avoid result differences
|
|
IF(HAVE_C_FLOATING_POINT_FUSED_MADD)
|
|
STRING_APPEND(COMMON_C_FLAGS " -ffp-contract=off")
|
|
ENDIF()
|
|
|
|
SET(COMMON_CXX_FLAGS "-std=c++14 -fno-omit-frame-pointer")
|
|
# Disable inline optimizations for valgrind testing to avoid false positives
|
|
IF(WITH_VALGRIND)
|
|
STRING_PREPEND(COMMON_CXX_FLAGS "-fno-inline ")
|
|
ENDIF()
|
|
|
|
IF(WITH_NORMANDY_CLUSTER)
|
|
SET(COMMON_CXX_FLAGS "-DNORMANDY_CLUSTER ${COMMON_CXX_FLAGS}")
|
|
ENDIF()
|
|
IF(WITH_NORMANDY_TEST)
|
|
SET(COMMON_CXX_FLAGS "-DNORMANDY_TEST ${COMMON_CXX_FLAGS}")
|
|
ENDIF()
|
|
|
|
# Disable floating point expression contractions to avoid result differences
|
|
IF(HAVE_CXX_FLOATING_POINT_FUSED_MADD)
|
|
STRING_APPEND(COMMON_CXX_FLAGS " -ffp-contract=off")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Default Clang flags
|
|
IF(MY_COMPILER_IS_CLANG)
|
|
SET(COMMON_C_FLAGS "-fno-omit-frame-pointer")
|
|
SET(COMMON_CXX_FLAGS "-std=c++14 -fno-omit-frame-pointer")
|
|
ENDIF()
|
|
|
|
# Solaris flags
|
|
IF(SOLARIS)
|
|
# Link mysqld with mtmalloc on Solaris 10 and later
|
|
SET(WITH_MYSQLD_LDFLAGS "-lmtmalloc" CACHE STRING "")
|
|
|
|
IF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
|
|
SET(SUNPRO_FLAGS "")
|
|
STRING_APPEND(SUNPRO_FLAGS " -xbuiltin=%all")
|
|
STRING_APPEND(SUNPRO_FLAGS " -xlibmil")
|
|
STRING_APPEND(SUNPRO_FLAGS " -xatomic=studio")
|
|
|
|
# Show tags for warnings, so that they can be added to suppression list
|
|
SET(SUNPRO_FLAGS "${SUNPRO_FLAGS} -errtags")
|
|
|
|
IF(SOLARIS_INTEL)
|
|
STRING_APPEND(SUNPRO_FLAGS " -nofstore")
|
|
ENDIF()
|
|
|
|
SET(COMMON_C_FLAGS "${SUNPRO_FLAGS}")
|
|
|
|
# Build list of C warning tags to suppress. Comment in/out as needed.
|
|
|
|
# warning: useless declaration (E_USELESS_DECLARATION)
|
|
# Count: 8
|
|
# LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST E_USELESS_DECLARATION)
|
|
|
|
# warning: empty translation unit (E_EMPTY_TRANSLATION_UNIT)
|
|
LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST E_EMPTY_TRANSLATION_UNIT)
|
|
|
|
# warning: initialization type mismatch (E_INITIALIZATION_TYPE_MISMATCH)
|
|
# Count: 114
|
|
# LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST
|
|
# E_INITIALIZATION_TYPE_MISMATCH)
|
|
|
|
# warning: statement not reached (E_STATEMENT_NOT_REACHED)
|
|
# Count: 3
|
|
# LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST E_STATEMENT_NOT_REACHED)
|
|
|
|
# warning: initializer will be sign-extended: -1 (E_INIT_SIGN_EXTEND)
|
|
# Count: 1
|
|
# LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST E_INIT_SIGN_EXTEND)
|
|
|
|
# warning: implicit function declaration: ntohl
|
|
# (E_NO_IMPLICIT_DECL_ALLOWED)
|
|
# Count: 2
|
|
# LIST(APPEND SUNPRO_C_WARNING_SUPPRESSION_LIST E_NO_IMPLICIT_DECL_ALLOWED)
|
|
|
|
# Convert CMAKE list to comma-separated string, and append to
|
|
# COMMON_C_FLAGS
|
|
STRING(REPLACE ";" "," SUNPRO_C_WARNING_SUPPRESSION_STRING
|
|
${SUNPRO_C_WARNING_SUPPRESSION_LIST})
|
|
SET(SUNPRO_C_WARNING_SUPPRESSION_FLAGS
|
|
"-erroff=${SUNPRO_C_WARNING_SUPPRESSION_STRING}")
|
|
STRING_APPEND(COMMON_C_FLAGS " ${SUNPRO_C_WARNING_SUPPRESSION_FLAGS}")
|
|
|
|
|
|
SET(COMMON_CXX_FLAGS "-std=c++14 ${SUNPRO_FLAGS}")
|
|
|
|
# Build list of C++ warning tags to suppress. Comment in/out as needed.
|
|
|
|
# Warning, anonnotype: Types cannot be declared in anonymous union.
|
|
# Count: 43
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST anonnotype)
|
|
|
|
# Warning, fieldsemicolonw: extra ";" ignored.
|
|
# Count: 5
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST fieldsemicolonw)
|
|
|
|
# Warning, wvarhidemem: key_type hides keyring::Key::key_type.
|
|
# Count: 2917
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST wvarhidemem)
|
|
|
|
# Warning, anonstruct: Anonymous struct is being declared.
|
|
# Count: 717
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST anonstruct)
|
|
|
|
# Warning, wlessrestrictedthrow: Function
|
|
# xcl::Connection_impl::~Connection_impl() can throw only the
|
|
# exceptions thrown by the function xcl::XConnection::~XConnection()
|
|
# it overrides.
|
|
# Count: 1221
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST wlessrestrictedthrow)
|
|
|
|
# Warning, oklambdaretmulti: Deducing non-void lambda return type
|
|
# 'bool' from lambda without a single return statement.
|
|
# Count: 84
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST oklambdaretmulti)
|
|
|
|
# Warning, nonewline: Last line in file ".../registry_metadata.cc.inc"
|
|
# is not terminated with a newline.
|
|
# Count: 58
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST nonewline)
|
|
|
|
# Warning, voidretw: "worker_thread(void*)" is expected to return a
|
|
# value.
|
|
# Count: 1
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST voidretw)
|
|
|
|
# Warning, unassigned: The variable ret has not yet been assigned a
|
|
# value.
|
|
# Count: 193
|
|
LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST unassigned)
|
|
|
|
# Warning, badinitstr: String literal converted to char* in
|
|
# initialization.
|
|
# Count: 6
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST badinitstr)
|
|
|
|
# Warning, hidevf: meb::Process_data_mgr::get_buffer hides the virtual
|
|
# function meb::Data_mgr::get_buffer(unsigned long long).
|
|
# Count: 7
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST hidevf)
|
|
|
|
# Warning, attrskipunsup: attribute unused is unsupported and will be
|
|
# skipped..
|
|
# Count: 5
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST attrskipunsup)
|
|
|
|
# Warning, nonvarrefww: A reference return value should be an lvalue
|
|
# (if the value of this function is used, the result is unpredictable).
|
|
# Count: 4
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST nonvarrefww)
|
|
|
|
# Warning, explctspectypename: "typename" must be used within a template.
|
|
# Count: 1
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST explctspectypename)
|
|
|
|
# Warning: Likely out-of-bound read: *(rhs+9[1]) in function decLnOp
|
|
# (SEC_ARR_OUTSIDE_BOUND_READ)
|
|
# Count: 10
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST SEC_ARR_OUTSIDE_BOUND_READ)
|
|
|
|
# Warning (Anachronism), incomtypew: debug_sync_C_callback_ptr, of type
|
|
# void(*)(const char*,unsigned long), was previously declared
|
|
# extern "C" void(*)(const char*,unsigned long).
|
|
# Count: 1
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST, incomtypew)
|
|
|
|
# Warning, symdeprecated: 'MD5_Init(MD5state_st*)' is deprecated
|
|
# (declared at /usr/include/openssl/md5.h, line 124).
|
|
# Count: 3
|
|
#LIST(APPEND SUNPRO_CXX_WARNING_SUPPRESSION_LIST symdeprecated)
|
|
|
|
# Convert CMAKE list to comma-separated string, and append to
|
|
# COMMON_CXX_FLAGS
|
|
STRING(REPLACE ";" "," SUNPRO_CXX_WARNING_SUPPRESSION_STRING
|
|
"${SUNPRO_CXX_WARNING_SUPPRESSION_LIST}")
|
|
SET(SUNPRO_CXX_WARNING_SUPPRESSION_FLAGS
|
|
"-erroff=${SUNPRO_CXX_WARNING_SUPPRESSION_STRING}")
|
|
STRING_APPEND(COMMON_CXX_FLAGS " ${SUNPRO_CXX_WARNING_SUPPRESSION_FLAGS}")
|
|
|
|
|
|
# Reduce size of debug binaries, by omitting function declarations.
|
|
# Note that we cannot set "-xdebuginfo=no%decl" during feature tests.
|
|
# We still may get linking errors for merge_large_tests-t with Studio 12.6
|
|
# -g0 is the same as -g, except that inlining is enabled.
|
|
# When building -DWITH_NDBCLUSTER=1 even more of the merge_xxx_tests
|
|
# fail to link, so we keep -g0 for Studio 12.6
|
|
STRING_APPEND(CMAKE_C_FLAGS_DEBUG " -g0 -xdebuginfo=no%decl")
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_DEBUG " -g0 -xdebuginfo=no%decl")
|
|
STRING_APPEND(CMAKE_C_FLAGS_RELWITHDEBINFO " -xdebuginfo=no%decl")
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_RELWITHDEBINFO " -xdebuginfo=no%decl")
|
|
|
|
# Bugs in SunPro, compile/link error unless we add some debug info.
|
|
# Errors seem to be related to TLS functions.
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_MINSIZEREL
|
|
" -g0 -xdebuginfo=no%line,no%param,no%decl,no%variable,no%tagtype")
|
|
STRING_APPEND(CMAKE_CXX_FLAGS_RELEASE
|
|
" -g0 -xdebuginfo=no%line,no%param,no%decl,no%variable,no%tagtype")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Use STRING_PREPEND here, so command-line input can override our defaults.
|
|
STRING_PREPEND(CMAKE_C_FLAGS "${COMMON_C_FLAGS} ")
|
|
STRING_PREPEND(CMAKE_C_FLAGS_RELWITHDEBINFO "${SECTIONS_FLAG} ")
|
|
STRING_PREPEND(CMAKE_C_FLAGS_RELEASE "${SECTIONS_FLAG} ")
|
|
STRING_PREPEND(CMAKE_C_FLAGS_MINSIZEREL "${SECTIONS_FLAG} ")
|
|
|
|
STRING_PREPEND(CMAKE_CXX_FLAGS "${COMMON_CXX_FLAGS} ")
|
|
STRING_PREPEND(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${SECTIONS_FLAG} ")
|
|
STRING_PREPEND(CMAKE_CXX_FLAGS_RELEASE "${SECTIONS_FLAG} ")
|
|
STRING_PREPEND(CMAKE_CXX_FLAGS_MINSIZEREL "${SECTIONS_FLAG} ")
|
|
|
|
ENDIF()
|