Skip to content

Commit

Permalink
Bug#27802681 ADD SUPPORT FOR NATIVE GCC ON SOLARIS
Browse files Browse the repository at this point in the history
Patch for trunk.

In the past we have been using misc gcc compilers on Solaris. These
compilers are no longer able to build the server, so we switched to
Oracle Studio. There is now a port of gcc 7 available as a native
compiler in Solaris, both for Intel and Sparc.

Remove obsolete/wrong cmake code for gcc on Solaris, use:
  /usr/bin/g++ --version
  g++ (GCC) 7.3.0
which has proper library support on Solaris 11.4

================
cmake/os/SunOS.cmake

Raise minimum compiler version for both gcc and Studio.

Remove obsolete cmake code for supporting non-native gcc compilers.

================
/mysys_ssl/CMakeLists.txt

Suppress -Wdeprecated-declarations for MD5 functions.

================
sql/sys_vars.cc
sql/sys_vars.h:138:0: error: "DEPRECATED" redefined [-Werror]
define DEPRECATED(X) X

/usr/include/openssl/ssl.h:2356:0:
note: this is the location of the previous definition
define DEPRECATED __attribute__((deprecated))

Change-Id: I6596d37466b4a1d031a506eb099e655aff14ff2c
  • Loading branch information
Tor Didriksen committed Apr 16, 2018
1 parent 88bd759 commit 237f737
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 126 deletions.
114 changes: 5 additions & 109 deletions cmake/os/SunOS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,13 @@ ENDIF()
INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE("void *" SIZEOF_VOIDP)

# We require at least GCC 4.8.3 or SunStudio 12.4 (CC 5.13)
# We require at least GCC 7.3 or SunStudio 12.5 (CC 5.14)
IF(NOT FORCE_UNSUPPORTED_COMPILER)
IF(CMAKE_COMPILER_IS_GNUCC)
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
IF(GCC_VERSION VERSION_LESS 4.8.3)
MESSAGE(FATAL_ERROR "GCC 4.8.3 or newer is required!")
IF(GCC_VERSION VERSION_LESS 7.3)
MESSAGE(FATAL_ERROR "GCC 7.3 or newer is required!")
ENDIF()
ELSEIF(CMAKE_C_COMPILER_ID MATCHES "SunPro")
IF(SIZEOF_VOIDP MATCHES 4)
Expand All @@ -72,8 +72,8 @@ IF(NOT FORCE_UNSUPPORTED_COMPILER)
VERSION_STRING ${stderr})
ENDIF()
SET(CC_MINOR_VERSION ${CMAKE_MATCH_1})
IF(${CC_MINOR_VERSION} LESS 13)
MESSAGE(FATAL_ERROR "SunStudio 12.4 or newer is required!")
IF(${CC_MINOR_VERSION} LESS 14)
MESSAGE(FATAL_ERROR "Oracle Studio 12.5 or newer is required!")
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "Unsupported compiler!")
Expand All @@ -90,17 +90,6 @@ ADD_DEFINITIONS(-D__EXTENSIONS__)
# http://docs.oracle.com/cd/E19455-01/806-5257/6je9h033k/index.html
ADD_DEFINITIONS(-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_PTHREADS)

# Workaround for Bug 22973151
# Cannot include <math.h> then <cmath> w/ Studio 12.4 in -std=c++11 mode
IF(CMAKE_SYSTEM_VERSION VERSION_EQUAL "5.11" AND CC_MINOR_VERSION EQUAL 13)
EXEC_PROGRAM(uname ARGS -v OUTPUT_VARIABLE MY_OS_MINOR_VERSION)
IF(MY_OS_MINOR_VERSION MATCHES "11.3")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W0,-stdhdrs_not_idempotent")
MESSAGE("Adding -W0,-stdhdrs_not_idempotent")
ENDIF()
ENDIF()


# On Solaris, use of intrinsics will screw the lib search logic
# Force using -lm, so rint etc are found.
SET(LIBM m)
Expand Down Expand Up @@ -151,98 +140,6 @@ MACRO(DIRNAME IN OUT)
GET_FILENAME_COMPONENT(${OUT} ${IN} PATH)
ENDMACRO()

MACRO(FIND_REAL_LIBRARY SOFTLINK_NAME REALNAME)
# We re-distribute libstdc++.so which is a symlink.
# There is no 'readlink' on solaris, so we use perl to follow links:
SET(PERLSCRIPT
"my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;")
EXECUTE_PROCESS(
COMMAND perl -e "${PERLSCRIPT}" ${SOFTLINK_NAME}
RESULT_VARIABLE result
OUTPUT_VARIABLE real_library
)
SET(REALNAME ${real_library})
ENDMACRO()

