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 4263c83

Browse files
committed
restore separate BLAS/LAPACK CMakeLists
1 parent 3a782fb commit 4263c83

File tree

4 files changed

+168
-154
lines changed

4 files changed

+168
-154
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()

‎src/CMakeLists.txt‎

Lines changed: 2 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -1,156 +1,5 @@
1-
# Helper function to configure stdlib targets
2-
function(configure_stdlib_target target_name regular_sources_var fypp_files_var cpp_files_var)
3-
#### Pre-process: .fpp -> .f90 via Fypp
4-
fypp_f90("${fyppFlags}" "${${fypp_files_var}}" ${target_name}_fypp_outFiles)
5-
#### Pre-process: .fypp -> .F90 via Fypp (for C preprocessor directives)
6-
fypp_f90pp("${fyppFlags}" "${${cpp_files_var}}" ${target_name}_cpp_outFiles)
7-
8-
list(APPEND all_sources ${${target_name}_fypp_outFiles})
9-
list(APPEND all_sources ${${target_name}_cpp_outFiles})
10-
list(APPEND all_sources ${${regular_sources_var}})
11-
12-
add_library(${target_name} ${all_sources})
13-
add_library(${PROJECT_NAME}::${target_name} ALIAS ${target_name})
14-
15-
set_target_properties(
16-
${target_name}
17-
PROPERTIES
18-
POSITION_INDEPENDENT_CODE ON
19-
WINDOWS_EXPORT_ALL_SYMBOLS ON
20-
)
21-
22-
if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10.0)
23-
target_compile_options(
24-
${target_name}
25-
PRIVATE
26-
$<$<COMPILE_LANGUAGE:Fortran>:-fno-range-check>
27-
)
28-
endif()
29-
30-
set(LIB_MOD_DIR ${CMAKE_CURRENT_BINARY_DIR}/mod_files/${target_name}/)
31-
set(INSTALL_MOD_DIR "${CMAKE_INSTALL_MODULEDIR}/${target_name}")
32-
# We need the module directory before we finish the configure stage since the
33-
# build interface might resolve before the module directory is generated by CMake
34-
if(NOT EXISTS "${LIB_MOD_DIR}")
35-
file(MAKE_DIRECTORY "${LIB_MOD_DIR}")
36-
endif()
37-
38-
set_target_properties(${target_name} PROPERTIES
39-
Fortran_MODULE_DIRECTORY ${LIB_MOD_DIR}
40-
)
41-
target_include_directories(${target_name} PUBLIC
42-
$<BUILD_INTERFACE:${LIB_MOD_DIR}>
43-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_MODULEDIR}>
44-
)
45-
46-
install(TARGETS ${target_name}
47-
EXPORT ${PROJECT_NAME}-targets
48-
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
49-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
50-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
51-
)
52-
install(DIRECTORY ${LIB_MOD_DIR} DESTINATION "${INSTALL_MOD_DIR}")
53-
endfunction()
54-
55-
set(blas_fppFiles
56-
stdlib_kinds.fypp
57-
blas/stdlib_blas_constants.fypp
58-
blas/stdlib_blas.fypp
59-
blas/stdlib_blas_level1.fypp
60-
blas/stdlib_blas_level2_ban.fypp
61-
blas/stdlib_blas_level2_gen.fypp
62-
blas/stdlib_blas_level2_pac.fypp
63-
blas/stdlib_blas_level2_sym.fypp
64-
blas/stdlib_blas_level2_tri.fypp
65-
blas/stdlib_blas_level3_gen.fypp
66-
blas/stdlib_blas_level3_sym.fypp
67-
blas/stdlib_blas_level3_tri.fypp
68-
blas/stdlib_linalg_blas_aux.fypp
69-
)
70-
set(blas_cppFiles stdlib_linalg_constants.fypp stdlib_linalg_blas.fypp)
71-
72-
configure_stdlib_target(blas "" blas_fppFiles blas_cppFiles)
73-
74-
if(BLAS_FOUND)
75-
target_link_libraries(blas PUBLIC "BLAS::BLAS")
76-
endif()
77-
78-
set(lapack_fppFiles
79-
stdlib_kinds.fypp
80-
stdlib_linalg_state.fypp
81-
stdlib_error.fypp
82-
stdlib_optval.fypp
83-
stdlib_io.fypp
84-
stdlib_ascii.fypp
85-
stdlib_string_type.fypp
86-
lapack/stdlib_lapack_base.fypp
87-
lapack/stdlib_lapack_solve.fypp
88-
lapack/stdlib_lapack_others.fypp
89-
lapack/stdlib_lapack_orthogonal_factors.fypp
90-
lapack/stdlib_lapack_eig_svd_lsq.fypp
91-
lapack/stdlib_linalg_lapack_aux.fypp
92-
lapack/stdlib_lapack_auxiliary.fypp
93-
lapack/stdlib_lapack_blas_like_base.fypp
94-
lapack/stdlib_lapack_blas_like_l1.fypp
95-
lapack/stdlib_lapack_blas_like_l2.fypp
96-
lapack/stdlib_lapack_blas_like_l3.fypp
97-
lapack/stdlib_lapack_blas_like_mnorm.fypp
98-
lapack/stdlib_lapack_blas_like_scalar.fypp
99-
lapack/stdlib_lapack_cosine_sine.fypp
100-
lapack/stdlib_lapack_cosine_sine2.fypp
101-
lapack/stdlib_lapack_eigv_comp.fypp
102-
lapack/stdlib_lapack_eigv_comp2.fypp
103-
lapack/stdlib_lapack_eigv_gen.fypp
104-
lapack/stdlib_lapack_eigv_gen2.fypp
105-
lapack/stdlib_lapack_eigv_gen3.fypp
106-
lapack/stdlib_lapack_eigv_std_driver.fypp
107-
lapack/stdlib_lapack_eigv_svd_bidiag_dc.fypp
108-
lapack/stdlib_lapack_eigv_svd_drivers.fypp
109-
lapack/stdlib_lapack_eigv_svd_drivers2.fypp
110-
lapack/stdlib_lapack_eigv_svd_drivers3.fypp
111-
lapack/stdlib_lapack_eigv_sym_comp.fypp
112-
lapack/stdlib_lapack_eigv_sym.fypp
113-
lapack/stdlib_lapack_eigv_tridiag.fypp
114-
lapack/stdlib_lapack_eigv_tridiag2.fypp
115-
lapack/stdlib_lapack_eigv_tridiag3.fypp
116-
lapack/stdlib_lapack_givens_jacobi_rot.fypp
117-
lapack/stdlib_lapack_householder_reflectors.fypp
118-
lapack/stdlib_lapack_lsq.fypp
119-
lapack/stdlib_lapack_lsq_aux.fypp
120-
lapack/stdlib_lapack_lsq_constrained.fypp
121-
lapack/stdlib_lapack_orthogonal_factors_ql.fypp
122-
lapack/stdlib_lapack_orthogonal_factors_qr.fypp
123-
lapack/stdlib_lapack_orthogonal_factors_rz.fypp
124-
lapack/stdlib_lapack_others_sm.fypp
125-
lapack/stdlib_lapack_solve_aux.fypp
126-
lapack/stdlib_lapack_solve_chol_comp.fypp
127-
lapack/stdlib_lapack_solve_chol.fypp
128-
lapack/stdlib_lapack_solve_ldl_comp.fypp
129-
lapack/stdlib_lapack_solve_ldl_comp2.fypp
130-
lapack/stdlib_lapack_solve_ldl_comp3.fypp
131-
lapack/stdlib_lapack_solve_ldl_comp4.fypp
132-
lapack/stdlib_lapack_solve_ldl.fypp
133-
lapack/stdlib_lapack_solve_lu_comp.fypp
134-
lapack/stdlib_lapack_solve_lu.fypp
135-
lapack/stdlib_lapack_solve_tri_comp.fypp
136-
lapack/stdlib_lapack_svd_bidiag_qr.fypp
137-
lapack/stdlib_lapack_svd_comp.fypp
138-
lapack/stdlib_lapack_svd_comp2.fypp
139-
)
140-
set(lapack_cppFiles
141-
stdlib_linalg_constants.fypp
142-
stdlib_linalg_lapack.fypp
143-
)
144-
set(lapack_f90Files
145-
$<IF:$<BOOL:${f18errorstop}>,f18estop.f90,f08estop.f90>
146-
)
147-
148-
configure_stdlib_target(lapack lapack_f90Files lapack_fppFiles lapack_cppFiles)
149-
150-
if(LAPACK_FOUND)
151-
target_link_libraries(lapack PUBLIC "LAPACK::LAPACK")
152-
endif()
153-
target_link_libraries(lapack PUBLIC blas)
1+
add_subdirectory(blas)
2+
add_subdirectory(lapack)
1543

1554
set(fppFiles
1565
stdlib_ascii.fypp

‎src/blas/CMakeLists.txt‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
set(blas_fppFiles
2+
../stdlib_kinds.fypp
3+
stdlib_blas_constants.fypp
4+
stdlib_blas.fypp
5+
stdlib_blas_level1.fypp
6+
stdlib_blas_level2_ban.fypp
7+
stdlib_blas_level2_gen.fypp
8+
stdlib_blas_level2_pac.fypp
9+
stdlib_blas_level2_sym.fypp
10+
stdlib_blas_level2_tri.fypp
11+
stdlib_blas_level3_gen.fypp
12+
stdlib_blas_level3_sym.fypp
13+
stdlib_blas_level3_tri.fypp
14+
stdlib_linalg_blas_aux.fypp
15+
)
16+
set(blas_cppFiles
17+
../stdlib_linalg_constants.fypp
18+
../stdlib_linalg_blas.fypp
19+
)
20+
21+
configure_stdlib_target(blas "" blas_fppFiles blas_cppFiles)
22+
23+
if(BLAS_FOUND)
24+
target_link_libraries(blas PUBLIC "BLAS::BLAS")
25+
endif()

‎src/lapack/CMakeLists.txt‎

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
2+
set(lapack_fppFiles
3+
../stdlib_kinds.fypp
4+
../stdlib_linalg_state.fypp
5+
../stdlib_error.fypp
6+
../stdlib_optval.fypp
7+
../stdlib_io.fypp
8+
../stdlib_ascii.fypp
9+
../stdlib_string_type.fypp
10+
stdlib_lapack_base.fypp
11+
stdlib_lapack_solve.fypp
12+
stdlib_lapack_others.fypp
13+
stdlib_lapack_orthogonal_factors.fypp
14+
stdlib_lapack_eig_svd_lsq.fypp
15+
stdlib_linalg_lapack_aux.fypp
16+
stdlib_lapack_auxiliary.fypp
17+
stdlib_lapack_blas_like_base.fypp
18+
stdlib_lapack_blas_like_l1.fypp
19+
stdlib_lapack_blas_like_l2.fypp
20+
stdlib_lapack_blas_like_l3.fypp
21+
stdlib_lapack_blas_like_mnorm.fypp
22+
stdlib_lapack_blas_like_scalar.fypp
23+
stdlib_lapack_cosine_sine.fypp
24+
stdlib_lapack_cosine_sine2.fypp
25+
stdlib_lapack_eigv_comp.fypp
26+
stdlib_lapack_eigv_comp2.fypp
27+
stdlib_lapack_eigv_gen.fypp
28+
stdlib_lapack_eigv_gen2.fypp
29+
stdlib_lapack_eigv_gen3.fypp
30+
stdlib_lapack_eigv_std_driver.fypp
31+
stdlib_lapack_eigv_svd_bidiag_dc.fypp
32+
stdlib_lapack_eigv_svd_drivers.fypp
33+
stdlib_lapack_eigv_svd_drivers2.fypp
34+
stdlib_lapack_eigv_svd_drivers3.fypp
35+
stdlib_lapack_eigv_sym_comp.fypp
36+
stdlib_lapack_eigv_sym.fypp
37+
stdlib_lapack_eigv_tridiag.fypp
38+
stdlib_lapack_eigv_tridiag2.fypp
39+
stdlib_lapack_eigv_tridiag3.fypp
40+
stdlib_lapack_givens_jacobi_rot.fypp
41+
stdlib_lapack_householder_reflectors.fypp
42+
stdlib_lapack_lsq.fypp
43+
stdlib_lapack_lsq_aux.fypp
44+
stdlib_lapack_lsq_constrained.fypp
45+
stdlib_lapack_orthogonal_factors_ql.fypp
46+
stdlib_lapack_orthogonal_factors_qr.fypp
47+
stdlib_lapack_orthogonal_factors_rz.fypp
48+
stdlib_lapack_others_sm.fypp
49+
stdlib_lapack_solve_aux.fypp
50+
stdlib_lapack_solve_chol_comp.fypp
51+
stdlib_lapack_solve_chol.fypp
52+
stdlib_lapack_solve_ldl_comp.fypp
53+
stdlib_lapack_solve_ldl_comp2.fypp
54+
stdlib_lapack_solve_ldl_comp3.fypp
55+
stdlib_lapack_solve_ldl_comp4.fypp
56+
stdlib_lapack_solve_ldl.fypp
57+
stdlib_lapack_solve_lu_comp.fypp
58+
stdlib_lapack_solve_lu.fypp
59+
stdlib_lapack_solve_tri_comp.fypp
60+
stdlib_lapack_svd_bidiag_qr.fypp
61+
stdlib_lapack_svd_comp.fypp
62+
stdlib_lapack_svd_comp2.fypp
63+
)
64+
set(lapack_cppFiles
65+
../stdlib_linalg_constants.fypp
66+
../stdlib_linalg_lapack.fypp
67+
)
68+
set(lapack_f90Files
69+
$<IF:$<BOOL:${f18errorstop}>,../f18estop.f90,../f08estop.f90>
70+
)
71+
72+
configure_stdlib_target(lapack lapack_f90Files lapack_fppFiles lapack_cppFiles)
73+
74+
if(LAPACK_FOUND)
75+
target_link_libraries(lapack PUBLIC "LAPACK::LAPACK")
76+
endif()
77+
target_link_libraries(lapack PUBLIC blas)

0 commit comments

Comments
(0)

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