Detect Fortran ABI Information
Implement Fortran 32/64-bit ABI detection on some platforms. We need to set CMAKE_SIZEOF_VOID_P correctly in Fortran-only projects so that the find_library() command knows whether to look for 64-bit binaries. We also detect ELF binaries to enable RPATH replacement. See issue #10119.
This commit is contained in:
parent
b5100623f3
commit
6c1e24276f
|
@ -30,5 +30,17 @@ ELSE(UNIX)
|
|||
SET(CMAKE_Fortran_OUTPUT_EXTENSION .obj)
|
||||
ENDIF(UNIX)
|
||||
|
||||
# Save compiler ABI information.
|
||||
SET(CMAKE_Fortran_SIZEOF_DATA_PTR "@CMAKE_Fortran_SIZEOF_DATA_PTR@")
|
||||
SET(CMAKE_Fortran_COMPILER_ABI "@CMAKE_Fortran_COMPILER_ABI@")
|
||||
|
||||
IF(CMAKE_Fortran_SIZEOF_DATA_PTR)
|
||||
SET(CMAKE_SIZEOF_VOID_P "${CMAKE_Fortran_SIZEOF_DATA_PTR}")
|
||||
ENDIF(CMAKE_Fortran_SIZEOF_DATA_PTR)
|
||||
|
||||
IF(CMAKE_Fortran_COMPILER_ABI)
|
||||
SET(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_Fortran_COMPILER_ABI}")
|
||||
ENDIF(CMAKE_Fortran_COMPILER_ABI)
|
||||
|
||||
SET(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "@CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES@")
|
||||
SET(CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES "@CMAKE_Fortran_IMPLICIT_LINK_DIRECTORIES@")
|
||||
|
|
|
@ -1,3 +1,33 @@
|
|||
PROGRAM CMakeFortranCompilerId
|
||||
PRINT *, 'ABI Detection Binary'
|
||||
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(_ILP32)
|
||||
PRINT *, 'INFO:sizeof_dptr[4]'
|
||||
#elif defined(_M_IX86)
|
||||
PRINT *, 'INFO:sizeof_dptr[4]'
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
! Application Binary Interface
|
||||
#endif
|
||||
#if defined(__sgi) && defined(_ABIO32)
|
||||
PRINT *, 'INFO:abi[ELF O32]'
|
||||
#elif defined(__sgi) && defined(_ABIN32)
|
||||
PRINT *, 'INFO:abi[ELF N32]'
|
||||
#elif defined(__sgi) && defined(_ABI64)
|
||||
PRINT *, 'INFO:abi[ELF 64]'
|
||||
#elif defined(__ELF__)
|
||||
PRINT *, 'INFO:abi[ELF]'
|
||||
#endif
|
||||
PRINT *, 'ABI Detection'
|
||||
END
|
||||
|
|
Loading…
Reference in New Issue