1
0
Эх сурвалжийг харах

Fortran: Detect pointer size in gfortran on MinGW

Use __SIZEOF_POINTER__ which the GNU Fortran compiler defines at least
on 64-bit MinGW.  Assume default size 4 on MinGW if gfortran does not
define the size.
Brad King 14 жил өмнө
parent
commit
ecd8414757

+ 2 - 0
Modules/CMakeDetermineCompilerABI.cmake

@@ -57,6 +57,8 @@ FUNCTION(CMAKE_DETERMINE_COMPILER_ABI lang src)
 
       IF(ABI_SIZEOF_DPTR)
         SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${ABI_SIZEOF_DPTR}" PARENT_SCOPE)
+      ELSEIF(CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT)
+        SET(CMAKE_${lang}_SIZEOF_DATA_PTR "${CMAKE_${lang}_SIZEOF_DATA_PTR_DEFAULT}" PARENT_SCOPE)
       ENDIF(ABI_SIZEOF_DPTR)
 
       IF(ABI_NAME)

+ 5 - 0
Modules/CMakeFortranCompilerABI.F

@@ -15,6 +15,11 @@
         PRINT *, 'INFO:sizeof_dptr[4]'
 #elif defined(_M_IX86)
         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]'
 #endif
 
 #if 0

+ 3 - 0
Modules/Platform/Windows-GNU-Fortran.cmake

@@ -1,2 +1,5 @@
 include(Platform/Windows-GNU)
 __windows_compiler_gnu(Fortran)
+
+# gfortran on 64-bit MinGW defines __SIZEOF_POINTER__
+set(CMAKE_Fortran_SIZEOF_DATA_PTR_DEFAULT 4)