Merge topic 'compiler-version-Fortran'
4cf3589e Help: Add notes for topic 'compiler-version-Fortran' f611406f Fortran: Test that CMAKE_Fortran_COMPILER_VERSION is set (#15372) c6e1f464 Fortran: Detect G95 compiler version 0033faac Fortran: Detect PGI compiler version 302d47b1 Fortran: Detect XL and VisualAge compiler versions 8c8b77a5 Fortran: Detect GNU compiler version 49562a77 Fortran: Detect PathScale compiler version aa77b631 Fortran: Detect SunPro compiler version 2e09c423 Fortran: Detect Intel compiler version e6ebc814 Fortran: Add infrastructure to detect compiler version (#15372)
This commit is contained in:
commit
6f9c4d17f8
6
Help/release/dev/compiler-version-Fortran.rst
Normal file
6
Help/release/dev/compiler-version-Fortran.rst
Normal file
@ -0,0 +1,6 @@
|
||||
compiler-version-Fortran
|
||||
------------------------
|
||||
|
||||
* The version of some Fortran compilers is now detected and stored in the
|
||||
:variable:`CMAKE_Fortran_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>`
|
||||
variable.
|
@ -409,12 +409,28 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
# Read the compiler identification string from the executable file.
|
||||
set(COMPILER_ID)
|
||||
set(COMPILER_VERSION)
|
||||
set(COMPILER_VERSION_MAJOR 0)
|
||||
set(COMPILER_VERSION_MINOR 0)
|
||||
set(COMPILER_VERSION_PATCH 0)
|
||||
set(COMPILER_VERSION_TWEAK 0)
|
||||
set(HAVE_COMPILER_VERSION_MAJOR 0)
|
||||
set(HAVE_COMPILER_VERSION_MINOR 0)
|
||||
set(HAVE_COMPILER_VERSION_PATCH 0)
|
||||
set(HAVE_COMPILER_VERSION_TWEAK 0)
|
||||
set(DIGIT_VALUE_1 1)
|
||||
set(DIGIT_VALUE_2 10)
|
||||
set(DIGIT_VALUE_3 100)
|
||||
set(DIGIT_VALUE_4 1000)
|
||||
set(DIGIT_VALUE_5 10000)
|
||||
set(DIGIT_VALUE_6 100000)
|
||||
set(DIGIT_VALUE_7 1000000)
|
||||
set(DIGIT_VALUE_8 10000000)
|
||||
set(PLATFORM_ID)
|
||||
set(ARCHITECTURE_ID)
|
||||
set(SIMULATE_ID)
|
||||
set(SIMULATE_VERSION)
|
||||
file(STRINGS ${file}
|
||||
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 6 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 38 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||
set(COMPILER_ID_TWICE)
|
||||
foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
|
||||
if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
|
||||
@ -433,6 +449,15 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
string(REGEX REPLACE "^0+([0-9])" "\\1" COMPILER_VERSION "${CMAKE_MATCH_1}")
|
||||
string(REGEX REPLACE "\\.0+([0-9])" ".\\1" COMPILER_VERSION "${COMPILER_VERSION}")
|
||||
endif()
|
||||
foreach(comp MAJOR MINOR PATCH TWEAK)
|
||||
foreach(digit 1 2 3 4 5 6 7 8 9)
|
||||
if("${info}" MATCHES "INFO:compiler_version_${comp}_digit_${digit}\\[([0-9])\\]")
|
||||
set(value ${CMAKE_MATCH_1})
|
||||
math(EXPR COMPILER_VERSION_${comp} "${COMPILER_VERSION_${comp}} + ${value} * ${DIGIT_VALUE_${digit}}")
|
||||
set(HAVE_COMPILER_VERSION_${comp} 1)
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
if("${info}" MATCHES "INFO:simulate\\[([^]\"]*)\\]")
|
||||
set(SIMULATE_ID "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
@ -445,6 +470,20 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Construct compiler version from components if needed.
|
||||
if(NOT DEFINED COMPILER_VERSION AND HAVE_COMPILER_VERSION_MAJOR)
|
||||
set(COMPILER_VERSION "${COMPILER_VERSION_MAJOR}")
|
||||
if(HAVE_COMPILER_VERSION_MINOR)
|
||||
set(COMPILER_VERSION "${COMPILER_VERSION}.${COMPILER_VERSION_MINOR}")
|
||||
if(HAVE_COMPILER_VERSION_PATCH)
|
||||
set(COMPILER_VERSION "${COMPILER_VERSION}.${COMPILER_VERSION_PATCH}")
|
||||
if(HAVE_COMPILER_VERSION_TWEAK)
|
||||
set(COMPILER_VERSION "${COMPILER_VERSION}.${COMPILER_VERSION_TWEAK}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Detect the exact architecture from the PE header.
|
||||
if(WIN32)
|
||||
# The offset to the PE signature is stored at 0x3c.
|
||||
|
@ -119,6 +119,47 @@ if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
|
||||
set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_NAG "-V")
|
||||
set(CMAKE_Fortran_COMPILER_ID_VENDOR_REGEX_NAG "NAG Fortran Compiler")
|
||||
|
||||
set(_version_info "")
|
||||
foreach(m MAJOR MINOR PATCH TWEAK)
|
||||
set(_COMP "_${m}")
|
||||
set(_version_info "${_version_info}
|
||||
#if defined(COMPILER_VERSION${_COMP})")
|
||||
foreach(d 1 2 3 4 5 6 7 8)
|
||||
set(_version_info "${_version_info}
|
||||
# undef DEC
|
||||
# undef HEX
|
||||
# define DEC(n) DEC_${d}(n)
|
||||
# define HEX(n) HEX_${d}(n)
|
||||
# if COMPILER_VERSION${_COMP} == 0
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[0]'
|
||||
# elif COMPILER_VERSION${_COMP} == 1
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[1]'
|
||||
# elif COMPILER_VERSION${_COMP} == 2
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[2]'
|
||||
# elif COMPILER_VERSION${_COMP} == 3
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[3]'
|
||||
# elif COMPILER_VERSION${_COMP} == 4
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[4]'
|
||||
# elif COMPILER_VERSION${_COMP} == 5
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[5]'
|
||||
# elif COMPILER_VERSION${_COMP} == 6
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[6]'
|
||||
# elif COMPILER_VERSION${_COMP} == 7
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[7]'
|
||||
# elif COMPILER_VERSION${_COMP} == 8
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[8]'
|
||||
# elif COMPILER_VERSION${_COMP} == 9
|
||||
PRINT *, 'INFO:compiler_version${_COMP}_digit_${d}[9]'
|
||||
# endif
|
||||
")
|
||||
endforeach()
|
||||
set(_version_info "${_version_info}
|
||||
#endif")
|
||||
endforeach()
|
||||
set(CMAKE_Fortran_COMPILER_ID_VERSION_INFO "${_version_info}")
|
||||
unset(_version_info)
|
||||
unset(_COMP)
|
||||
|
||||
# Try to identify the compiler.
|
||||
set(CMAKE_Fortran_COMPILER_ID)
|
||||
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake)
|
||||
|
@ -4,6 +4,17 @@
|
||||
#endif
|
||||
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
||||
PRINT *, 'INFO:compiler[Intel]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
|
||||
# if defined(__INTEL_COMPILER_UPDATE)
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
|
||||
# else
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
|
||||
# endif
|
||||
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
||||
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
||||
# endif
|
||||
|
||||
# if defined(_MSC_VER)
|
||||
PRINT *, 'INFO:simulate[MSVC]'
|
||||
# if _MSC_VER >= 1800
|
||||
@ -22,28 +33,59 @@
|
||||
PRINT *, 'INFO:simulate_version[013.00]'
|
||||
# endif
|
||||
# endif
|
||||
#elif defined(__SUNPRO_F90) || defined(__SUNPRO_F95)
|
||||
#elif defined(__SUNPRO_F95)
|
||||
PRINT *, 'INFO:compiler[SunPro]'
|
||||
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F95>>8)
|
||||
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F95>>4 & 0xF)
|
||||
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F95 & 0xF)
|
||||
#elif defined(__SUNPRO_F90)
|
||||
PRINT *, 'INFO:compiler[SunPro]'
|
||||
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_F90>>8)
|
||||
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_F90>>4 & 0xF)
|
||||
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_F90 & 0xF)
|
||||
#elif defined(_CRAYFTN)
|
||||
PRINT *, 'INFO:compiler[Cray]'
|
||||
#elif defined(__G95__)
|
||||
PRINT *, 'INFO:compiler[G95]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__G95__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__G95_MINOR__)
|
||||
#elif defined(__PATHSCALE__)
|
||||
PRINT *, 'INFO:compiler[PathScale]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
|
||||
# if defined(__PATHCC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
|
||||
# endif
|
||||
#elif defined(__ABSOFT__)
|
||||
PRINT *, 'INFO:compiler[Absoft]'
|
||||
#elif defined(__GNUC__)
|
||||
PRINT *, 'INFO:compiler[GNU]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||
# if defined(__GNUC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||
# endif
|
||||
#elif defined(__IBMC__)
|
||||
# if defined(__COMPILER_VER__)
|
||||
PRINT *, 'INFO:compiler[zOS]'
|
||||
# elif __IBMC__ >= 800
|
||||
PRINT *, 'INFO:compiler[XL]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
||||
# else
|
||||
PRINT *, 'INFO:compiler[VisualAge]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
|
||||
# endif
|
||||
#elif defined(__PGI)
|
||||
PRINT *, 'INFO:compiler[PGI]'
|
||||
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
||||
# if defined(__PGIC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
||||
# endif
|
||||
#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION)
|
||||
PRINT *, 'INFO:compiler[MIPSpro]'
|
||||
# if 0
|
||||
@ -134,4 +176,26 @@
|
||||
PRINT *, 'INFO:arch[X86]'
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
! Encode compiler version digits
|
||||
#endif
|
||||
#define DEC_8(n) (((n) / 10000000) % 10)
|
||||
#define DEC_7(n) (((n) / 1000000) % 10)
|
||||
#define DEC_6(n) (((n) / 100000) % 10)
|
||||
#define DEC_5(n) (((n) / 10000) % 10)
|
||||
#define DEC_4(n) (((n) / 1000) % 10)
|
||||
#define DEC_3(n) (((n) / 100) % 10)
|
||||
#define DEC_2(n) (((n) / 10) % 10)
|
||||
#define DEC_1(n) (((n) ) % 10)
|
||||
#define HEX_8(n) ((n)>>28 & 0xF)
|
||||
#define HEX_7(n) ((n)>>24 & 0xF)
|
||||
#define HEX_6(n) ((n)>>20 & 0xF)
|
||||
#define HEX_5(n) ((n)>>16 & 0xF)
|
||||
#define HEX_4(n) ((n)>>12 & 0xF)
|
||||
#define HEX_3(n) ((n)>>8 & 0xF)
|
||||
#define HEX_2(n) ((n)>>4 & 0xF)
|
||||
#define HEX_1(n) ((n) & 0xF)
|
||||
@CMAKE_Fortran_COMPILER_ID_VERSION_INFO@
|
||||
|
||||
END
|
||||
|
@ -4,6 +4,7 @@ project(CompilerIdFortran Fortran)
|
||||
foreach(v
|
||||
CMAKE_Fortran_COMPILER
|
||||
CMAKE_Fortran_COMPILER_ID
|
||||
CMAKE_Fortran_COMPILER_VERSION
|
||||
)
|
||||
if(${v})
|
||||
message(STATUS "${v}=[${${v}}]")
|
||||
@ -11,12 +12,3 @@ foreach(v
|
||||
message(SEND_ERROR "${v} not set!")
|
||||
endif()
|
||||
endforeach()
|
||||
foreach(v
|
||||
CMAKE_Fortran_COMPILER_VERSION
|
||||
)
|
||||
if(${v})
|
||||
message(STATUS "${v}=[${${v}}]")
|
||||
else()
|
||||
message(WARNING "${v} not set!")
|
||||
endif()
|
||||
endforeach()
|
||||
|
Loading…
x
Reference in New Issue
Block a user