polardbxengine/cmake/build_configurations/compiler_options.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()