@@ -136,6 +136,21 @@ add_library(abacus::feature_libs ALIAS abacus_feature_libs)
136136add_library (abacus_link_libs INTERFACE )
137137add_library (abacus::link_libs ALIAS abacus_link_libs )
138138
139+ set_target_properties (abacus_linalg_libs PROPERTIES EXPORT_NAME linalg_libs)
140+ set_target_properties (abacus_feature_libs PROPERTIES EXPORT_NAME feature_libs)
141+ set_target_properties (abacus_link_libs PROPERTIES EXPORT_NAME link_libs)
142+
143+ if (ENABLE_MLALGO OR DEFINED Torch_DIR)
144+ # TorchConfig.cmake exposes its complete link closure through
145+ # TORCH_LIBRARIES rather than a stable namespaced target. Keep that
146+ # provider-specific representation behind an imported adapter so the
147+ # installed ABACUS package can recreate it after find_dependency(Torch).
148+ add_library (abacus::torch INTERFACE IMPORTED GLOBAL )
149+ target_link_libraries (abacus::torch INTERFACE ${TORCH_LIBRARIES} )
150+ target_include_directories (abacus::torch INTERFACE ${TORCH_INCLUDE_DIRS} )
151+ target_compile_options (abacus::torch INTERFACE ${ABACUS_TORCH_CXX_FLAGS} )
152+ endif ()
153+
139154target_link_libraries (abacus_link_libs INTERFACE
140155 abacus::feature_libs
141156 abacus::linalg_libs )
@@ -211,7 +226,8 @@ if(NOT MSVC)
211226endif ()
212227
213228target_link_libraries (abacus_linalg_libs INTERFACE ${_abacus_linalg_libs} )
214- target_include_directories (abacus_linalg_libs INTERFACE ${_abacus_linalg_include_dirs} )
229+ target_include_directories (abacus_linalg_libs INTERFACE
230+ "$<BUILD_INTERFACE :${_abacus_linalg_include_dirs} >" )
215231
216232target_include_directories (abacus_compile_requirements INTERFACE
217233 ${_abacus_linalg_include_dirs} )
@@ -263,8 +279,7 @@ if(ENABLE_MLALGO)
263279endif ()
264280
265281if (ENABLE_MLALGO OR DEFINED Torch_DIR)
266- list (APPEND _abacus_feature_include_dirs ${TORCH_INCLUDE_DIRS} )
267- list (APPEND _abacus_feature_compile_options ${ABACUS_TORCH_CXX_FLAGS} )
282+ list (APPEND _abacus_feature_libs abacus::torch)
268283endif ()
269284
270285if (ENABLE_CNPY)
@@ -311,10 +326,13 @@ if(USE_DSP)
311326endif ()
312327
313328if (USE_CUDA)
314- if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL 12.9)
315- list (APPEND _abacus_feature_libs cudart)
316- else ()
317- list (APPEND _abacus_feature_libs cudart nvToolsExt)
329+ list (APPEND _abacus_feature_libs
330+ CUDA::cudart
331+ CUDA::cublas
332+ CUDA::cusolver
333+ CUDA::cufft)
334+ if (CUDAToolkit_VERSION VERSION_LESS 12.9)
335+ list (APPEND _abacus_feature_libs CUDA::nvToolsExt)
318336 endif ()
319337 list (APPEND _abacus_feature_include_dirs ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} )
320338 if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL 13.0
@@ -372,12 +390,18 @@ foreach(_abacus_feature_target IN ITEMS
372390 DeePMD::deepmd_cc
373391 NEP::nep
374392 TensorFlow::tensorflow_cc
393+ abacus::torch
375394 ZLIB::ZLIB
376395 PEXSI::PEXSI
377396 NCCL::NCCL
378397 CAL::CAL
379398 cusolverMp::cusolverMp
380399 cublasMp::cublasMp
400+ CUDA::cudart
401+ CUDA::cublas
402+ CUDA::cusolver
403+ CUDA::cufft
404+ CUDA::nvToolsExt
381405 hip::host
382406 hip::device
383407 hip::hipfft
@@ -617,7 +641,10 @@ endif()
617641add_library (device OBJECT ${device_srcs} )
618642
619643if (USE_CUDA)
620- target_link_libraries (device PRIVATE cusolver cublas cufft )
644+ target_link_libraries (device PRIVATE
645+ CUDA::cusolver
646+ CUDA::cublas
647+ CUDA::cufft )
621648elseif (USE_ROCM)
622649 target_link_libraries (device PRIVATE
623650 device_rocm
@@ -710,11 +737,6 @@ target_link_libraries(abacus PRIVATE
710737 "$<BUILD_INTERFACE :${_abacus_internal_targets} >"
711738 abacus::link_libs )
712739
713- # Torch includes some LAPACK routines, but with floating-point exceptions.
714- if (ENABLE_MLALGO OR DEFINED Torch_DIR)
715- target_link_libraries (abacus PRIVATE
716- "$<BUILD_INTERFACE :${TORCH_LIBRARIES} >" )
717- endif ()
718740
719741target_link_libraries (
720742 ${ABACUS_BIN_NAME}
0 commit comments