1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-05-08 22:37:04 +08:00
CMake/Modules/CMakeFortranCompilerABI.F
Brad King 7f0f382c55 Provide CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID on more compilers
Provide it whenever we can detect a target architecture from the
compiler during compiler inspection.  In order to avoid changing
existing IDs, do this only for compilers where we don't already
detect a target architecture during compiler identification.

Fixes: #17702
2025-03-25 09:30:36 -04:00

148 lines
4.9 KiB
Fortran

PROGRAM CMakeFortranCompilerABI
#if 0
! Address Size
#endif
#if defined(_LP64)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(_M_IA64)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(_M_X64)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(_M_AMD64)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(__x86_64__)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__)
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(_ILP32)
PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(_M_IX86)
PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(__i386__)
PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(__sparc) || defined(__sparc__)
PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
PRINT *, 'INFO:sizeof_dptr[4]'
#elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 8
PRINT *, 'INFO:sizeof_dptr[8]'
#elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 4
PRINT *, 'INFO:sizeof_dptr[4]'
#endif
#if 0
! Application Binary Interface
#endif
#if defined(__ELF__)
PRINT *, 'INFO:abi[ELF]'
#endif
#if 0
! Sync with
! Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
! Modules/CMakeCompilerABI.h
! Modules/CMakeFortranCompilerABI.F90
! Modules/Internal/CMakeParseCompilerArchitectureId.cmake
#endif
#if defined(__APPLE__) && defined(__arm64__)
# if defined(__ARM64_ARCH_8_32__)
PRINT *, 'INFO:arch[arm64_32]'
# elif defined(__arm64e__)
PRINT *, 'INFO:arch[arm64e]'
# else
PRINT *, 'INFO:arch[arm64]'
# endif
#elif defined(_MSC_VER) && defined(_M_ARM64EC)
PRINT *, 'INFO:arch[arm64ec]'
#elif defined(_MSC_VER) && defined(_M_ARM64)
PRINT *, 'INFO:arch[arm64]'
#elif defined(__arm64ec__)
PRINT *, 'INFO:arch[arm64ec]'
#elif defined(__aarch64__)
PRINT *, 'INFO:arch[aarch64]'
#elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__)
# if defined(__APPLE__) && defined(__ARM_ARCH_7K__)
PRINT *, 'INFO:arch[armv7k]'
# elif defined(__APPLE__) && defined(__ARM_ARCH_7S__)
PRINT *, 'INFO:arch[armv7s]'
# else
PRINT *, 'INFO:arch[armv7]'
# endif
#elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__)
PRINT *, 'INFO:arch[armv6]'
#elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__)
PRINT *, 'INFO:arch[armv5]'
#elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA)
PRINT *, 'INFO:arch[alpha]'
#elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \
defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64)
PRINT *, 'INFO:arch[x86_64]'
#elif defined(__i686) || defined(__i686__) || _M_IX86 == 600
PRINT *, 'INFO:arch[i686]'
#elif defined(__i586) || defined(__i586__) || _M_IX86 == 500
PRINT *, 'INFO:arch[i586]'
#elif defined(__i486) || defined(__i486__) || _M_IX86 == 400
PRINT *, 'INFO:arch[i486]'
#elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
PRINT *, 'INFO:arch[i386]'
#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
PRINT *, 'INFO:arch[ia64]'
#elif defined(__loongarch64)
PRINT *, 'INFO:arch[loongarch64]'
#elif defined(__loongarch__)
PRINT *, 'INFO:arch[loongarch32]'
#elif defined(__m68k__)
PRINT *, 'INFO:arch[m68k]'
#elif defined(__mips64) || defined(__mips64__)
# if defined(_MIPSEL)
PRINT *, 'INFO:arch[mips64el]'
# else
PRINT *, 'INFO:arch[mips64]'
# endif
#elif defined(__mips) || defined(__mips__)
# if defined(_MIPSEL)
PRINT *, 'INFO:arch[mipsel]'
# else
PRINT *, 'INFO:arch[mips]'
# endif
#elif defined(__riscv) && __riscv_xlen == 64
PRINT *, 'INFO:arch[riscv64]'
#elif defined(__riscv) && __riscv_xlen == 32
PRINT *, 'INFO:arch[riscv32]'
#elif defined(__s390x__)
PRINT *, 'INFO:arch[s390x]'
#elif defined(__s390__)
PRINT *, 'INFO:arch[s390]'
#elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__)
PRINT *, 'INFO:arch[sparcv9]'
#elif defined(__sparc) || defined(__sparc__)
PRINT *, 'INFO:arch[sparc]'
#elif defined(__hppa) || defined(__hppa__)
# if defined(__LP64__)
PRINT *, 'INFO:arch[parisc64]'
# else
PRINT *, 'INFO:arch[parisc]'
# endif
#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \
defined(_ARCH_PPC64)
# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
PRINT *, 'INFO:arch[ppc64le]'
# else
PRINT *, 'INFO:arch[ppc64]'
# endif
#elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \
defined(_ARCH_PPC)
# if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
PRINT *, 'INFO:arch[ppcle]'
# else
PRINT *, 'INFO:arch[ppc]'
# endif
#endif
PRINT *, 'ABI Detection'
END