Changeset: 0bc4e3191704 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0bc4e3191704 Modified Files: CMakeLists.txt common/options/CMakeLists.txt common/utils/CMakeLists.txt monetdb5/mal/CMakeLists.txt monetdb5/modules/atoms/CMakeLists.txt monetdb5/modules/kernel/CMakeLists.txt monetdb5/modules/mal/CMakeLists.txt monetdb5/optimizer/CMakeLists.txt monetdb5/scheduler/CMakeLists.txt sql/common/CMakeLists.txt sql/server/CMakeLists.txt sql/storage/CMakeLists.txt sql/storage/bat/CMakeLists.txt Branch: cmake-fun Log Message:
Compiles, installs and runs on my Linux machine. When adding a target_link_library, the target becomes a dependency automatically. diffs (truncated from 1171 to 300 lines): diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,14 +30,9 @@ include(TestLargeFiles REQUIRED) include(TestBigEndian REQUIRED) cmake_policy(SET CMP0075 NEW) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) # TODO check this -# Save default cmake options in the beggining +# Save default cmake options in the begining set(PREV_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") -set(PREV_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}") -set(PREV_CMAKE_REQUIRED_LINK_OPTIONS "${CMAKE_REQUIRED_LINK_OPTIONS}") -set(PREV_CMAKE_EXTRA_INCLUDE_FILES "${CMAKE_EXTRA_INCLUDE_FILES}") -set(PREV_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") function(MT_clibsToCmake INPUT_INCS OUTPUT_INCS) # Remove -I before the include path string(LENGTH "${INPUT_INCS}" INPUT_INCS_LENGTH) @@ -53,8 +48,6 @@ string(TOLOWER "${CMAKE_SYSTEM_NAME}" CM string(TOLOWER "${CMAKE_C_COMPILER_ID}" CMAKE_C_COMPILER_ID_LOWER) set("HOST" "${CMAKE_SYSTEM_PROCESSOR}-pc-${CMAKE_SYSTEM_NAME_LOWER}-${CMAKE_C_COMPILER_ID_LOWER}") -set(MONETDB_RELEASE "unreleased") - # Change these variables between releases set(MONETDB_VERSION_MAJOR "11") set(MONETDB_VERSION "${MONETDB_VERSION_MAJOR}.34.0") @@ -98,31 +91,19 @@ if(NOT "${CMAKE_C_COMPILER_ID}" MATCHES message(WARNING "Compiler potentially not (correctly) recognized") endif() -if("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-gcc") # Intel compiler hack -elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") - add_definitions(-D_GNU_SOURCE) +# Set default build options +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to Debug as none was selected") + set(CMAKE_BUILD_TYPE Debug CACHE STRING "The type of build" FORCE) endif() -add_definitions(-D_REENTRANT) - -# Set default build options -if("${CMAKE_BUILD_TYPE}" MATCHES "^Debug|$") +if(EXISTS "${CMAKE_SOURCE_DIR}/vertoo.data") set(DFT_STRICT "YES") set(DFT_ASSERT "YES") - set(DFT_DEBUG "YES") - set(DFT_OPTIMIZE "NO") - set(DFT_DEVELOPER "YES") else() set(DFT_STRICT "NO") set(DFT_ASSERT "NO") - set(DFT_DEBUG "NO") - set(DFT_OPTIMIZE "NO") - set(DFT_DEVELOPER "NO") endif() -set(ENABLE_DEVELOPER "${DFT_DEVELOPER}" CACHE STRING "Build and install programs that are only useful for MonetDB development (default=yes for development sources)") -set(ENABLE_TESTING "AUTO" CACHE STRING "Enable support for testing (default=auto)") - # modules to use set(ENABLE_MAPI "YES" CACHE STRING "Enable MAPI (default=yes)") if(NOT ${ENABLE_MAPI} STREQUAL "NO") @@ -182,9 +163,7 @@ if(NOT ${ENABLE_CONSOLE} STREQUAL "NO") set(HAVE_CONSOLE ON) endif() -set(ENABLE_DEBUG "${DFT_DEBUG}" CACHE STRING "Enable full debugging (default=yes for development sources)") set(ENABLE_ASSERT "${DFT_ASSERT}" CACHE STRING "Enable assertions in the code (default=yes for development sources)") -set(ENABLE_OPTIMIZE "${DFT_OPTIMIZE}" CACHE STRING "Enable extra optimization (default=no)") set(ENABLE_STRICT "${DFT_STRICT}" CACHE STRING "Enable strict compiler flags (default=yes for development sources)") set(ENABLE_SANITIZER "NO" CACHE STRING "Enable support for the GCC address sanitizer (default=no)") set(ENABLE_STATIC_ANALYSIS "NO" CACHE STRING "Configure for static code analysis (use only if you know what you are doing)") @@ -201,6 +180,15 @@ else() message(FATAL_ERROR "PASSWORD_BACKEND invalid, choose one of MD5, SHA1, RIPEMD160, SHA224, SHA256, SHA384, SHA512") endif() +if(${CMAKE_C_COMPILER_ID} STREQUAL "Intel") + add_compile_options(-no-gcc) # Intel compiler hack +elseif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") + add_compile_definitions(_GNU_SOURCE) +endif() +if(NOT MSVC) + add_compile_definitions(_REENTRANT) +endif() + opj_test_large_files(_LARGE_FILES) opj_test_large_files(_LARGEFILE_SOURCE) opj_test_large_files(_FILE_OFFSET_BITS) @@ -221,7 +209,10 @@ check_c_source_compiles(" return 0; }" HAVE___BUILTIN_ADD_OVERFLOW) -set(FLEXIBLE_ARRAY_MEMBER ON) # We compile according to C99 standard onwards +set(FLEXIBLE_ARRAY_MEMBER ON) # We compile according to C99 standard +if(MSVC) + set(__attribute__(a) ON) +endif() # https://github.com/Unidata/netcdf-c/commit/b432a527c4a38af45498691a44c5a88961b9c751 message(STATUS "Test if char type is unsigned or not") @@ -235,7 +226,7 @@ check_c_source_compiles(" return 0; }" __CHAR_UNSIGNED__) if(__CHAR_UNSIGNED__) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__CHAR_UNSIGNED__") + add_compile_definitions(__CHAR_UNSIGNED__) endif() message(STATUS "Test if __hidden macro is supported") @@ -271,22 +262,105 @@ if(NOT NAN_CAN_BE_USED_AS_INITIALIZER) set(NAN_CANNOT_BE_USED_AS_INITIALIZER ON) 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) + if(FOUND_VERSION) + set(INTEL_MATH_H_HACK ON) + endif() +endif() + # Check for compiler flags -set(X_CFLAGS "${CMAKE_C_FLAGS}") +if(NOT CMAKE_C_FLAGS) + set(CMAKE_C_FLAGS " ") +endif() +set(X_CFLAGS "") + +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() + +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 existing -Ox flags + removeCompilerFlag("/O[0-1sS]+[ ]?" "/Ox" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + addCompilerFlag("/O2" "/O2" "${CMAKE_C_FLAGS_RELEASE}" CMAKE_C_FLAGS_RELEASE) +else() + 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() +endif() + +if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ") # hack + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ") + removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_DEBUG}" "Debug" CMAKE_C_FLAGS_DEBUG) + removeCompilerFlag("-g[ ]" "-g" "${CMAKE_C_FLAGS_RELWITHDEBINFO}" "RelWithDebugInfo" CMAKE_C_FLAGS_RELWITHDEBINFO) + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ") # hack + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ") + 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(${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() + +if(NOT MSVC AND 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() function(checkCompilerFlag 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) - set(X_CFLAGS "${X_CFLAGS} ${Flag}" PARENT_SCOPE) - else() - message(STATUS "Test for ${Flag} failed") + 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}" STREQUAL "GNU") + if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU") checkCompilerFlag("-Werror") checkCompilerFlag("-Wall") checkCompilerFlag("-Wextra") @@ -324,17 +398,17 @@ if(${ENABLE_STRICT} STREQUAL "YES") checkCompilerFlag("-Wrestrict") checkCompilerFlag("-Wnested-externs") checkCompilerFlag("-Wno-char-subscripts") - if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") checkCompilerFlag("-Wunreachable-code") endif() - elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Intel") + elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Intel") if(CMAKE_C_COMPILER_VERSION VERSION_LESS 10) - link_libraries("-i_dynamic") + add_link_options(-i_dynamic) else() - link_libraries("-shared-intel") + add_link_options(-shared-intel) endif() if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1 AND CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL 11) - link_libraries("-wd1418") + add_link_options(-wd1418) 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) @@ -359,127 +433,25 @@ endif() if(NOT ${ENABLE_SANITIZER} STREQUAL "NO") if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") - if(${ENABLE_SANITIZER} STREQUAL "YES") - checkCompilerFlag("-fsanitize=address") - checkCompilerFlag("-fsanitize=${ENABLE_SANITIZER}") - if(NOT ${X_CFLAGS} MATCHES "*-fsanitize=*") - message(FATAL_ERROR " Sanitizer not supported by this compiler") - endif() - checkCompilerFlag("-fno-omit-frame-pointer") - endif() + checkCompilerFlag("-fsanitize=address") + checkCompilerFlag("-fsanitize=${ENABLE_SANITIZER}") + checkCompilerFlag("-fno-omit-frame-pointer") + add_compile_definitions(NO_ATOMIC_INSTRUCTIONS) else() message(FATAL_ERROR " Sanitizer only supported with GCC") endif() endif() -if(${CMAKE_SYSTEM_NAME} STREQUAL "Intel") # see https://software.intel.com/en-us/forums/intel-c-compiler/topic/760979 - if(EXISTS "${ROOT}/usr/include/math.h") - file(READ "${ROOT}/usr/include/math.h" TMPTXT) - string(FIND "${TMPTXT}" "_LIB_VERSION_TYPE" FOUND_VERSION) - if(FOUND_VERSION) - set(INTEL_MATH_H_HACK ON) - endif() - endif() -endif() - message(STATUS "Test if compiler supports -Wl,-Bsymbolic-functions flag") -set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Wl,-Bsymbolic-functions") +cmake_push_check_state() +add_link_options(-Wl,-Bsymbolic-functions) check_c_compiler_flag("" HAVE_WL_BSYMBOLIC_FUNCTIONS) if(NOT HAVE_WL_BSYMBOLIC_FUNCTIONS) - set(CMAKE_REQUIRED_FLAGS "${PREV_CMAKE_REQUIRED_FLAGS}") -endif() - -if(${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN") - set(NO_UNDEFINED "-no-undefined") -endif() -if(MSVC OR ${CMAKE_SYSTEM_NAME} STREQUAL "CYGWIN") - set(WIN32 ON) -endif() -if(MSVC) - set(__attribute__(a) ON) -endif() - _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list