mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-30 18:29:37 -06:00
LLVM Flang (https://github.com/llvm/llvm-project/tree/main/flang) is an LLVM Fortran compiler that shares the same name as Flang (also known as Classic Flang). Classic Flang is in active development and is already identified by CMake as Flang. As such, LLVM Flang will be identified as `LLVMFlang`. Fixes: #22387
275 lines
10 KiB
FortranFixed
275 lines
10 KiB
FortranFixed
PROGRAM CMakeFortranCompilerId
|
|
#if 0
|
|
! Identify the compiler
|
|
#endif
|
|
#if defined(_MSC_VER)
|
|
PRINT *, 'INFO:simulate[MSVC]'
|
|
# if _MSC_VER >= 1900
|
|
PRINT *, 'INFO:simulate_version[019.00]'
|
|
# elif _MSC_VER >= 1800
|
|
PRINT *, 'INFO:simulate_version[018.00]'
|
|
# elif _MSC_VER >= 1700
|
|
PRINT *, 'INFO:simulate_version[017.00]'
|
|
# elif _MSC_VER >= 1600
|
|
PRINT *, 'INFO:simulate_version[016.00]'
|
|
# elif _MSC_VER >= 1500
|
|
PRINT *, 'INFO:simulate_version[015.00]'
|
|
# elif _MSC_VER >= 1400
|
|
PRINT *, 'INFO:simulate_version[014.00]'
|
|
# elif _MSC_VER >= 1310
|
|
PRINT *, 'INFO:simulate_version[013.01]'
|
|
# else
|
|
PRINT *, 'INFO:simulate_version[013.00]'
|
|
# endif
|
|
#endif
|
|
#if defined(__INTEL_LLVM_COMPILER)
|
|
PRINT *, 'INFO:compiler[IntelLLVM]'
|
|
! __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
|
|
! later. Look for 6 digit vs. 8 digit version number to decide encoding.
|
|
! VVVV is no smaller than the current year when a version is released.
|
|
# if __INTEL_LLVM_COMPILER < 1000000
|
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
|
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
|
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
|
|
# else
|
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
|
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
|
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
|
|
# endif
|
|
#elif defined(__INTEL_COMPILER) && __INTEL_COMPILER == 201900
|
|
PRINT *, 'INFO:compiler[IntelLLVM]'
|
|
! ifx 2021.1 forgot to define __INTEL_LLVM_COMPILER.
|
|
! Instead it defines __INTEL_COMPILER == 201900.
|
|
# define COMPILER_VERSION_MAJOR DEC(2021)
|
|
# define COMPILER_VERSION_MINOR DEC(1)
|
|
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
|
|
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
|
#elif defined(__INTEL_COMPILER) || defined(__ICC)
|
|
PRINT *, 'INFO:compiler[Intel]'
|
|
! __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later.
|
|
# if __INTEL_COMPILER < 2021
|
|
# 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
|
|
# else
|
|
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
|
|
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
|
|
! The third version component from --version is an update index,
|
|
! but no macro is provided for it.
|
|
# define COMPILER_VERSION_PATCH DEC(0)
|
|
# endif
|
|
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
|
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
|
# endif
|
|
#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]'
|
|
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
|
|
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
|
|
# if defined(_RELEASE_PATCHLEVEL)
|
|
# define COMPILER_VERSION_PATCH DEC(_RELEASE_PATCHLEVEL)
|
|
# endif
|
|
#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(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
|
|
PRINT *, 'INFO:compiler[LCC]'
|
|
# define COMPILER_VERSION_MAJOR DEC(1)
|
|
# define COMPILER_VERSION_MINOR DEC(__LCC__ - 100)
|
|
# if defined(__LCC_MINOR__)
|
|
# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
|
|
# endif
|
|
#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(__NVCOMPILER) || defined(__NVCOMPILER_LLVM__)
|
|
PRINT *, 'INFO:compiler[NVHPC]'
|
|
# if defined(__NVCOMPILER_MAJOR__)
|
|
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
|
|
# else
|
|
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
|
# endif
|
|
# if defined(__NVCOMPILER_MINOR__)
|
|
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
|
|
# else
|
|
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
|
# endif
|
|
# if defined(__NVCOMPILER_PATCHLEVEL__)
|
|
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
|
|
# elif defined(__PGIC_PATCHLEVEL__)
|
|
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
|
# 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(__FLANG)
|
|
PRINT *, 'INFO:compiler[Flang]'
|
|
# define COMPILER_VERSION_MAJOR DEC(__FLANG_MAJOR__)
|
|
# define COMPILER_VERSION_MINOR DEC(__FLANG_MINOR__)
|
|
# if defined(__FLANG_PATCHLEVEL__)
|
|
# define COMPILER_VERSION_PATCH DEC(__FLANG_PATCHLEVEL__)
|
|
# endif
|
|
#elif defined(__flang__)
|
|
PRINT *, 'INFO:compiler[LLVMFlang]'
|
|
# define COMPILER_VERSION_MAJOR DEC(__flang_major__)
|
|
# define COMPILER_VERSION_MINOR DEC(__flang_minor__)
|
|
# if defined(__flang_patchlevel__)
|
|
# define COMPILER_VERSION_PATCH DEC(__flang_patchlevel__)
|
|
# endif
|
|
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
|
|
PRINT *, 'INFO:compiler[VisualAge]'
|
|
#elif defined(__hpux) || defined(__hpux__)
|
|
PRINT *, 'INFO:compiler[HP]'
|
|
#elif defined(NAGFOR)
|
|
PRINT *, 'INFO:compiler[NAG]'
|
|
#define COMPILER_VERSION_MAJOR DEC(__NAG_COMPILER_RELEASE/10)
|
|
#define COMPILER_VERSION_MINOR DEC(__NAG_COMPILER_RELEASE % 10)
|
|
#define COMPILER_VERSION_PATCH DEC(__NAG_COMPILER_BUILD)
|
|
#elif defined(__FUJITSU)
|
|
PRINT *, 'INFO:compiler[Fujitsu]'
|
|
# if defined(__FRT_major__)
|
|
# define COMPILER_VERSION_MAJOR DEC(__FRT_major__)
|
|
# define COMPILER_VERSION_MINOR DEC(__FRT_minor__)
|
|
# define COMPILER_VERSION_PATCH DEC(__FRT_patchlevel__)
|
|
# elif defined(__FRT_version__)
|
|
PRINT *, 'INFO:compiler_version['//__FRT_version__//']'
|
|
# endif
|
|
#else
|
|
PRINT *, 'INFO:compiler[]'
|
|
#endif
|
|
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
|
PRINT *, 'INFO:compiler_wrapper[CrayPrgEnv]'
|
|
#endif
|
|
|
|
#if 0
|
|
! Identify the platform
|
|
#endif
|
|
#if defined(__linux) || defined(__linux__) || defined(linux)
|
|
PRINT *, 'INFO:platform[Linux]'
|
|
#elif defined(__CYGWIN__)
|
|
PRINT *, 'INFO:platform[Cygwin]'
|
|
#elif defined(__MINGW32__)
|
|
PRINT *, 'INFO:platform[MinGW]'
|
|
#elif defined(__APPLE__)
|
|
PRINT *, 'INFO:platform[Darwin]'
|
|
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
|
PRINT *, 'INFO:platform[Windows]'
|
|
#elif defined(__FreeBSD__) || defined(__FreeBSD)
|
|
PRINT *, 'INFO:platform[FreeBSD]'
|
|
#elif defined(__NetBSD__) || defined(__NetBSD)
|
|
PRINT *, 'INFO:platform[NetBSD]'
|
|
#elif defined(__OpenBSD__) || defined(__OPENBSD)
|
|
PRINT *, 'INFO:platform[OpenBSD]'
|
|
#elif defined(__sun) || defined(sun)
|
|
PRINT *, 'INFO:platform[SunOS]'
|
|
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
|
|
PRINT *, 'INFO:platform[AIX]'
|
|
#elif defined(__hpux) || defined(__hpux__)
|
|
PRINT *, 'INFO:platform[HP-UX]'
|
|
#elif defined(__HAIKU__)
|
|
PRINT *, 'INFO:platform[Haiku]'
|
|
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
|
PRINT *, 'INFO:platform[BeOS]'
|
|
#elif defined(__QNX__) || defined(__QNXNTO__)
|
|
PRINT *, 'INFO:platform[QNX]'
|
|
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
|
|
PRINT *, 'INFO:platform[Tru64]'
|
|
#elif defined(__riscos) || defined(__riscos__)
|
|
PRINT *, 'INFO:platform[RISCos]'
|
|
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
|
|
PRINT *, 'INFO:platform[SINIX]'
|
|
#elif defined(__UNIX_SV__)
|
|
PRINT *, 'INFO:platform[UNIX_SV]'
|
|
#elif defined(__bsdos__)
|
|
PRINT *, 'INFO:platform[BSDOS]'
|
|
#elif defined(_MPRAS) || defined(MPRAS)
|
|
PRINT *, 'INFO:platform[MP-RAS]'
|
|
#elif defined(__osf) || defined(__osf__)
|
|
PRINT *, 'INFO:platform[OSF1]'
|
|
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
|
|
PRINT *, 'INFO:platform[SCO_SV]'
|
|
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
|
|
PRINT *, 'INFO:platform[ULTRIX]'
|
|
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
|
|
PRINT *, 'INFO:platform[Xenix]'
|
|
#else
|
|
PRINT *, 'INFO:platform[]'
|
|
#endif
|
|
#if defined(_WIN32) && (defined(__INTEL_COMPILER) || defined(__ICC))
|
|
# if defined(_M_IA64)
|
|
PRINT *, 'INFO:arch[IA64]'
|
|
# elif defined(_M_X64) || defined(_M_AMD64)
|
|
PRINT *, 'INFO:arch[x64]'
|
|
# elif defined(_M_IX86)
|
|
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
|