@@ -28,6 +28,25 @@ option(FLIBCPP_USE_SWIG "Regenerate source files using SWIG" ${FLIBCPP_DEV})
28
28
# FLAGS
29
29
#---------------------------------------------------------------------------#
30
30
31
+ # Fortran standard
32
+ set (FLIBCPP_FORTRAN_STD "03" CACHE STRING
33
+ "Fortran standard for compiling generated code (options: 03/08/15/18)" )
34
+ if (FLIBCPP_FORTRAN_STD AND NOT FLIBCPP_FORTRAN_STD STREQUAL "none" )
35
+ if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
36
+ set (_FLIBCPP_STD_FLAGS "-std=f20${FLIBCPP_FORTRAN_STD} " )
37
+ elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
38
+ set (_FLIBCPP_STD_FLAGS "-std${FLIBCPP_FORTRAN_STD} " )
39
+ else ()
40
+ message (WARNING "Fortran standard flags are not known for "
41
+ "compilier '${CMAKE_Fortran_COMPILER_ID} ': ignoring"
42
+ "FLIBCPP_FORTRAN_STD=${FLIBCPP_FORTRAN_STD} . Configure with "
43
+ "the FFLAGS environment variable or explicitly specify "
44
+ "CMAKE_Fortran_FLAGS" )
45
+ set (_FLIBCPP_STD_FLAGS "none" CACHE FORCE STRING "" )
46
+ endif ()
47
+ endif ()
48
+
49
+ # Build type
31
50
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
32
51
if (FLIBCPP_DEV)
33
52
set (_CMAKE_BUILD_TYPE "Debug" )
@@ -38,20 +57,18 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
38
57
set (CMAKE_BUILD_TYPE "${_CMAKE_BUILD_TYPE} " CACHE STRING "Build type" FORCE)
39
58
endif ()
40
59
41
- set (FLIBCPP_FORTRAN_STD "f2003" CACHE STRING
42
- "Fortran standard for compiling generated code" )
43
-
44
60
#---------------------------------------------------------------------------#
45
61
# MODULES TO LOAD
46
62
#---------------------------------------------------------------------------#
47
63
64
+ list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake" )
65
+
48
66
if (FLIBCPP_USE_SWIG)
49
67
find_package (SWIG)
50
68
endif ()
51
69
52
70
if (FLIBCPP_USE_SWIG AND SWIG_FOUND)
53
71
# SWIG is requested and available; make sure it's the Fortran fork.
54
- list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake" )
55
72
include (CheckSWIGFortran)
56
73
if (CMAKE_VERSION VERSION_LESS 3.99)
57
74
# TODO: This is until Fortran support gets added to the upstream cmake script
@@ -99,7 +116,6 @@ else()
99
116
endif ()
100
117
endif ()
101
118
102
-
103
119
set (FLIBCPP_VERSION_CPP "${CMAKE_CURRENT_BINARY_DIR} /flibcpp_version.cpp" )
104
120
configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/flibcpp_version.cpp.in"
105
121
"${FLIBCPP_VERSION_CPP} " @ONLY)
@@ -120,7 +136,7 @@ set(FLIBCPP_NAMESPACE Flibcpp::)
120
136
# List of libraries exported by cmake/FlibcppConfig.cmake.in
121
137
set (FLIBCPP_LIBRARIES)
122
138
123
- function (swig_fortran_add_module name )
139
+ function (flibcpp_add_module name )
124
140
set (src_file "${FLIBCPP_INTERFACE_DIR} /${name} .i" )
125
141
# We're using C++
126
142
set_property (SOURCE "${src_file} " PROPERTY CPLUSPLUS ON )
@@ -165,11 +181,9 @@ function(swig_fortran_add_module name)
165
181
PRIVATE
166
182
cxx_std_11
167
183
)
168
-
169
- if (FLIBCPP_FORTRAN_STD AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" )
170
- # Compile Fortran code with given standard
184
+ if (_FLIBCPP_STD_FLAGS)
171
185
target_compile_options (${name}
172
- PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-std= ${FLIBCPP_FORTRAN_STD } >
186
+ PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:${_FLIBCPP_STD_FLAGS } >
173
187
)
174
188
endif ()
175
189
@@ -194,7 +208,7 @@ function(swig_fortran_add_module name)
194
208
endfunction ()
195
209
196
210
# Install primary flc module, compiling version info as well
197
- swig_fortran_add_module (flc "${FLIBCPP_VERSION_CPP} " )
211
+ flibcpp_add_module (flc "${FLIBCPP_VERSION_CPP} " )
198
212
199
213
# Also install 'import_flc' if using SWIG
200
214
if (FLIBCPP_USE_SWIG)
@@ -204,16 +218,16 @@ if (FLIBCPP_USE_SWIG)
204
218
)
205
219
endif ()
206
220
207
- swig_fortran_add_module (flc_algorithm)
221
+ flibcpp_add_module (flc_algorithm)
208
222
target_link_libraries (flc_algorithm flc_random flc)
209
223
210
- swig_fortran_add_module (flc_random)
224
+ flibcpp_add_module (flc_random)
211
225
target_link_libraries (flc_random flc)
212
226
213
- swig_fortran_add_module (flc_string)
227
+ flibcpp_add_module (flc_string)
214
228
target_link_libraries (flc_string flc)
215
229
216
- swig_fortran_add_module (flc_vector)
230
+ flibcpp_add_module (flc_vector)
217
231
target_link_libraries (flc_vector flc flc_string)
218
232
219
233
#---------------------------------------------------------------------------#
0 commit comments