2020-01-01 20:18:53 +08:00
# This module checks against various known compilers and their respective
2017-01-06 18:48:40 +08:00
# flags to determine any specific flags needing to be set.
#
# 1. If FPE traps are enabled either abort or disable them
# 2. Specify fixed form if needed
# 3. Ensure that Release builds use O2 instead of O3
#
#=============================================================================
# Author: Chuck Atkins
# Copyright 2011
#=============================================================================
macro ( CheckLAPACKCompilerFlags )
set ( FPE_EXIT FALSE )
2021-09-25 04:03:59 +08:00
# FORTRAN ILP default
if ( FORTRAN_ILP )
if ( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
if ( WIN32 )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} /integer-size:64" )
else ( )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -integer-size 64" )
endif ( )
else ( )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdefault-integer-8" )
endif ( )
endif ( )
2017-01-06 18:48:40 +08:00
# GNU Fortran
if ( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
if ( "${CMAKE_Fortran_FLAGS}" MATCHES "-ffpe-trap=[izoupd]" )
set ( FPE_EXIT TRUE )
endif ( )
# Intel Fortran
elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
if ( "${CMAKE_Fortran_FLAGS}" MATCHES "[-/]fpe(-all=|)0" )
set ( FPE_EXIT TRUE )
endif ( )
# SunPro F95
elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
if ( ( "${CMAKE_Fortran_FLAGS}" MATCHES "-ftrap=" ) AND
NOT ( "${CMAKE_Fortran_FLAGS}" MATCHES "-ftrap=(%|)none" ) )
set ( FPE_EXIT TRUE )
elseif ( NOT ( CMAKE_Fortran_FLAGS MATCHES "-ftrap=" ) )
message ( STATUS "Disabling FPE trap handlers with -ftrap=%none" )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ftrap=%none"
C A C H E S T R I N G " F l a g s f o r F o r t r a n c o m p i l e r . " F O R C E )
endif ( )
# IBM XL Fortran
elseif ( ( CMAKE_Fortran_COMPILER_ID STREQUAL "VisualAge" ) OR # CMake 2.6
( C M A K E _ F o r t r a n _ C O M P I L E R _ I D S T R E Q U A L " X L " ) ) # CMake 2.8
if ( "${CMAKE_Fortran_FLAGS}" MATCHES "-qflttrap=[a-zA-Z:]:enable" )
set ( FPE_EXIT TRUE )
endif ( )
if ( NOT ( "${CMAKE_Fortran_FLAGS}" MATCHES "-qfixed" ) )
message ( STATUS "Enabling fixed format F90/F95 with -qfixed" )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfixed"
C A C H E S T R I N G " F l a g s f o r F o r t r a n c o m p i l e r . " F O R C E )
endif ( )
# HP Fortran
elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "HP" )
if ( "${CMAKE_Fortran_FLAGS}" MATCHES "\\+fp_exception" )
set ( FPE_EXIT TRUE )
endif ( )
if ( NOT ( "${CMAKE_Fortran_FLAGS}" MATCHES "\\+fltconst_strict" ) )
message ( STATUS "Enabling strict float conversion with +fltconst_strict" )
set ( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} +fltconst_strict"
C A C H E S T R I N G " F l a g s f o r F o r t r a n c o m p i l e r . " F O R C E )
endif ( )
# Most versions of cmake don't have good default options for the HP compiler
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -g"
C A C H E S T R I N G " F l a g s u s e d b y t h e c o m p i l e r d u r i n g d e b u g b u i l d s " F O R C E )
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_MINSIZEREL} +Osize"
C A C H E S T R I N G " F l a g s u s e d b y t h e c o m p i l e r d u r i n g r e l e a s e m i n s i z e b u i l d s " F O R C E )
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_RELEASE} +O2"
C A C H E S T R I N G " F l a g s u s e d b y t h e c o m p i l e r d u r i n g r e l e a s e b u i l d s " F O R C E )
set ( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} +O2 -g"
C A C H E S T R I N G " F l a g s u s e d b y t h e c o m p i l e r d u r i n g r e l e a s e w i t h d e b u g i n f o b u i l d s " F O R C E )
else ( )
endif ( )
if ( "${CMAKE_Fortran_FLAGS_RELEASE}" MATCHES "O[3-9]" )
message ( STATUS "Reducing RELEASE optimization level to O2" )
string ( REGEX REPLACE "O[3-9]" "O2" CMAKE_Fortran_FLAGS_RELEASE
" $ { C M A K E _ F o r t r a n _ F L A G S _ R E L E A S E } " )
set ( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}"
C A C H E S T R I N G " F l a g s u s e d b y t h e c o m p i l e r d u r i n g r e l e a s e b u i l d s " F O R C E )
endif ( )
if ( FPE_EXIT )
message ( FATAL_ERROR "Floating Point Exception (FPE) trap handlers are currently explicitly enabled in the compiler flags. LAPACK is designed to check for and handle these cases internally and enabling these traps will likely cause LAPACK to crash. Please re-configure with floating point exception trapping disabled." )
endif ( )
endmacro ( )