@@ -56,13 +56,26 @@ if( CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
56
56
if ( "${CMAKE_Fortran_FLAGS} " MATCHES "-ffpe-trap=[izoupd]" )
57
57
set ( FPE_EXIT TRUE )
58
58
endif ()
59
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-frecursive" ) )
60
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -frecursive"
61
+ CACHE STRING "Recursive flag must be set" FORCE )
62
+ endif ()
59
63
60
64
# Intel Fortran
61
65
elseif ( CMAKE_Fortran_COMPILER_ID MATCHES "Intel" )
62
66
if ( "${CMAKE_Fortran_FLAGS} " MATCHES "[-/]fpe(-all=|)0" )
63
67
set ( FPE_EXIT TRUE )
64
68
endif ()
65
69
70
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-recursive" ) )
71
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -recursive"
72
+ CACHE STRING "Recursive flag must be set" FORCE )
73
+ endif ()
74
+
75
+ if ( UNIX AND NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-fp-model[ \t ]strict" ) )
76
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fp-model strict" )
77
+ endif ()
78
+
66
79
# SunPro F95
67
80
elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
68
81
if ( ("${CMAKE_Fortran_FLAGS} " MATCHES "-ftrap=" ) AND
@@ -74,13 +87,33 @@ elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
74
87
CACHE STRING "Flags for Fortran compiler." FORCE )
75
88
endif ()
76
89
90
+ if (UNIX )
91
+ # Delete libmtsk in linking sequence for Sun/Oracle Fortran Compiler.
92
+ # This library is not present in the Sun package SolarisStudio12.3-linux-x86-bin
93
+ string (REPLACE \;mtsk\; \; CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES} " )
94
+ endif ()
95
+
77
96
# IBM XL Fortran
78
97
elseif ( (CMAKE_Fortran_COMPILER_ID STREQUAL "VisualAge" ) OR # CMake 2.6
79
98
(CMAKE_Fortran_COMPILER_ID STREQUAL "XL" ) ) # CMake 2.8
80
99
if ( "${CMAKE_Fortran_FLAGS} " MATCHES "-qflttrap=[a-zA-Z:]:enable" )
81
100
set ( FPE_EXIT TRUE )
82
101
endif ()
83
102
103
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-qrecur" ) )
104
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qrecur"
105
+ CACHE STRING "Recursive flag must be set" FORCE )
106
+ endif ()
107
+
108
+ if ( UNIX AND NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-qnosave" ) )
109
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qnosave" )
110
+ endif ()
111
+
112
+
113
+ if ( UNIX AND NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-qstrict" ) )
114
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qstrict" )
115
+ endif ()
116
+
84
117
# HP Fortran
85
118
elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "HP" )
86
119
if ( "${CMAKE_Fortran_FLAGS} " MATCHES "\\ +fp_exception" )
@@ -138,6 +171,11 @@ elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" )
138
171
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -w=unused" )
139
172
endif ()
140
173
174
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-recursive" ) )
175
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -recursive"
176
+ CACHE STRING "Recursive flag must be set" FORCE )
177
+ endif ()
178
+
141
179
# Suppress compiler banner and summary
142
180
check_fortran_compiler_flag ("-quiet" _quiet )
143
181
if ( _quiet AND NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "[-/]quiet" ) )
@@ -155,7 +193,49 @@ elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NVHPC" )
155
193
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Kieee" )
156
194
endif ()
157
195
196
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-Mrecursive" ) )
197
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mrecursive"
198
+ CACHE STRING "Recursive flag must be set" FORCE )
199
+ endif ()
200
+
201
+ # Flang Fortran
202
+ elseif ( CMAKE_Fortran_COMPILER_ID STREQUAL "Flang" )
203
+ if ( NOT ("${CMAKE_Fortran_FLAGS} " MATCHES "-Mrecursive" ) )
204
+ set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mrecursive"
205
+ CACHE STRING "Recursive flag must be set" FORCE )
206
+ endif ()
207
+
208
+ # Compaq Fortran
209
+ elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Compaq" )
210
+ if (WIN32 )
211
+ if (CMAKE_GENERATOR STREQUAL "NMake Makefiles" )
212
+ get_filename_component (CMAKE_Fortran_COMPILER_CMDNAM ${CMAKE_Fortran_COMPILER} NAME_WE )
213
+ message (STATUS "Using Compaq Fortran compiler with command name ${CMAKE_Fortran_COMPILER_CMDNAM} " )
214
+ set (cmd ${CMAKE_Fortran_COMPILER_CMDNAM} )
215
+ string (TOLOWER "${cmd} " cmdlc )
216
+ if (cmdlc STREQUAL "df" )
217
+ message (STATUS "Assume the Compaq Visual Fortran Compiler is being used" )
218
+ set (CMAKE_Fortran_USE_RESPONSE_FILE_FOR_OBJECTS 1 )
219
+ set (CMAKE_Fortran_USE_RESPONSE_FILE_FOR_INCLUDES 1 )
220
+ #This is a workaround that is needed to avoid forward-slashes in the
221
+ #filenames listed in response files from incorrectly being interpreted as
222
+ #introducing compiler command options
223
+ if (${BUILD_SHARED_LIBS} )
224
+ message (FATAL_ERROR "Making of shared libraries with CVF has not been tested." )
225
+ endif ()
226
+ set (str "NMake version 9 or later should be used. NMake version 6.0 which is\n " )
227
+ set (str "${str} included with the CVF distribution fails to build Lapack because\n " )
228
+ set (str "${str} the number of source files exceeds the limit for NMake v6.0\n " )
229
+ message (STATUS ${str} )
230
+ set (CMAKE_Fortran_LINK_EXECUTABLE "LINK /out:<TARGET> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS>" )
231
+ endif ()
232
+ endif ()
233
+ endif ()
234
+
158
235
else ()
236
+ message (WARNING "Fortran local arrays should be allocated on the stack."
237
+ " Please use a compiler which guarantees that feature."
238
+ " See https://github.com/Reference-LAPACK/lapack/pull/188 and references therein." )
159
239
endif ()
160
240
161
241
if ( "${CMAKE_Fortran_FLAGS_RELEASE} " MATCHES "O[3-9]" )
0 commit comments