@@ -9,9 +9,60 @@ function(_qlten_reset_var _name _was_defined _value)
99 endif ()
1010endfunction ()
1111
12+ function (_qlten_list_entries_exist _out_var )
13+ set (_qlten_all_exist TRUE )
14+ foreach (_qlten_entry IN LISTS ARGN)
15+ if (_qlten_entry STREQUAL ""
16+ OR _qlten_entry MATCHES "^-"
17+ OR _qlten_entry MATCHES "^\\ $<")
18+ continue ()
19+ endif ()
20+
21+ if (NOT EXISTS "${_qlten_entry} ")
22+ set (_qlten_all_exist FALSE )
23+ break ()
24+ endif ()
25+ endforeach ()
26+
27+ set (${_out_var} "${_qlten_all_exist} " PARENT_SCOPE )
28+ endfunction ()
29+
1230function (_qlten_collect_cpu_backend_details _vendor _include_out _lapacke_out )
1331 set (_qlten_include_dirs "")
1432 set (_qlten_search_roots "")
33+ set (_qlten_recorded_blas_include_dirs "@QLTEN_HP_NUMERIC_BLAS_INCLUDE_DIRS @")
34+ set (_qlten_recorded_lapacke_include_dir "@QLTEN_HP_NUMERIC_LAPACKE_INCLUDE_DIR @")
35+ set (_qlten_recorded_lapacke_library "@QLTEN_HP_NUMERIC_LAPACKE_LIBRARY @")
36+
37+ foreach (_qlten_recorded_include_dir IN LISTS _qlten_recorded_blas_include_dirs )
38+ if (_qlten_recorded_include_dir )
39+ list (APPEND _qlten_search_roots "${_qlten_recorded_include_dir} ")
40+ get_filename_component (_qlten_recorded_prefix1 "${_qlten_recorded_include_dir} /.." ABSOLUTE )
41+ get_filename_component (_qlten_recorded_prefix2 "${_qlten_recorded_include_dir} /../.." ABSOLUTE )
42+ list (APPEND _qlten_search_roots
43+ "${_qlten_recorded_prefix1} "
44+ "${_qlten_recorded_prefix2} ")
45+ endif ()
46+ endforeach ()
47+ if (_qlten_recorded_lapacke_include_dir )
48+ list (APPEND _qlten_search_roots "${_qlten_recorded_lapacke_include_dir} ")
49+ get_filename_component (_qlten_recorded_lapacke_prefix1 "${_qlten_recorded_lapacke_include_dir} /.." ABSOLUTE )
50+ get_filename_component (_qlten_recorded_lapacke_prefix2 "${_qlten_recorded_lapacke_include_dir} /../.." ABSOLUTE )
51+ list (APPEND _qlten_search_roots
52+ "${_qlten_recorded_lapacke_prefix1} "
53+ "${_qlten_recorded_lapacke_prefix2} ")
54+ endif ()
55+ if (_qlten_recorded_lapacke_library )
56+ get_filename_component (_qlten_recorded_lapacke_lib_dir "${_qlten_recorded_lapacke_library} " DIRECTORY )
57+ if (_qlten_recorded_lapacke_lib_dir )
58+ get_filename_component (_qlten_recorded_lapacke_root1 "${_qlten_recorded_lapacke_lib_dir} /.." ABSOLUTE )
59+ get_filename_component (_qlten_recorded_lapacke_root2 "${_qlten_recorded_lapacke_lib_dir} /../.." ABSOLUTE )
60+ list (APPEND _qlten_search_roots
61+ "${_qlten_recorded_lapacke_lib_dir} "
62+ "${_qlten_recorded_lapacke_root1} "
63+ "${_qlten_recorded_lapacke_root2} ")
64+ endif ()
65+ endif ()
1566
1667 foreach (_qlten_lib IN LISTS BLAS_LIBRARIES LAPACK_LIBRARIES )
1768 get_filename_component (_qlten_lib_dir "${_qlten_lib} " DIRECTORY )
@@ -30,10 +81,19 @@ function(_qlten_collect_cpu_backend_details _vendor _include_out _lapacke_out)
3081 if (DEFINED ENV {MKLROOT } AND NOT "$ENV{MKLROOT} " STREQUAL "")
3182 list (APPEND _qlten_search_roots "$ENV{MKLROOT} ")
3283 endif ()
33- find_path (_qlten_mkl_include_dir
34- NAMES mkl.h
35- HINTS ${_qlten_search_roots}
36- PATH_SUFFIXES include include /oneapi )
84+ set (_qlten_mkl_include_dir "")
85+ foreach (_qlten_recorded_include_dir IN LISTS _qlten_recorded_blas_include_dirs )
86+ if (EXISTS "${_qlten_recorded_include_dir} /mkl .h ")
87+ set (_qlten_mkl_include_dir "${_qlten_recorded_include_dir} ")
88+ break ()
89+ endif ()
90+ endforeach ()
91+ if (NOT _qlten_mkl_include_dir )
92+ find_path (_qlten_mkl_include_dir
93+ NAMES mkl .h
94+ HINTS ${_qlten_search_roots}
95+ PATH_SUFFIXES include include /oneapi )
96+ endif ()
3797 if (NOT _qlten_mkl_include_dir )
3898 message (FATAL_ERROR "TensorToolkit requires mkl .h for the installed MKL -backed variant .")
3999 endif ()
@@ -53,14 +113,51 @@ function(_qlten_collect_cpu_backend_details _vendor _include_out _lapacke_out)
53113 endif ()
54114
55115 if (NOT _vendor STREQUAL "Intel10_64lp ")
56- find_path (_qlten_cblas_include_dir
57- NAMES cblas.h
58- HINTS ${_qlten_search_roots}
59- PATH_SUFFIXES include include /openblas )
60- find_path (_qlten_lapacke_include_dir
61- NAMES lapacke.h
62- HINTS ${_qlten_search_roots}
63- PATH_SUFFIXES include include /openblas )
116+ set (_qlten_cblas_include_dir "")
117+ if (_vendor STREQUAL "OpenBLAS ")
118+ foreach (_qlten_recorded_include_dir IN LISTS _qlten_recorded_blas_include_dirs )
119+ if (EXISTS "${_qlten_recorded_include_dir} /cblas .h "
120+ AND EXISTS "${_qlten_recorded_include_dir} /openblas_config .h ")
121+ set (_qlten_cblas_include_dir "${_qlten_recorded_include_dir} ")
122+ break ()
123+ endif ()
124+ endforeach ()
125+ if (NOT _qlten_cblas_include_dir )
126+ find_path (_qlten_cblas_include_dir
127+ NAMES openblas_config .h
128+ HINTS ${_qlten_search_roots}
129+ PATH_SUFFIXES include include /openblas )
130+ if (_qlten_cblas_include_dir
131+ AND NOT EXISTS "${_qlten_cblas_include_dir} /cblas .h ")
132+ unset (_qlten_cblas_include_dir CACHE )
133+ unset (_qlten_cblas_include_dir )
134+ endif ()
135+ endif ()
136+ else ()
137+ foreach (_qlten_recorded_include_dir IN LISTS _qlten_recorded_blas_include_dirs )
138+ if (EXISTS "${_qlten_recorded_include_dir} /cblas .h ")
139+ set (_qlten_cblas_include_dir "${_qlten_recorded_include_dir} ")
140+ break ()
141+ endif ()
142+ endforeach ()
143+ if (NOT _qlten_cblas_include_dir )
144+ find_path (_qlten_cblas_include_dir
145+ NAMES cblas .h
146+ HINTS ${_qlten_search_roots}
147+ PATH_SUFFIXES include include /openblas )
148+ endif ()
149+ endif ()
150+
151+ set (_qlten_lapacke_include_dir "")
152+ if (_qlten_recorded_lapacke_include_dir
153+ AND EXISTS "${_qlten_recorded_lapacke_include_dir} /lapacke .h ")
154+ set (_qlten_lapacke_include_dir "${_qlten_recorded_lapacke_include_dir} ")
155+ else ()
156+ find_path (_qlten_lapacke_include_dir
157+ NAMES lapacke .h
158+ HINTS ${_qlten_search_roots}
159+ PATH_SUFFIXES include include /openblas )
160+ endif ()
64161
65162 if (NOT _qlten_cblas_include_dir OR NOT _qlten_lapacke_include_dir )
66163 message (FATAL_ERROR
@@ -71,12 +168,17 @@ function(_qlten_collect_cpu_backend_details _vendor _include_out _lapacke_out)
71168 "${_qlten_cblas_include_dir} "
72169 "${_qlten_lapacke_include_dir} ")
73170
74- unset (_qlten_lapacke_library CACHE )
75- unset (_qlten_lapacke_library)
76- find_library (_qlten_lapacke_library
77- NAMES lapacke
78- HINTS ${_qlten_search_roots}
79- PATH_SUFFIXES lib lib64 lib/x86_64-linux-gnu )
171+ set (_qlten_lapacke_library "")
172+ if (_qlten_recorded_lapacke_library AND EXISTS "${_qlten_recorded_lapacke_library} ")
173+ set (_qlten_lapacke_library "${_qlten_recorded_lapacke_library} ")
174+ else ()
175+ unset (_qlten_lapacke_library CACHE )
176+ unset (_qlten_lapacke_library )
177+ find_library (_qlten_lapacke_library
178+ NAMES lapacke
179+ HINTS ${_qlten_search_roots}
180+ PATH_SUFFIXES lib lib64 lib /x86_64 -linux -gnu )
181+ endif ()
80182 if (_vendor STREQUAL "OpenBLAS " AND NOT _qlten_lapacke_library )
81183 message (FATAL_ERROR
82184 "TensorToolkit requires a LAPACKE library for the installed OpenBLAS variant .")
@@ -184,6 +286,8 @@ find_dependency(MPI REQUIRED)
184286
185287set (_qlten_package_bla_vendor "@QLTEN_HP_NUMERIC_BLA_VENDOR @")
186288if (_qlten_package_bla_vendor )
289+ set (_qlten_recorded_blas_libraries "@BLAS_LIBRARIES @")
290+ set (_qlten_recorded_lapack_libraries "@LAPACK_LIBRARIES @")
187291 set (_qlten_had_bla_vendor FALSE )
188292 set (_qlten_saved_bla_vendor "")
189293 if (DEFINED BLA_VENDOR )
@@ -202,8 +306,18 @@ if (_qlten_package_bla_vendor)
202306 set (BLA_VENDOR "${_qlten_package_bla_vendor} ")
203307 endif ()
204308
205- find_dependency (BLAS REQUIRED )
206- find_dependency (LAPACK REQUIRED )
309+ _qlten_list_entries_exist (_qlten_recorded_blas_exist ${_qlten_recorded_blas_libraries} )
310+ _qlten_list_entries_exist (_qlten_recorded_lapack_exist ${_qlten_recorded_lapack_libraries} )
311+
312+ # Reuse the producer -resolved libraries when they remain valid so external
313+ # consumers do not depend on host -specific FindBLAS /FindLAPACK rediscovery .
314+ if (_qlten_recorded_blas_exist AND _qlten_recorded_lapack_exist )
315+ set (BLAS_LIBRARIES "${_qlten_recorded_blas_libraries} ")
316+ set (LAPACK_LIBRARIES "${_qlten_recorded_lapack_libraries} ")
317+ else ()
318+ find_dependency (BLAS REQUIRED )
319+ find_dependency (LAPACK REQUIRED )
320+ endif ()
207321
208322 _qlten_reset_var (BLA_VENDOR _qlten_had_bla_vendor "${_qlten_saved_bla_vendor} ")
209323
0 commit comments