From 38ba5f6b82cc4532385ef2eb2cce85523cabc71c Mon Sep 17 00:00:00 2001 From: SY Wang Date: Thu, 20 Aug 2026 20:40:57 +0800 Subject: [PATCH] CMake: Decouple ELPA dependency from LCAO --- .github/workflows/build_test_cmake.yml | 2 +- CMakeLists.txt | 20 +++++++++----------- cmake/CollectBuildInfoVars.cmake | 14 +++++++------- source/CMakeLists.txt | 7 ++++--- source/source_hsolver/CMakeLists.txt | 2 +- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build_test_cmake.yml b/.github/workflows/build_test_cmake.yml index 1eaa2fd56a..44a943f0b8 100644 --- a/.github/workflows/build_test_cmake.yml +++ b/.github/workflows/build_test_cmake.yml @@ -41,7 +41,7 @@ jobs: name: "Build without LCAO" - tag: gnu external_toolchain_args: "" - build_args: "-DUSE_ELPA=OFF " + build_args: "-DENABLE_ELPA=OFF " name: "Build without ELPA" - tag: gnu external_toolchain_args: "" diff --git a/CMakeLists.txt b/CMakeLists.txt index 05af8265e9..33b852f0cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,7 +65,7 @@ option(ENABLE_RAPIDJSON "Enable rapid-json usage" OFF) option(ENABLE_CNPY "Enable cnpy usage" OFF) # Options requiring MPI and LCAO -cmake_dependent_option(ENABLE_ELPA "Enable ELPA for LCAO" ON "ENABLE_LCAO;ENABLE_MPI" OFF) +cmake_dependent_option(ENABLE_ELPA "Enable ELPA eigensolver" ON "ENABLE_MPI" OFF) cmake_dependent_option(ENABLE_LIBRI "Enable LibRI for hybrid functional" OFF "ENABLE_LCAO;ENABLE_MPI" OFF) cmake_dependent_option(ENABLE_PEXSI "Enable PEXSI for LCAO" OFF "ENABLE_LCAO;ENABLE_MPI" OFF) @@ -304,17 +304,15 @@ if(CMAKE_CXX_COMPILER_ID MATCHES Intel) set(ENABLE_ABACUS_LIBM OFF) endif() -if(ENABLE_LCAO) - if(ENABLE_ELPA) - find_package(ELPA REQUIRED) - endif() - if(ENABLE_PEXSI) - find_package(PEXSI REQUIRED CONFIG) - if(PEXSI_VERSION VERSION_LESS "2.0.0") - message(FATAL_ERROR "PEXSI >= 2.0.0 is required") - endif() - set(CMAKE_CXX_STANDARD 14) +if(ENABLE_ELPA) + find_package(ELPA REQUIRED) +endif() +if(ENABLE_PEXSI) + find_package(PEXSI REQUIRED CONFIG) + if(PEXSI_VERSION VERSION_LESS "2.0.0") + message(FATAL_ERROR "PEXSI >= 2.0.0 is required") endif() + set(CMAKE_CXX_STANDARD 14) endif() if(ENABLE_MPI) diff --git a/cmake/CollectBuildInfoVars.cmake b/cmake/CollectBuildInfoVars.cmake index 028406bbe4..8fc2603c32 100644 --- a/cmake/CollectBuildInfoVars.cmake +++ b/cmake/CollectBuildInfoVars.cmake @@ -126,13 +126,6 @@ else() set(ABACUS_LCAO_ENABLED "False") endif() -# Core Math Libraries -if(ENABLE_LCAO AND ENABLE_ELPA) - set(ABACUS_ELPA_VERSION "yes (v${ELPA_VERSION})") -else() - set(ABACUS_ELPA_VERSION "no") -endif() - # BLAS and FFTW libraries if(MKL_FOUND) set(ABACUS_BLAS_VENDOR "MKL") @@ -179,6 +172,13 @@ else() endif() endif() +# ELPA eigensolver +if(ENABLE_ELPA) + set(ABACUS_ELPA_VERSION "yes (v${ELPA_VERSION})") +else() + set(ABACUS_ELPA_VERSION "no") +endif() + if(ENABLE_LIBXC AND Libxc_VERSION) set(ABACUS_LIBXC_VERSION "yes (v${Libxc_VERSION})") elseif(ENABLE_LIBXC) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index d5a2d5704e..bad5987651 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -687,6 +687,10 @@ target_link_libraries( device base) +if(ENABLE_ELPA) + target_link_libraries(${ABACUS_BIN_NAME} PRIVATE genelpa) +endif() + if(ENABLE_LCAO) target_link_libraries( ${ABACUS_BIN_NAME} @@ -702,9 +706,6 @@ if(ENABLE_LCAO) if(ENABLE_LIBRI) target_link_libraries(${ABACUS_BIN_NAME} PRIVATE bse) endif() - if(ENABLE_ELPA) - target_link_libraries(${ABACUS_BIN_NAME} PRIVATE genelpa) - endif() if(ENABLE_PEXSI) target_link_libraries(${ABACUS_BIN_NAME} PRIVATE pexsi) endif() diff --git a/source/source_hsolver/CMakeLists.txt b/source/source_hsolver/CMakeLists.txt index bf67c01f28..a9f1f9142e 100644 --- a/source/source_hsolver/CMakeLists.txt +++ b/source/source_hsolver/CMakeLists.txt @@ -80,7 +80,7 @@ if(ENABLE_COVERAGE) add_coverage(hsolver) endif() -if(ENABLE_LCAO AND ENABLE_ELPA) +if(ENABLE_ELPA) add_subdirectory(module_genelpa) endif()