From 43ee73ecabbfe484fcd798f67854fbcc88e045cf Mon Sep 17 00:00:00 2001 From: Rocco Meli Date: Fri, 14 Mar 2025 13:38:30 +0100 Subject: [PATCH 1/3] fix --- CMakeLists.txt | 14 +++++++--- ...-blas.cmake => Findmulticharge-blas.cmake} | 17 +++++++----- ...ack.cmake => Findmulticharge-lapack.cmake} | 27 ++++++++++++------- config/template.cmake | 4 +-- 4 files changed, 40 insertions(+), 22 deletions(-) rename config/cmake/{Findcustom-blas.cmake => Findmulticharge-blas.cmake} (65%) rename config/cmake/{Findcustom-lapack.cmake => Findmulticharge-lapack.cmake} (59%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bd59d96..0386cead 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,8 +37,8 @@ if(WITH_ILP64) message(STATUS "Using LAPACK/BLAS ILP64 interface") endif() -if(NOT TARGET "LAPACK::LAPACK") - find_package("custom-lapack" REQUIRED) +if(NOT TARGET "multicharge::LAPACK") + find_package("multicharge-lapack" REQUIRED) endif() # Collect subprojects @@ -77,8 +77,8 @@ target_link_libraries( "${PROJECT_NAME}-lib" PUBLIC "${lib-deps}" - "LAPACK::LAPACK" - "$<$:BLAS::BLAS>" + "multicharge::LAPACK" + "$<$:multicharge::BLAS>" ) if(WITH_OpenMP) target_link_libraries( @@ -139,6 +139,12 @@ install( "LICENSE" DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${PROJECT_NAME}" ) +install( + DIRECTORY ${PROJECT_SOURCE_DIR}/config/cmake/ + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + FILES_MATCHING + PATTERN "Find*.cmake" +) # add the testsuite if(WITH_TESTS) diff --git a/config/cmake/Findcustom-blas.cmake b/config/cmake/Findmulticharge-blas.cmake similarity index 65% rename from config/cmake/Findcustom-blas.cmake rename to config/cmake/Findmulticharge-blas.cmake index ec294fd3..c3a7e489 100644 --- a/config/cmake/Findcustom-blas.cmake +++ b/config/cmake/Findmulticharge-blas.cmake @@ -24,9 +24,10 @@ else() set(_nvpl_int "_lp64") endif() -if(NOT BLAS_FOUND) +if(NOT MULTICHARGE_BLAS_FOUND) if(BLA_VENDOR STREQUAL "NVPL") find_package("nvpl_blas" REQUIRED) + set(MULTICHARGE_BLAS_FOUND TRUE) if((BLA_THREAD STREQUAL "OMP") OR (BLA_THREAD STREQUAL "ANY")) set(_nvpl_thread "_omp") @@ -34,14 +35,18 @@ if(NOT BLAS_FOUND) set(_nvpl_thread "_seq") endif() - add_library("BLAS::BLAS" INTERFACE IMPORTED) - target_link_libraries("BLAS::BLAS" INTERFACE "nvpl::blas${_nvpl_int}${_nvpl_thread}") + add_library("multicharge::BLAS" INTERFACE IMPORTED GLOBAL) + target_link_libraries("multicharge::BLAS" INTERFACE "nvpl::blas${_nvpl_int}${_nvpl_thread}") else() find_package("BLAS" REQUIRED) + set(MULTICHARGE_BLAS_FOUND ${BLAS_FOUND}) - if(NOT TARGET "BLAS::BLAS") - add_library("BLAS::BLAS" INTERFACE IMPORTED) - target_link_libraries("BLAS::BLAS" INTERFACE "${BLAS_LIBRARIES}") + if(NOT TARGET "multicharge::BLAS") + add_library("multicharge::BLAS" INTERFACE IMPORTED GLOBAL) + target_link_libraries("multicharge::BLAS" INTERFACE "BLAS::BLAS") endif() endif() endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(multicharge-blas DEFAULT_MSG MULTICHARGE_BLAS_FOUND) diff --git a/config/cmake/Findcustom-lapack.cmake b/config/cmake/Findmulticharge-lapack.cmake similarity index 59% rename from config/cmake/Findcustom-lapack.cmake rename to config/cmake/Findmulticharge-lapack.cmake index 7b0cb36c..8eb9ace9 100644 --- a/config/cmake/Findcustom-lapack.cmake +++ b/config/cmake/Findmulticharge-lapack.cmake @@ -24,9 +24,14 @@ else() set(_nvpl_int "_lp64") endif() -if(NOT LAPACK_FOUND) +if(NOT TARGET "multicharge::BLAS") + find_package("multicharge-blas" REQUIRED) +endif() + +if(NOT MULTICHARGE_LAPACK_FOUND) if(BLA_VENDOR STREQUAL "NVPL") find_package("nvpl_lapack" REQUIRED) + set(MULTICHARGE_LAPACK_FOUND TRUE) if((BLA_THREAD STREQUAL "OMP") OR (BLA_THREAD STREQUAL "ANY")) set(_nvpl_thread "_omp") @@ -34,18 +39,20 @@ if(NOT LAPACK_FOUND) set(_nvpl_thread "_seq") endif() - add_library("LAPACK::LAPACK" INTERFACE IMPORTED) - target_link_libraries("LAPACK::LAPACK" INTERFACE "nvpl::lapack${_nvpl_int}${_nvpl_thread}") + add_library("multicharge::LAPACK" INTERFACE IMPORTED GLOBAL) + target_link_libraries("multicharge::LAPACK" INTERFACE "nvpl::lapack${_nvpl_int}${_nvpl_thread}" "multicharge::BLAS") else() find_package("LAPACK" REQUIRED) + set(MULTICHARGE_LAPACK_FOUND ${LAPACK_FOUND}) + + if(NOT TARGET "multicharge::LAPACK") + add_library("multicharge::LAPACK" INTERFACE IMPORTED GLOBAL) + target_link_libraries("multicharge::LAPACK" INTERFACE "LAPACK::LAPACK" "multicharge::BLAS") + endif() endif() - if(NOT TARGET "BLAS::BLAS") - find_package("custom-blas" REQUIRED) - endif() - if(NOT TARGET "LAPACK::LAPACK") - add_library("LAPACK::LAPACK" INTERFACE IMPORTED) - target_link_libraries("LAPACK::LAPACK" INTERFACE "${LAPACK_LIBRARIES}" "BLAS::BLAS") - endif() endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(multicharge-lapack DEFAULT_MSG MULTICHARGE_LAPACK_FOUND) diff --git a/config/template.cmake b/config/template.cmake index c4f831dd..104c2cdc 100644 --- a/config/template.cmake +++ b/config/template.cmake @@ -12,8 +12,8 @@ if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@") find_dependency("OpenMP") endif() - if(NOT TARGET "LAPACK::LAPACK") - find_dependency("custom-lapack") + if(NOT TARGET "multicharge::LAPACK") + find_dependency("multicharge-lapack") endif() if(NOT TARGET "mctc-lib::mctc-lib") From 7f16518b4930b803288a398d70eefcdb9eb1a68a Mon Sep 17 00:00:00 2001 From: Rocco Meli Date: Tue, 18 Mar 2025 13:41:02 +0100 Subject: [PATCH 2/3] scope blas vendor --- CMakeLists.txt | 2 +- config/CMakeLists.txt | 1 + config/cmake/Findmulticharge-blas.cmake | 4 ++-- config/cmake/Findmulticharge-lapack.cmake | 4 ++-- config/template.cmake | 1 + 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0386cead..d6f9f809 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.18) get_directory_property(is-subproject PARENT_DIRECTORY) project( diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt index 873a5ef4..310812c1 100644 --- a/config/CMakeLists.txt +++ b/config/CMakeLists.txt @@ -18,6 +18,7 @@ option(WITH_OpenMP "Enable support for shared memory parallelisation with OpenMP option(WITH_ILP64 "Enable support for ILP64 BLAS/LAPACK calls" FALSE) option(WITH_TESTS "Enable compilation of unit tests" TRUE) +set(MULTICHARGE_BLAS ${BLA_VENDOR} CACHE STRING "BLAS vendor") if(NOT DEFINED "${PROJECT_NAME}-dependency-method") set( diff --git a/config/cmake/Findmulticharge-blas.cmake b/config/cmake/Findmulticharge-blas.cmake index c3a7e489..dc768511 100644 --- a/config/cmake/Findmulticharge-blas.cmake +++ b/config/cmake/Findmulticharge-blas.cmake @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -if ((BLA_VENDOR MATCHES ^Intel) OR (DEFINED ENV{MKLROOT})) +if ((MULTICHARGE_BLAS MATCHES ^Intel) OR (DEFINED ENV{MKLROOT})) enable_language("C") endif() @@ -25,7 +25,7 @@ else() endif() if(NOT MULTICHARGE_BLAS_FOUND) - if(BLA_VENDOR STREQUAL "NVPL") + if(MULTICHARGE_BLAS STREQUAL "NVPL") find_package("nvpl_blas" REQUIRED) set(MULTICHARGE_BLAS_FOUND TRUE) diff --git a/config/cmake/Findmulticharge-lapack.cmake b/config/cmake/Findmulticharge-lapack.cmake index 8eb9ace9..95b939e3 100644 --- a/config/cmake/Findmulticharge-lapack.cmake +++ b/config/cmake/Findmulticharge-lapack.cmake @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -if ((BLA_VENDOR MATCHES ^Intel) OR (DEFINED ENV{MKLROOT})) +if ((MULTICHARGE_BLAS MATCHES ^Intel) OR (DEFINED ENV{MKLROOT})) enable_language("C") endif() @@ -29,7 +29,7 @@ if(NOT TARGET "multicharge::BLAS") endif() if(NOT MULTICHARGE_LAPACK_FOUND) - if(BLA_VENDOR STREQUAL "NVPL") + if(MULTICHARGE_BLAS STREQUAL "NVPL") find_package("nvpl_lapack" REQUIRED) set(MULTICHARGE_LAPACK_FOUND TRUE) diff --git a/config/template.cmake b/config/template.cmake index 104c2cdc..57bcf32a 100644 --- a/config/template.cmake +++ b/config/template.cmake @@ -12,6 +12,7 @@ if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@") find_dependency("OpenMP") endif() + set(MULTICHARGE_BLAS @MULTICHARGE_BLAS@) if(NOT TARGET "multicharge::LAPACK") find_dependency("multicharge-lapack") endif() From 1a34a092b2237ecb37a4729204c4845e74815d9b Mon Sep 17 00:00:00 2001 From: Rocco Meli Date: Tue, 18 Mar 2025 16:11:47 +0100 Subject: [PATCH 3/3] explicit interface --- config/cmake/Findmulticharge-blas.cmake | 1 + config/cmake/Findmulticharge-lapack.cmake | 1 + 2 files changed, 2 insertions(+) diff --git a/config/cmake/Findmulticharge-blas.cmake b/config/cmake/Findmulticharge-blas.cmake index dc768511..20a3a540 100644 --- a/config/cmake/Findmulticharge-blas.cmake +++ b/config/cmake/Findmulticharge-blas.cmake @@ -22,6 +22,7 @@ if(WITH_ILP64) set(_nvpl_int "_ilp64") else() set(_nvpl_int "_lp64") + set(BLA_SIZEOF_INTEGER 4) endif() if(NOT MULTICHARGE_BLAS_FOUND) diff --git a/config/cmake/Findmulticharge-lapack.cmake b/config/cmake/Findmulticharge-lapack.cmake index 95b939e3..a1b9efb7 100644 --- a/config/cmake/Findmulticharge-lapack.cmake +++ b/config/cmake/Findmulticharge-lapack.cmake @@ -22,6 +22,7 @@ if(WITH_ILP64) set(_nvpl_int "_ilp64") else() set(_nvpl_int "_lp64") + set(BLA_SIZEOF_INTEGER 4) endif() if(NOT TARGET "multicharge::BLAS")