blob: e7c6ad6b2e3dc66c4974c2efcf3135cd6f9f795b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# This module perdorms several try-compiles to determine the default integer
# size being used by the fortran compiler
#
# After execution, the following variables are set. If they are un set then
# size detection was not possible
#
# SIZEOF_CHARACTER - Number of bytes used to store the default CHARACTER type
# SIZEOF_LOGICAL - Number of bytes used to store the default LOGICAL type
# SIZEOF_INTEGER - Number of bytes used to store the default INTEGER type
# SIZEOF_REAL - Number of bytes used to store the default REAL type
# SIZEOF_COMPLEX - Number of bytes used to store the default COMPLEX type
#
#=============================================================================
# Author: Chuck Atkins
# Copyright 2010
#=============================================================================
macro( CHECK_FORTRAN_TYPE_SIZES )
if( NOT CMAKE_Fortran_COMPILER_SUPPORTS_F90 )
message( FATAL_ERROR "Type size tests require Fortran 90 support" )
endif()
foreach( _TEST_TYPE "CHARACTER" "LOGICAL" "INTEGER" "REAL" "COMPLEX" )
string( REPLACE " " "_" _TEST_TYPE_VAR "${_TEST_TYPE}" )
foreach( _TEST_SIZE 1 2 4 8 16 32 )
set( _TEST_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortran${_TEST_TYPE_VAR}Size${_TEST_SIZE}.f90 )
file( WRITE ${_TEST_FILE}
"
PROGRAM check_size
${_TEST_TYPE}*${_TEST_SIZE}, TARGET :: a
${_TEST_TYPE}, POINTER :: pa
pa => a
END PROGRAM
")
try_compile( SIZEOF_${_TEST_TYPE_VAR} ${CMAKE_BINARY_DIR} ${_TEST_FILE} )
if( SIZEOF_${_TEST_TYPE_VAR} )
message( STATUS "Testing default ${_TEST_TYPE}*${_TEST_SIZE} - found" )
set( SIZEOF_${_TEST_TYPE_VAR} ${_TEST_SIZE} CACHE INTERNAL "Size of the default ${_TEST_TYPE} type" FORCE )
break()
endif()
endforeach()
if( NOT SIZEOF_${_TEST_TYPE_VAR} )
message( WARNING "Unable to determine default size of type ${_TEST_TYPE}" )
unset( SIZEOF_${_TEST_TYPE_VAR} CACHE )
endif()
endforeach()
endmacro()
|