# 191: type qualifier is meaningless on cast type
# 597: entity-kind "entity" will not be called for implicit or explicit conversions
# 2330: argument of type "type" is incompatible with parameter of type "type" (dropping qualifiers)
- set(warnCFLAGS "${warnCFLAGS} -wd1418 -wd191 -wd2196 -wd3179 -ww597 -ww2330")
+ # 11003: no IR in object file xxxx; was the source file compiled with xxxx
+ set(warnCFLAGS "${warnCFLAGS} -diag-disable=1418,191,2196,3179 -diag-warning=2330,597,11003")
endif()
set(warnCXXFLAGS "${warnCFLAGS} -Wall -Wextra -Wunused -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing")
endif()
else()
include(CheckIPOSupported)
- check_ipo_supported(RESULT ipo)
+ check_ipo_supported(RESULT ipo LANGUAGES C CXX)
if(ipo)
set(enable_lto ON)
endif()
list(APPEND CMAKE_C_COMPILE_OPTIONS_IPO "-flto=${LTO_EXTRA_FLAG}")
list(APPEND CMAKE_CXX_COMPILE_OPTIONS_IPO "-flto=${LTO_EXTRA_FLAG}")
endif()
+
+ # Activate fat-lto-objects in case LD and gfortran differ too much.
+ # Only test with GNU as it's the only case I know (clang+gfortran+lld)
+ execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_ID ERROR_VARIABLE LINKER_ID)
+ string(REGEX MATCH "GNU" LINKER_ID "${LINKER_ID}")
+ if(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU"
+ AND NOT "${LINKER_ID}" MATCHES "GNU")
+ list(APPEND CMAKE_Fortran_COMPILE_OPTIONS_IPO "-ffat-lto-objects")
+ endif()
+
# "Since version 4.9 gcc produces slim object files that only contain
# the intermediate representation. In order to handle archives of
# these objects you have to use the gcc wrappers:
set(TESH_OPTION "")
if(enable_coverage)
- find_program(GCOV_PATH gcov)
+ find_program(GCOV_PATH NAMES ENV{GCOV} gcov)
if(GCOV_PATH)
set(COVERAGE_COMMAND "${GCOV_PATH}" CACHE TYPE FILEPATH FORCE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCOVERAGE")