Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c56217c

Browse files
Merge pull request #1 from loiseaujc/master
Updating branch with latest dev from stdlib/main
2 parents a8519b6 + eb46153 commit c56217c

33 files changed

+3356
-257
lines changed

‎cmake/stdlib.cmake‎

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ function(preprocess preproc preprocopts srcext trgext srcfiles trgfiles)
1212

1313
set(_trgfiles)
1414
foreach(srcfile IN LISTS srcfiles)
15-
string(REGEX REPLACE "\\.${srcext}$" ".${trgext}" trgfile ${srcfile})
15+
get_filename_component(filename ${srcfile} NAME)
16+
string(REGEX REPLACE "\\.${srcext}$" ".${trgext}" trgfile ${filename})
1617
add_custom_command(
1718
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${trgfile}
1819
COMMAND ${preproc} ${preprocopts} ${CMAKE_CURRENT_SOURCE_DIR}/${srcfile} ${CMAKE_CURRENT_BINARY_DIR}/${trgfile}
@@ -47,3 +48,65 @@ function (fypp_f90pp fyppopts fyppfiles F90files)
4748
set(${F90files} ${_F90files} PARENT_SCOPE)
4849
endfunction()
4950

51+
# Helper function to configure stdlib targets
52+
#
53+
# It preprocesses the given fypp and fypp+cpp files, combines them with the
54+
# regular Fortran files, and creates a library target with the given name.
55+
# Args:
56+
# target_name [in]: Name of the library target to create
57+
# regular_sources_var [in]: Regular Fortran sources
58+
# fypp_files_var [in]: Sources to be preprocessed with fypp
59+
# cpp_files_var [in]: Sources to be preprocessed with fypp and cpp
60+
#
61+
function(configure_stdlib_target target_name regular_sources_var fypp_files_var cpp_files_var)
62+
#### Pre-process: .fpp -> .f90 via Fypp
63+
fypp_f90("${fyppFlags}" "${${fypp_files_var}}" ${target_name}_fypp_outFiles)
64+
#### Pre-process: .fypp -> .F90 via Fypp (for C preprocessor directives)
65+
fypp_f90pp("${fyppFlags}" "${${cpp_files_var}}" ${target_name}_cpp_outFiles)
66+
67+
list(APPEND all_sources ${${target_name}_fypp_outFiles})
68+
list(APPEND all_sources ${${target_name}_cpp_outFiles})
69+
list(APPEND all_sources ${${regular_sources_var}})
70+
71+
add_library(${target_name} ${all_sources})
72+
add_library(${PROJECT_NAME}::${target_name} ALIAS ${target_name})
73+
74+
set_target_properties(
75+
${target_name}
76+
PROPERTIES
77+
POSITION_INDEPENDENT_CODE ON
78+
WINDOWS_EXPORT_ALL_SYMBOLS ON
79+
)
80+
81+
if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0)
82+
target_compile_options(
83+
${target_name}
84+
PRIVATE
85+
$<$<COMPILE_LANGUAGE:Fortran>:-fno-range-check>
86+
)
87+
endif()
88+
89+
set(LIB_MOD_DIR ${CMAKE_CURRENT_BINARY_DIR}/mod_files/${target_name}/)
90+
set(INSTALL_MOD_DIR "${CMAKE_INSTALL_MODULEDIR}/${target_name}")
91+
# We need the module directory before we finish the configure stage since the
92+
# build interface might resolve before the module directory is generated by CMake
93+
if(NOT EXISTS "${LIB_MOD_DIR}")
94+
file(MAKE_DIRECTORY "${LIB_MOD_DIR}")
95+
endif()
96+
97+
set_target_properties(${target_name} PROPERTIES
98+
Fortran_MODULE_DIRECTORY ${LIB_MOD_DIR}
99+
)
100+
target_include_directories(${target_name} PUBLIC
101+
$<BUILD_INTERFACE:${LIB_MOD_DIR}>
102+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_MODULEDIR}>
103+
)
104+
105+
install(TARGETS ${target_name}
106+
EXPORT ${PROJECT_NAME}-targets
107+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
108+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
109+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
110+
)
111+
install(DIRECTORY ${LIB_MOD_DIR} DESTINATION "${INSTALL_MOD_DIR}")
112+
endfunction()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /