Changeset: 5c5ef163f05a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5c5ef163f05a
Modified Files:
CMakeLists.txt
Branch: cmake-fun
Log Message:
Do compiler flags checks later to avoid conflicts with libraries tests.
diffs (truncated from 606 to 300 lines):
diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -330,45 +330,6 @@ if(NOT NAN_CAN_BE_USED_AS_INITIALIZER)
set(NAN_CANNOT_BE_USED_AS_INITIALIZER ON)
endif()
-# Iconv - Check before adding any new compiler flag
-set(ICONV_INCLUDE_DIR "")
-set(ICONV_LIBRARIES "")
-include(FindIconv)
-if(Iconv_FOUND)
- set(HAVE_ICONV ON)
- set(HAVE_ICONV_H ON)
- cmake_push_check_state()
- if(NOT Iconv_IS_BUILT_IN)
- set(ICONV_INCLUDE_DIR "${Iconv_INCLUDE_DIR}")
- set(ICONV_LIBRARIES "${Iconv_LIBRARY}")
- set(CMAKE_REQUIRED_LIBRARIES
"${CMAKE_REQUIRED_LIBRARIES};${ICONV_LIBRARIES}")
- endif()
-
- if(MSVC)
- set(ICONV_CONST " ")
- else()
- message(STATUS "Check if second iconv argument requires const")
- check_c_source_compiles("
- #include <iconv.h>
-
- int main(int argc, char **argv) {
- iconv_t conv = 0;
- char* in, *out = 0;
- size_t ilen = 0, olen = 0;
- (void) argc; (void) argv;
- iconv(conv, &in, &ilen, &out, &olen);
- return 0;
- }
- " ICONV_NOT_REQUIRES_CONST)
- if(ICONV_NOT_REQUIRES_CONST)
- set(ICONV_CONST " ")
- else()
- set(ICONV_CONST const)
- endif()
- endif()
- cmake_pop_check_state()
-endif()
-
if(${CMAKE_C_COMPILER_ID} STREQUAL "Intel" AND EXISTS
"${ROOT}/usr/include/math.h") # see
https://software.intel.com/en-us/forums/intel-c-compiler/topic/760979
file(READ "${ROOT}/usr/include/math.h" TMPTXT)
string(FIND "${TMPTXT}" "_LIB_VERSION_TYPE" FOUND_VERSION)
@@ -377,224 +338,6 @@ if(${CMAKE_C_COMPILER_ID} STREQUAL "Inte
endif()
endif()
-# Check for compiler flags
-function(removeCompilerFlag REGEX_EXPRESSION FLAG_TO_REMOVE OLD_FLAGS BUILD
NEW_FLAGS)
- if(${OLD_FLAGS} MATCHES "${REGEX_EXPRESSION}")
- string(REGEX REPLACE "${REGEX_EXPRESSION}" "" NEW_VAR
"${OLD_FLAGS}")
- set(${NEW_FLAGS} "${NEW_VAR}" PARENT_SCOPE)
- message(STATUS "Removed ${FLAG_TO_REMOVE} flag for ${BUILD}
build(s)")
- endif()
-endfunction()
-function(addCompilerFlag REGEX_EXPRESSION FLAG_TO_ADD OLD_FLAGS BUILD
NEW_FLAGS)
- if(NOT ${OLD_FLAGS} MATCHES "${REGEX_EXPRESSION}")
- set(${NEW_FLAGS} "${OLD_FLAGS} ${FLAG_TO_ADD}" PARENT_SCOPE)
- message(STATUS "Added ${FLAG_TO_ADD} flag for ${BUILD}
build(s)")
- endif()
-endfunction()
-function(addLinkerFlag REGEX_EXPRESSION FLAG_TO_ADD OLD_FLAGS NEW_FLAGS)
- if(NOT ${OLD_FLAGS} MATCHES "${REGEX_EXPRESSION}")
- set(${NEW_FLAGS} "${OLD_FLAGS} ${FLAG_TO_ADD}" PARENT_SCOPE)
- message(STATUS "Added ${FLAG_TO_ADD} flag")
- endif()
-endfunction()
-
-if(NOT CMAKE_C_FLAGS)
- set(CMAKE_C_FLAGS "")
-endif()
-if(MSVC)
- addCompilerFlag("/GF" "/GF" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
- addCompilerFlag("/W3" "/W3" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
- addCompilerFlag("/nologo" "/nologo" "${CMAKE_C_FLAGS}" "all"
CMAKE_C_FLAGS)
- addCompilerFlag("/Zi" "/Zi" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
- addCompilerFlag("/Oi" "/Oi" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-endif()
-set(X_CFLAGS "")
-
-if(${ENABLE_ASSERT} STREQUAL "NO")
- set(NDEBUG ON)
-elseif(${ENABLE_ASSERT} STREQUAL "YES" AND ${CMAKE_C_COMPILER_ID} STREQUAL
"Intel")
- set(X_CFLAGS "${X_CFLAGS} -wd279")
-endif()
-
-if(MSVC)
- # Remove all /Ox but /Oi on all, /Od on Debug and /Ox on others
- removeCompilerFlag("/O[0-9a-ce-hj-zA-CE-HJ-Z]+[ ]?" "/Ox"
"${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG)
- removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox"
"${CMAKE_C_FLAGS_RELEASE}" "Release" CMAKE_C_FLAGS_RELEASE)
- removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox"
"${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo"
CMAKE_C_FLAGS_RELWITHDEBINFO)
- removeCompilerFlag("/O[0-9a-hj-wyzA-HJ-WYZ]+[ ]?" "/Ox"
"${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL)
-
- addCompilerFlag("/Od" "/Od" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
- addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_RELEASE}" "Release"
CMAKE_C_FLAGS_RELEASE)
- addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
"RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO)
- addCompilerFlag("/Ox" "/Ox" "${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel"
CMAKE_C_FLAGS_MINSIZEREL)
-
- addCompilerFlag("/RTC1" "/RTC1" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
- addCompilerFlag("/D_DEBUG" "/D_DEBUG" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
-
- addCompilerFlag("/MDd" "/MDd" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
- addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_RELEASE}" "Release"
CMAKE_C_FLAGS_RELEASE)
- addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
"RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO)
- addCompilerFlag("/MD" "/MD" "${CMAKE_C_FLAGS_MINSIZEREL}" "MinSizeRel"
CMAKE_C_FLAGS_MINSIZEREL)
-else()
- # Remove existing -Ox flags
- removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_DEBUG}"
"Debug" CMAKE_C_FLAGS_DEBUG)
- removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_RELEASE}"
"Release" CMAKE_C_FLAGS_RELEASE)
- removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox"
"${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo"
CMAKE_C_FLAGS_RELWITHDEBINFO)
- removeCompilerFlag("-O[0-2sS]+[ ]?" "-Ox" "${CMAKE_C_FLAGS_MINSIZEREL}"
"MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL)
- if(${CMAKE_C_COMPILER_ID} MATCHES "^GNU|Clang|AppleClang$")
- addCompilerFlag("-O3" "-O3" "${CMAKE_C_FLAGS_RELEASE}"
"Release" CMAKE_C_FLAGS_RELEASE)
- addCompilerFlag("-O3" "-O3" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
"RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO)
- addCompilerFlag("-O3" "-O3" "${CMAKE_C_FLAGS_MINSIZEREL}"
"MinSizeRel" CMAKE_C_FLAGS_MINSIZEREL)
- elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
- addCompilerFlag("-O2" "-O2" "${CMAKE_C_FLAGS_RELEASE}"
CMAKE_C_FLAGS_RELEASE)
- addCompilerFlag("-O2" "-O2" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
CMAKE_C_FLAGS_RELWITHDEBINFO)
- addCompilerFlag("-O2" "-O2" "${CMAKE_C_FLAGS_MINSIZEREL}"
CMAKE_C_FLAGS_MINSIZEREL)
- endif()
-
- # Replace -g flag with -g3
- if(${CMAKE_C_FLAGS_DEBUG} MATCHES "-g$") # hack
- set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO
"${CMAKE_C_FLAGS_RELWITHDEBINFO} ")
- endif()
- removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
- removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
"RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO)
- if("${CMAKE_C_FLAGS_DEBUG}" STREQUAL "") # hack
- set(CMAKE_C_FLAGS_DEBUG "-g3")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-g3")
- message(STATUS "Added -g3 flag for Debug and RelWithDebugInfo
build(s)")
- else()
- addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_DEBUG}" "Debug"
CMAKE_C_FLAGS_DEBUG)
- addCompilerFlag("-g3" "-g3" "${CMAKE_C_FLAGS_RELWITHDEBINFO}"
"RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO)
- endif()
-
- if(NOT ${CMAKE_C_FLAGS_RELEASE} MATCHES "D_FORTIFY_SOURCE")
- cmake_push_check_state()
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}
-D_FORTIFY_SOURCE=2")
- check_c_compiler_flag("" HAVE_FORTIFY_SOURCE)
- cmake_pop_check_state()
- if(HAVE_FORTIFY_SOURCE)
- set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}
-D_FORTIFY_SOURCE=2")
- set(CMAKE_C_FLAGS_RELWITHDEBINFO
"${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_FORTIFY_SOURCE=2")
- set(CMAKE_C_FLAGS_MINSIZEREL
"${CMAKE_C_FLAGS_MINSIZEREL} -D_FORTIFY_SOURCE=2")
- message(STATUS "Added definition _FORTIFY_SOURCE=2 for
Release build")
- endif()
- endif()
-
- if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") # Add fomit-frame-pointer
to Clang compilation
- addCompilerFlag("-fomit-frame-pointer" "-fomit-frame-pointer"
"${CMAKE_C_FLAGS}" "Release" CMAKE_C_FLAGS)
- endif()
-
- if(${ENABLE_ASSERT} STREQUAL "YES" AND NOT MSVC) # Remove
-fomit-frame-pointer in assert builds
- removeCompilerFlag("-fomit-frame-pointer[ ]?"
"-fomit-frame-pointer" "${CMAKE_C_FLAGS}" "Debug" CMAKE_C_FLAGS)
- endif()
-endif()
-
-function(checkCompilerFlag Flag)
- if(NOT "${CMAKE_C_FLAGS}" MATCHES "${Flag}")
- check_c_compiler_flag("${Flag}" COMPILE_SUCCEEDED)
- if(COMPILE_SUCCEEDED)
- message(STATUS "Test for ${Flag} succeeded")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Flag}"
PARENT_SCOPE)
- else()
- message(STATUS "Test for ${Flag} failed")
- endif()
- endif()
-endfunction()
-
-if(${ENABLE_STRICT} STREQUAL "YES")
- if(${CMAKE_C_COMPILER_ID} MATCHES "^GNU|Clang|AppleClang$")
- checkCompilerFlag("-W")
- checkCompilerFlag("-Werror")
- checkCompilerFlag("-Wall")
- checkCompilerFlag("-Wextra")
- checkCompilerFlag("-Werror-implicit-function-declaration")
- checkCompilerFlag("-Wpointer-arith")
- checkCompilerFlag("-Wundef")
- checkCompilerFlag("-Wformat=2")
- checkCompilerFlag("-Wformat-overflow=1")
- checkCompilerFlag("-Wno-format-truncation")
- checkCompilerFlag("-Wno-format-nonliteral")
- if(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN")
- checkCompilerFlag("-Wno-error=suggest-attribute=format")
- checkCompilerFlag("-Wno-cast-function-type")
- endif()
- checkCompilerFlag("-Winit-self")
- checkCompilerFlag("-Winvalid-pch")
- checkCompilerFlag("-Wmissing-declarations")
- checkCompilerFlag("-Wmissing-format-attribute")
- checkCompilerFlag("-Wmissing-prototypes")
- checkCompilerFlag("-Wno-missing-field-initializers")
- checkCompilerFlag("-Wold-style-definition")
- checkCompilerFlag("-Wpacked")
- checkCompilerFlag("-Wunknown-pragmas")
- checkCompilerFlag("-Wvariadic-macros")
- checkCompilerFlag("-fstack-protector-all")
- checkCompilerFlag("-Wstack-protector")
- checkCompilerFlag("-Wpacked-bitfield-compat")
- checkCompilerFlag("-Wsync-nand")
- checkCompilerFlag("-Wjump-misses-init")
- checkCompilerFlag("-Wmissing-include-dirs")
- checkCompilerFlag("-Wlogical-op")
- checkCompilerFlag("-Wduplicated-cond")
- checkCompilerFlag("-Wduplicated-branches")
- checkCompilerFlag("-Wrestrict")
- checkCompilerFlag("-Wnested-externs")
- checkCompilerFlag("-Wno-char-subscripts")
- checkCompilerFlag("-Wunreachable-code")
- elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
- if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10)
- addLinkerFlag("-i_dynamic" "-i_dynamic"
"${LINK_OPTIONS}" LINK_OPTIONS)
- else()
- addLinkerFlag("-shared-intel" "-shared-intel"
"${LINK_OPTIONS}" LINK_OPTIONS)
- endif()
- if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1 AND
CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 11)
- addLinkerFlag("-wd1418" "-wd1418" "${LINK_OPTIONS}"
LINK_OPTIONS)
- endif()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -we140 -we147")
- if(CMAKE_C_COMPILER_VERSION VERSION_LESS 8 OR
CMAKE_C_COMPILER_VERSION VERSION_GREATER 17)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ansi")
- endif()
-
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -w2 -Wcheck")
- set(X_CFLAGS "${X_CFLAGS} -we266,181,810,271,593")
- set(X_CFLAGS "${X_CFLAGS} -Werror -Werror-all")
- set(X_CFLAGS "${X_CFLAGS} -wd1418,1419,981,193,1357")
-
- if(CMAKE_C_COMPILER_VERSION VERSION_EQUAL 11 OR
CMAKE_C_COMPILER_VERSION VERSION_EQUAL 15 OR CMAKE_C_COMPILER_VERSION
VERSION_EQUAL 17)
- set(X_CFLAGS "${X_CFLAGS},2259")
- endif()
- if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1 OR
CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 8.9)
- set(X_CFLAGS "${X_CFLAGS},1572")
- elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 9.1 OR
CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 9.9 OR (CMAKE_C_COMPILER_VERSION
VERSION_GREATER_EQUAL 10 AND CMAKE_C_COMPILER_VERSION VERSION_EQUAL 11))
- set(X_CFLAGS "${X_CFLAGS},1572,1599")
- endif()
- elseif(MSVC)
- checkCompilerFlag("/WX")
- endif()
-endif()
-
-if(NOT ${ENABLE_SANITIZER} STREQUAL "NO")
- if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
- string(TOLOWER "${ENABLE_SANITIZER}" ENABLE_SANITIZER_LOWER)
- checkCompilerFlag("-fsanitize=address")
- checkCompilerFlag("-fsanitize=${ENABLE_SANITIZER_LOWER}")
- checkCompilerFlag("-fno-omit-frame-pointer")
- add_compile_definitions(NO_ATOMIC_INSTRUCTIONS)
- else()
- message(FATAL_ERROR "Sanitizer only supported with GCC")
- endif()
-endif()
-
-if(NOT "${LINK_OPTIONS}" MATCHES "-Wl,-Bsymbolic-function")
- message(STATUS "Test if compiler supports -Wl,-Bsymbolic-functions
flag")
- set(PREV_LINK_OPTIONS "${LINK_OPTIONS}")
- set(LINK_OPTIONS "${LINK_OPTIONS} -Wl,-Bsymbolic-functions")
- check_c_compiler_flag("" HAVE_WL_BSYMBOLIC_FUNCTIONS)
- if(NOT HAVE_WL_BSYMBOLIC_FUNCTIONS)
- set(LINK_OPTIONS "${PREV_LINK_OPTIONS}")
- endif()
-endif()
-
set(PYTHON2 "AUTO" CACHE PATH "python2 is installed in DIR")
set(PYTHON3 "AUTO" CACHE PATH "python3 is installed in DIR")
message(STATUS "Checking major version of Python interpreter")
@@ -788,18 +531,6 @@ if(NOT ${ENABLE_TESTING} STREQUAL "NO")
set(HAVE_TESTING ON)
endif()
-find_package(BISON)
-if(BISON_FOUND)
- if(BISON_VERSION VERSION_LESS_EQUAL 2.4.3)
- removeCompilerFlag("-Wundef[ ]?" "-Wundef" "${CMAKE_C_FLAGS}"
"all" CMAKE_C_FLAGS)
- endif()
-elseif(${ENABLE_SQL} STREQUAL "YES")
- message(FATAL_ERROR "MonetDB/SQL requires bison")
-else()
- set(ENABLE_SQL "NO")
- message(STATUS "Bison not found")
-endif()
-
if(WIN32)
set(OS_DIRSEP "\\\\")
set(OS_PATHSEP ";")
@@ -828,6 +559,55 @@ if(APPLE)
endif()
# checks for libraries
+find_package(BISON)
+if(NOT BISON_FOUND)
+ if(${ENABLE_SQL} STREQUAL "YES")
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list