MACRO(EXTEND_CXX_LINK_FLAGS LIBRARY_PATH)
# Using the $ORIGIN token with the -R option to locate the libraries
# on a path relative to the executable:
# We need an extra backslash to pass $ORIGIN to the mysql_config script...
SET(QUOTED_CMAKE_CXX_LINK_FLAGS
"${CMAKE_CXX_LINK_FLAGS} -R'\\$ORIGIN/../lib' -R${LIBRARY_PATH} ")
SET(CMAKE_CXX_LINK_FLAGS
"${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}")
ENDMACRO()

MACRO(EXTEND_C_LINK_FLAGS LIBRARY_PATH)
SET(CMAKE_C_LINK_FLAGS
"${CMAKE_C_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
MESSAGE(STATUS "CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}")
SET(CMAKE_SHARED_LIBRARY_C_FLAGS
"${CMAKE_SHARED_LIBRARY_C_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
ENDMACRO()

# We assume that the client code is built with -std=c++11
# Both compilers will use libstdc++.so but possibly different version.
# Hence we install the gcc version here, for use by the server and plugins.
# Install only if INSTALL_GPP_LIBRARIES is set, use for non-native compilers.
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCC)
DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH)
SET(LIB_SUFFIX "lib")
IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
SET(LIB_SUFFIX "lib/sparcv9")
ENDIF()
IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
SET(LIB_SUFFIX "lib/amd64")
ENDIF()
FIND_LIBRARY(GPP_LIBRARY_NAME
NAMES "stdc++"
PATHS ${CXX_PATH}/../${LIB_SUFFIX}
NO_DEFAULT_PATH
)
MESSAGE(STATUS "GPP_LIBRARY_NAME ${GPP_LIBRARY_NAME}")
IF(GPP_LIBRARY_NAME)
DIRNAME(${GPP_LIBRARY_NAME} GPP_LIBRARY_PATH)
FIND_REAL_LIBRARY(${GPP_LIBRARY_NAME} real_library)
IF(INSTALL_GPP_LIBRARIES)
MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_NAME} ${real_library}")
INSTALL(FILES ${GPP_LIBRARY_NAME} ${real_library}
DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
ENDIF()
EXTEND_CXX_LINK_FLAGS(${GPP_LIBRARY_PATH})
EXECUTE_PROCESS(
COMMAND sh -c "elfdump ${real_library} | grep SONAME"
RESULT_VARIABLE result
OUTPUT_VARIABLE sonameline
)
IF(NOT result)
STRING(REGEX MATCH "libstdc.*[^\n]" soname ${sonameline})
IF(INSTALL_GPP_LIBRARIES)
MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_PATH}/${soname}")
INSTALL(FILES "${GPP_LIBRARY_PATH}/${soname}"
DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
ENDIF()
ENDIF()
ENDIF()
FIND_LIBRARY(GCC_LIBRARY_NAME
NAMES "gcc_s"
PATHS ${CXX_PATH}/../${LIB_SUFFIX}
NO_DEFAULT_PATH
)
IF(GCC_LIBRARY_NAME)
DIRNAME(${GCC_LIBRARY_NAME} GCC_LIBRARY_PATH)
FIND_REAL_LIBRARY(${GCC_LIBRARY_NAME} real_library)
IF(INSTALL_GPP_LIBRARIES)
MESSAGE(STATUS "INSTALL ${GCC_LIBRARY_NAME} ${real_library}")
INSTALL(FILES ${GCC_LIBRARY_NAME} ${real_library}
DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
ENDIF()
EXTEND_C_LINK_FLAGS(${GCC_LIBRARY_PATH})
ENDIF()
ENDIF()


# We assume that developer studio runtime libraries are installed.
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND
CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
Expand Down Expand Up @@ -304,4 +201,3 @@ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND
SET(QUOTED_CMAKE_CXX_LINK_FLAGS
"${QUOTED_CMAKE_CXX_LINK_FLAGS} -lstatomic ")
ENDIF()

7 changes: 7 additions & 0 deletions mysys_ssl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake)

IF(WITH_SSL STREQUAL "wolfssl")
SET(MYSYS_AES_IMPLEMENTATION my_aes_wolfssl.cc)
ELSE()
Expand All @@ -44,3 +46,8 @@ TARGET_LINK_LIBRARIES(mysys_ssl dbug strings ${SSL_LIBRARIES} ${ZLIB_LIBRARY})
IF(WIN32 AND NOT WITH_SSL STREQUAL "wolfssl")
TARGET_LINK_LIBRARIES(mysys_ssl crypt32)
ENDIF()

# MD5_Init() MD5_Update() MD5_Final() are all deprecated
IF(SOLARIS AND CMAKE_COMPILER_IS_GNUCXX)
ADD_COMPILE_FLAGS(my_md5.cc COMPILE_FLAGS "-Wno-deprecated-declarations")
ENDIF()
37 changes: 21 additions & 16 deletions sql/sys_vars.cc
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,7 @@ static Sys_var_int32 Sys_binlog_max_flush_queue_time(
GLOBAL_VAR(opt_binlog_max_flush_queue_time),
CMD_LINE(REQUIRED_ARG, OPT_BINLOG_MAX_FLUSH_QUEUE_TIME),
VALID_RANGE(0, 100000), DEFAULT(0), BLOCK_SIZE(1), NO_MUTEX_GUARD,
NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED_VAR(""));

static Sys_var_ulong Sys_binlog_group_commit_sync_delay(
"binlog_group_commit_sync_delay",
Expand Down Expand Up @@ -1588,7 +1588,8 @@ static Sys_var_ulong Sys_delayed_insert_limit(
"This variable is deprecated along with INSERT DELAYED.",
GLOBAL_VAR(delayed_insert_limit), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1, ULONG_MAX), DEFAULT(DELAYED_LIMIT), BLOCK_SIZE(1),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED_VAR(""));

static Sys_var_ulong Sys_delayed_insert_timeout(
"delayed_insert_timeout",
Expand All @@ -1597,7 +1598,8 @@ static Sys_var_ulong Sys_delayed_insert_timeout(
"This variable is deprecated along with INSERT DELAYED.",
GLOBAL_VAR(delayed_insert_timeout), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1, LONG_TIMEOUT), DEFAULT(DELAYED_WAIT_TIMEOUT), BLOCK_SIZE(1),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED_VAR(""));

static Sys_var_ulong Sys_delayed_queue_size(
"delayed_queue_size",
Expand All @@ -1607,7 +1609,8 @@ static Sys_var_ulong Sys_delayed_queue_size(
"This variable is deprecated along with INSERT DELAYED.",
GLOBAL_VAR(delayed_queue_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1, ULONG_MAX), DEFAULT(DELAYED_QUEUE_SIZE), BLOCK_SIZE(1),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED_VAR(""));

static const char *event_scheduler_names[] = {"OFF", "ON", "DISABLED", NullS};
static bool event_scheduler_check(sys_var *, THD *, set_var *var) {
Expand Down Expand Up @@ -1692,7 +1695,7 @@ static Sys_var_ulong Sys_expire_logs_days(
GLOBAL_VAR(expire_logs_days), CMD_LINE(REQUIRED_ARG, OPT_EXPIRE_LOGS_DAYS),
VALID_RANGE(0, 99), DEFAULT(0), BLOCK_SIZE(1), NO_MUTEX_GUARD,
NOT_IN_BINLOG, ON_CHECK(check_expire_logs_days), ON_UPDATE(NULL),
DEPRECATED("binlog_expire_logs_seconds"));
DEPRECATED_VAR("binlog_expire_logs_seconds"));

static Sys_var_ulong Sys_binlog_expire_logs_seconds(
"binlog_expire_logs_seconds",
Expand Down Expand Up @@ -2162,7 +2165,7 @@ static Sys_var_bool Sys_log_syslog_enable(
GLOBAL_VAR(opt_log_syslog_enable), CMD_LINE(OPT_ARG),
DEFAULT(true), // true-when-loaded on either platform
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(fix_syslog_enable),
DEPRECATED("--log_error_services"));
DEPRECATED_VAR("--log_error_services"));

static bool fix_syslog_tag(sys_var *self, THD *thd MY_ATTRIBUTE((unused)),
enum_var_type type MY_ATTRIBUTE((unused))) {
Expand Down Expand Up @@ -2397,7 +2400,7 @@ static Sys_var_ulong Sys_max_insert_delayed_threads(
"This variable is deprecated along with INSERT DELAYED.",
SESSION_VAR(max_insert_delayed_threads), NO_CMD_LINE, VALID_RANGE(0, 16384),
DEFAULT(20), BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG,
ON_CHECK(check_max_delayed_threads), ON_UPDATE(0), DEPRECATED(""));
ON_CHECK(check_max_delayed_threads), ON_UPDATE(0), DEPRECATED_VAR(""));

static Sys_var_ulong Sys_max_delayed_threads(
"max_delayed_threads",
Expand All @@ -2407,7 +2410,7 @@ static Sys_var_ulong Sys_max_delayed_threads(
SESSION_VAR(max_insert_delayed_threads), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(0, 16384), DEFAULT(20), BLOCK_SIZE(1), NO_MUTEX_GUARD,
NOT_IN_BINLOG, ON_CHECK(check_max_delayed_threads), ON_UPDATE(0),
DEPRECATED(""));
DEPRECATED_VAR(""));

static Sys_var_ulong Sys_max_error_count(
"max_error_count", "Max number of errors/warnings to store for a statement",
Expand All @@ -2427,15 +2430,15 @@ static Sys_var_ulong Sys_metadata_locks_cache_size(
READ_ONLY GLOBAL_VAR(mdl_locks_cache_size_unused),
CMD_LINE(REQUIRED_ARG, OPT_MDL_CACHE_SIZE), VALID_RANGE(1, 1024 * 1024),
DEFAULT(1024), BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(0), DEPRECATED(""));
ON_UPDATE(0), DEPRECATED_VAR(""));

static ulong mdl_locks_hash_partitions_unused;
static Sys_var_ulong Sys_metadata_locks_hash_instances(
"metadata_locks_hash_instances", "Has no effect, deprecated",
READ_ONLY GLOBAL_VAR(mdl_locks_hash_partitions_unused),
CMD_LINE(REQUIRED_ARG, OPT_MDL_HASH_INSTANCES), VALID_RANGE(1, 1024),
DEFAULT(8), BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(0), DEPRECATED(""));
ON_UPDATE(0), DEPRECATED_VAR(""));

// relies on DBUG_ASSERT(sizeof(my_thread_id) == 4);
static Sys_var_uint Sys_pseudo_thread_id(
Expand Down Expand Up @@ -4669,13 +4672,13 @@ static Sys_var_bit Sys_profiling("profiling", "profiling",
SESSION_VAR(option_bits), NO_CMD_LINE,
OPTION_PROFILING, DEFAULT(false),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(0), DEPRECATED(""));
ON_UPDATE(0), DEPRECATED_VAR(""));

static Sys_var_ulong Sys_profiling_history_size(
"profiling_history_size", "Limit of query profiling memory",
SESSION_VAR(profiling_history_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(0, 100), DEFAULT(15), BLOCK_SIZE(1), NO_MUTEX_GUARD,
NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED_VAR(""));
#endif

static Sys_var_harows Sys_select_limit(
Expand Down Expand Up @@ -5065,15 +5068,16 @@ static Sys_var_have Sys_have_openssl("have_openssl", "have_openssl",
static Sys_var_have Sys_have_profiling(
"have_profiling", "have_profiling",
READ_ONLY NON_PERSIST GLOBAL_VAR(have_profiling), NO_CMD_LINE,
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED_VAR(""));

static Sys_var_have Sys_have_query_cache(
"have_query_cache",
"have_query_cache. "
"This variable is deprecated and will be removed in a future release.",
READ_ONLY NON_PERSIST GLOBAL_VAR(have_query_cache), NO_CMD_LINE,
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(nullptr), ON_UPDATE(nullptr),
DEPRECATED(""));
DEPRECATED_VAR(""));

static Sys_var_have Sys_have_rtree_keys(
"have_rtree_keys", "have_rtree_keys",
Expand Down Expand Up @@ -5876,7 +5880,8 @@ static Sys_var_bool Sys_avoid_temporal_upgrade(
"This variable is deprecated and will be removed in a future release.",
GLOBAL_VAR(avoid_temporal_upgrade),
CMD_LINE(OPT_ARG, OPT_AVOID_TEMPORAL_UPGRADE), DEFAULT(false),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0), DEPRECATED(""));
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED_VAR(""));

static Sys_var_bool Sys_show_old_temporals(
"show_old_temporals",
Expand All @@ -5886,7 +5891,7 @@ static Sys_var_bool Sys_show_old_temporals(
"This variable is deprecated and will be removed in a future release.",
SESSION_VAR(show_old_temporals), CMD_LINE(OPT_ARG, OPT_SHOW_OLD_TEMPORALS),
DEFAULT(false), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED(""));
DEPRECATED_VAR(""));

static Sys_var_charptr Sys_disabled_storage_engines(
"disabled_storage_engines",
Expand Down
2 changes: 1 addition & 1 deletion sql/sys_vars.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class Sys_var_integer;
@@foreign_key_checks <-> OPTION_NO_FOREIGN_KEY_CHECKS
*/
#define REVERSE(X) ~(X)
#define DEPRECATED(X) X
#define DEPRECATED_VAR(X) X

#define session_var(THD, TYPE) (*(TYPE *)session_var_ptr(THD))
#define global_var(TYPE) (*(TYPE *)global_var_ptr())
Expand Down

0 comments on commit 237f737

Please sign in to comment.