diff options
Diffstat (limited to 'configure.cmake')
-rw-r--r-- | configure.cmake | 85 |
1 files changed, 22 insertions, 63 deletions
diff --git a/configure.cmake b/configure.cmake index 43f8f71390d..0d730d4942f 100644 --- a/configure.cmake +++ b/configure.cmake @@ -52,19 +52,11 @@ IF(NOT SYSTEM_TYPE) ENDIF() ENDIF() - -IF(CMAKE_COMPILER_IS_GNUCXX) +IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") # MySQL "canonical" GCC flags. At least -fno-rtti flag affects # ABI and cannot be simply removed. SET(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fno-implicit-templates -fno-exceptions -fno-rtti") - IF(CMAKE_CXX_FLAGS) - STRING(REGEX MATCH "fno-implicit-templates" NO_IMPLICIT_TEMPLATES - ${CMAKE_CXX_FLAGS}) - IF (NO_IMPLICIT_TEMPLATES) - SET(HAVE_EXPLICIT_TEMPLATE_INSTANTIATION TRUE) - ENDIF() - ENDIF() + "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") IF (CMAKE_EXE_LINKER_FLAGS MATCHES " -static " OR CMAKE_EXE_LINKER_FLAGS MATCHES " -static$") @@ -183,7 +175,6 @@ CHECK_INCLUDE_FILES (alloca.h HAVE_ALLOCA_H) CHECK_INCLUDE_FILES (aio.h HAVE_AIO_H) CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H) -CHECK_INCLUDE_FILE_CXX (cxxabi.h HAVE_CXXABI_H) CHECK_INCLUDE_FILES (bfd.h BFD_H_EXISTS) CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H) CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) @@ -565,6 +556,7 @@ MY_CHECK_TYPE_SIZE(mode_t MODE_T) IF(NOT SIZEOF_MODE_T) SET(mode_t int) ENDIF() +MY_CHECK_TYPE_SIZE(sighandler_t SIGHANDLER_T) IF(HAVE_NETINET_IN_H) SET(CMAKE_EXTRA_INCLUDE_FILES netinet/in.h) @@ -911,7 +903,7 @@ ENDIF(NOT HAVE_POSIX_SIGNALS) # Assume regular sprintf SET(SPRINTFS_RETURNS_INT 1) -IF(CMAKE_COMPILER_IS_GNUCXX AND HAVE_CXXABI_H) +IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") CHECK_CXX_SOURCE_COMPILES(" #include <cxxabi.h> int main(int argc, char **argv) @@ -973,60 +965,20 @@ CHECK_CXX_SOURCE_COMPILES(" " HAVE_SOLARIS_STYLE_GETHOST) -# Use of ALARMs to wakeup on timeout on sockets -# -# This feature makes use of a mutex and is a scalability hog we -# try to avoid using. However we need support for SO_SNDTIMEO and -# SO_RCVTIMEO socket options for this to work. So we will check -# if this feature is supported by a simple TRY_RUN macro. However -# on some OS's there is support for setting those variables but -# they are silently ignored. For those OS's we will not attempt -# to use SO_SNDTIMEO and SO_RCVTIMEO even if it is said to work. -# See Bug#29093 for the problem with SO_SND/RCVTIMEO on HP/UX. -# Solaris11 has a similar problem -# To use alarm is simple, simply avoid setting anything. +SET(NO_ALARM 1 CACHE BOOL "No need to use alarm to implement timeout") -IF(WIN32) - SET(HAVE_SOCKET_TIMEOUT 1) -ELSEIF(CMAKE_SYSTEM MATCHES "HP-UX") - SET(HAVE_SOCKET_TIMEOUT 0) -ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - SET(HAVE_SOCKET_TIMEOUT 0) -ELSEIF(CMAKE_CROSSCOMPILING) - SET(HAVE_SOCKET_TIMEOUT 0) -ELSE() -SET(CMAKE_REQUIRED_LIBRARIES ${LIBNSL} ${LIBSOCKET}) -CHECK_C_SOURCE_RUNS( -" - #include <sys/types.h> - #include <sys/socket.h> - #include <sys/time.h> - - int main() - { - int fd = socket(AF_INET, SOCK_STREAM, 0); - struct timeval tv; - int ret= 0; - tv.tv_sec= 2; - tv.tv_usec= 0; - ret|= setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); - ret|= setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); - return !!ret; - } -" HAVE_SOCKET_TIMEOUT) -ENDIF() +# As a consequence of ALARMs no longer being used, thread +# notification for KILL must close the socket to wake up +# other threads. +SET(SIGNAL_WITH_VIO_CLOSE 1) -SET(NO_ALARM "${HAVE_SOCKET_TIMEOUT}" CACHE BOOL - "No need to use alarm to implement socket timeout") -SET(SIGNAL_WITH_VIO_CLOSE "${HAVE_SOCKET_TIMEOUT}") MARK_AS_ADVANCED(NO_ALARM) -IF(CMAKE_COMPILER_IS_GNUCXX) IF(WITH_ATOMIC_OPS STREQUAL "up") SET(MY_ATOMIC_MODE_DUMMY 1 CACHE BOOL "Assume single-CPU mode, no concurrency") ELSEIF(WITH_ATOMIC_OPS STREQUAL "rwlocks") - SET(MY_ATOMIC_MODE_RWLOCK 1 CACHE BOOL "Use pthread rwlocks for atomic ops") + SET(MY_ATOMIC_MODE_RWLOCKS 1 CACHE BOOL "Use pthread rwlocks for atomic ops") ELSEIF(WITH_ATOMIC_OPS STREQUAL "smp") ELSEIF(NOT WITH_ATOMIC_OPS) CHECK_CXX_SOURCE_COMPILES(" @@ -1053,17 +1005,24 @@ ELSEIF(NOT WITH_ATOMIC_OPS) return 0; }" HAVE_GCC_ATOMIC_BUILTINS) + CHECK_CXX_SOURCE_COMPILES(" + int main() + { + long long int var= 1; + long long int *ptr= &var; + return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); + }" + HAVE_GCC_C11_ATOMICS) ELSE() MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!") ENDIF() -ENDIF() -SET(WITH_ATOMIC_LOCKS "${WITH_ATOMIC_LOCKS}" CACHE STRING -"Implement atomic operations using pthread rwlocks or atomic CPU -instructions for multi-processor or uniprocessor +SET(WITH_ATOMIC_OPS "${WITH_ATOMIC_OPS}" CACHE STRING + "Implement atomic operations using pthread rwlocks (rwlocks); or atomic CPU +instructions for multi-processor (smp) or uniprocessor (up) configuration. By default gcc built-in sync functions are used, if available and 'smp' configuration otherwise.") -MARK_AS_ADVANCED(WITH_ATOMIC_LOCKS MY_ATOMIC_MODE_RWLOCK MY_ATOMIC_MODE_DUMMY) +MARK_AS_ADVANCED(WITH_ATOMIC_OPS MY_ATOMIC_MODE_RWLOCK MY_ATOMIC_MODE_DUMMY) IF(WITH_VALGRIND) SET(HAVE_valgrind 1) |