CMakeFortranCompilerABI.F 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. PROGRAM CMakeFortranCompilerABI
  2. #if 0
  3. ! Address Size
  4. #endif
  5. #if defined(_LP64)
  6. PRINT *, 'INFO:sizeof_dptr[8]'
  7. #elif defined(_M_IA64)
  8. PRINT *, 'INFO:sizeof_dptr[8]'
  9. #elif defined(_M_X64)
  10. PRINT *, 'INFO:sizeof_dptr[8]'
  11. #elif defined(_M_AMD64)
  12. PRINT *, 'INFO:sizeof_dptr[8]'
  13. #elif defined(__x86_64__)
  14. PRINT *, 'INFO:sizeof_dptr[8]'
  15. #elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__)
  16. PRINT *, 'INFO:sizeof_dptr[8]'
  17. #elif defined(_ILP32)
  18. PRINT *, 'INFO:sizeof_dptr[4]'
  19. #elif defined(_M_IX86)
  20. PRINT *, 'INFO:sizeof_dptr[4]'
  21. #elif defined(__i386__)
  22. PRINT *, 'INFO:sizeof_dptr[4]'
  23. #elif defined(__sparc) || defined(__sparc__)
  24. PRINT *, 'INFO:sizeof_dptr[4]'
  25. #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
  26. PRINT *, 'INFO:sizeof_dptr[8]'
  27. #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
  28. PRINT *, 'INFO:sizeof_dptr[4]'
  29. #elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 8
  30. PRINT *, 'INFO:sizeof_dptr[8]'
  31. #elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ == 4
  32. PRINT *, 'INFO:sizeof_dptr[4]'
  33. #endif
  34. #if 0
  35. ! Application Binary Interface
  36. #endif
  37. #if defined(__ELF__)
  38. PRINT *, 'INFO:abi[ELF]'
  39. #endif
  40. #if 0
  41. ! Sync with
  42. ! Help/variable/CMAKE_LANG_COMPILER_ARCHITECTURE_ID.rst
  43. ! Modules/CMakeCompilerABI.h
  44. ! Modules/CMakeFortranCompilerABI.F90
  45. ! Modules/Internal/CMakeParseCompilerArchitectureId.cmake
  46. #endif
  47. #if defined(__APPLE__) && defined(__arm64__)
  48. # if defined(__ARM64_ARCH_8_32__)
  49. PRINT *, 'INFO:arch[arm64_32]'
  50. # elif defined(__arm64e__)
  51. PRINT *, 'INFO:arch[arm64e]'
  52. # else
  53. PRINT *, 'INFO:arch[arm64]'
  54. # endif
  55. #elif defined(_MSC_VER) && defined(_M_ARM64EC)
  56. PRINT *, 'INFO:arch[arm64ec]'
  57. #elif defined(_MSC_VER) && defined(_M_ARM64)
  58. PRINT *, 'INFO:arch[arm64]'
  59. #elif defined(__arm64ec__)
  60. PRINT *, 'INFO:arch[arm64ec]'
  61. #elif defined(__aarch64__)
  62. PRINT *, 'INFO:arch[aarch64]'
  63. #elif __ARM_ARCH == 7 || _M_ARM == 7 || defined(__ARM_ARCH_7__)
  64. # if defined(__APPLE__) && defined(__ARM_ARCH_7K__)
  65. PRINT *, 'INFO:arch[armv7k]'
  66. # elif defined(__APPLE__) && defined(__ARM_ARCH_7S__)
  67. PRINT *, 'INFO:arch[armv7s]'
  68. # else
  69. PRINT *, 'INFO:arch[armv7]'
  70. # endif
  71. #elif __ARM_ARCH == 6 || _M_ARM == 6 || defined(__ARM_ARCH_6__)
  72. PRINT *, 'INFO:arch[armv6]'
  73. #elif __ARM_ARCH == 5 || _M_ARM == 5 || defined(__ARM_ARCH_5__)
  74. PRINT *, 'INFO:arch[armv5]'
  75. #elif defined(__alpha) || defined(__alpha) || defined(_M_ALPHA)
  76. PRINT *, 'INFO:arch[alpha]'
  77. #elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || \
  78. defined(__amd64__) || defined(_M_X64) || defined(_M_AMD64)
  79. PRINT *, 'INFO:arch[x86_64]'
  80. #elif defined(__i686) || defined(__i686__) || _M_IX86 == 600
  81. PRINT *, 'INFO:arch[i686]'
  82. #elif defined(__i586) || defined(__i586__) || _M_IX86 == 500
  83. PRINT *, 'INFO:arch[i586]'
  84. #elif defined(__i486) || defined(__i486__) || _M_IX86 == 400
  85. PRINT *, 'INFO:arch[i486]'
  86. #elif defined(__i386) || defined(__i386__) || defined(_M_IX86)
  87. PRINT *, 'INFO:arch[i386]'
  88. #elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
  89. PRINT *, 'INFO:arch[ia64]'
  90. #elif defined(__loongarch64)
  91. PRINT *, 'INFO:arch[loongarch64]'
  92. #elif defined(__loongarch__)
  93. PRINT *, 'INFO:arch[loongarch32]'
  94. #elif defined(__m68k__)
  95. PRINT *, 'INFO:arch[m68k]'
  96. #elif defined(__mips64) || defined(__mips64__)
  97. # if defined(_MIPSEL)
  98. PRINT *, 'INFO:arch[mips64el]'
  99. # else
  100. PRINT *, 'INFO:arch[mips64]'
  101. # endif
  102. #elif defined(__mips) || defined(__mips__)
  103. # if defined(_MIPSEL)
  104. PRINT *, 'INFO:arch[mipsel]'
  105. # else
  106. PRINT *, 'INFO:arch[mips]'
  107. # endif
  108. #elif defined(__riscv) && __riscv_xlen == 64
  109. PRINT *, 'INFO:arch[riscv64]'
  110. #elif defined(__riscv) && __riscv_xlen == 32
  111. PRINT *, 'INFO:arch[riscv32]'
  112. #elif defined(__sw_64) || defined(__sw_64__)
  113. PRINT *, 'INFO:arch[sw_64]'
  114. #elif defined(__s390x__)
  115. PRINT *, 'INFO:arch[s390x]'
  116. #elif defined(__s390__)
  117. PRINT *, 'INFO:arch[s390]'
  118. #elif defined(__sparcv9) || defined(__sparcv9__) || defined(__sparc64__)
  119. PRINT *, 'INFO:arch[sparcv9]'
  120. #elif defined(__sparc) || defined(__sparc__)
  121. PRINT *, 'INFO:arch[sparc]'
  122. #elif defined(__hppa) || defined(__hppa__)
  123. # if defined(__LP64__)
  124. PRINT *, 'INFO:arch[parisc64]'
  125. # else
  126. PRINT *, 'INFO:arch[parisc]'
  127. # endif
  128. #elif defined(__ppc64__) || defined(__powerpc64__) || defined(__PPC64__) || \
  129. defined(_ARCH_PPC64)
  130. # if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
  131. PRINT *, 'INFO:arch[ppc64le]'
  132. # else
  133. PRINT *, 'INFO:arch[ppc64]'
  134. # endif
  135. #elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__) || \
  136. defined(_ARCH_PPC)
  137. # if defined(_LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__)
  138. PRINT *, 'INFO:arch[ppcle]'
  139. # else
  140. PRINT *, 'INFO:arch[ppc]'
  141. # endif
  142. #endif
  143. PRINT *, 'ABI Detection'
  144. END