@@ -28,6 +28,25 @@ option(FLIBCPP_USE_SWIG "Regenerate source files using SWIG" ${FLIBCPP_DEV})
2828# FLAGS
2929#---------------------------------------------------------------------------#
3030
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
3150if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
3251 if (FLIBCPP_DEV)
3352 set (_CMAKE_BUILD_TYPE "Debug" )
@@ -38,20 +57,18 @@ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
3857 set (CMAKE_BUILD_TYPE "${_CMAKE_BUILD_TYPE} " CACHE STRING "Build type" FORCE)
3958endif ()
4059
41- set (FLIBCPP_FORTRAN_STD "f2003" CACHE STRING
42- "Fortran standard for compiling generated code" )
43-
4460#---------------------------------------------------------------------------#
4561# MODULES TO LOAD
4662#---------------------------------------------------------------------------#
4763
64+ list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake" )
65+
4866if (FLIBCPP_USE_SWIG)
4967 find_package (SWIG)
5068endif ()
5169
5270if (FLIBCPP_USE_SWIG AND SWIG_FOUND)
5371 # SWIG is requested and available; make sure it's the Fortran fork.
54- list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR} /cmake" )
5572 include (CheckSWIGFortran)
5673 if (CMAKE_VERSION VERSION_LESS 3.99)
5774 # TODO: This is until Fortran support gets added to the upstream cmake script
@@ -99,7 +116,6 @@ else()
99116 endif ()
100117endif ()
101118
102-
103119set (FLIBCPP_VERSION_CPP "${CMAKE_CURRENT_BINARY_DIR} /flibcpp_version.cpp" )
104120configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/flibcpp_version.cpp.in"
105121 "${FLIBCPP_VERSION_CPP} " @ONLY)
@@ -120,7 +136,7 @@ set(FLIBCPP_NAMESPACE Flibcpp::)
120136# List of libraries exported by cmake/FlibcppConfig.cmake.in
121137set (FLIBCPP_LIBRARIES)
122138
123- function (swig_fortran_add_module name )
139+ function (flibcpp_add_module name )
124140 set (src_file "${FLIBCPP_INTERFACE_DIR} /${name} .i" )
125141 # We're using C++
126142 set_property (SOURCE "${src_file} " PROPERTY CPLUSPLUS ON )
@@ -165,11 +181,9 @@ function(swig_fortran_add_module name)
165181 PRIVATE
166182 cxx_std_11
167183 )
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)
171185 target_compile_options (${name}
172- PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-std= ${FLIBCPP_FORTRAN_STD } >
186+ PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:${_FLIBCPP_STD_FLAGS } >
173187 )
174188 endif ()
175189
@@ -194,7 +208,7 @@ function(swig_fortran_add_module name)
194208endfunction ()
195209
196210# 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} " )
198212
199213# Also install 'import_flc' if using SWIG
200214if (FLIBCPP_USE_SWIG)
@@ -204,16 +218,16 @@ if (FLIBCPP_USE_SWIG)
204218 )
205219endif ()
206220
207- swig_fortran_add_module (flc_algorithm)
221+ flibcpp_add_module (flc_algorithm)
208222target_link_libraries (flc_algorithm flc_random flc)
209223
210- swig_fortran_add_module (flc_random)
224+ flibcpp_add_module (flc_random)
211225target_link_libraries (flc_random flc)
212226
213- swig_fortran_add_module (flc_string)
227+ flibcpp_add_module (flc_string)
214228target_link_libraries (flc_string flc)
215229
216- swig_fortran_add_module (flc_vector)
230+ flibcpp_add_module (flc_vector)
217231target_link_libraries (flc_vector flc flc_string)
218232
219233#---------------------------------------------------------------------------#
0 commit comments