diff --git a/CMakeLists.txt b/CMakeLists.txt index 0bd59d96..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( @@ -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/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/Findcustom-blas.cmake b/config/cmake/Findmulticharge-blas.cmake similarity index 59% rename from config/cmake/Findcustom-blas.cmake rename to config/cmake/Findmulticharge-blas.cmake index ec294fd3..20a3a540 100644 --- a/config/cmake/Findcustom-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() @@ -22,11 +22,13 @@ if(WITH_ILP64) set(_nvpl_int "_ilp64") else() set(_nvpl_int "_lp64") + set(BLA_SIZEOF_INTEGER 4) endif() -if(NOT BLAS_FOUND) - if(BLA_VENDOR STREQUAL "NVPL") +if(NOT MULTICHARGE_BLAS_FOUND) + if(MULTICHARGE_BLAS 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 +36,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 53% rename from config/cmake/Findcustom-lapack.cmake rename to config/cmake/Findmulticharge-lapack.cmake index 7b0cb36c..a1b9efb7 100644 --- a/config/cmake/Findcustom-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() @@ -22,11 +22,17 @@ if(WITH_ILP64) set(_nvpl_int "_ilp64") else() set(_nvpl_int "_lp64") + set(BLA_SIZEOF_INTEGER 4) endif() -if(NOT LAPACK_FOUND) - if(BLA_VENDOR STREQUAL "NVPL") +if(NOT TARGET "multicharge::BLAS") + find_package("multicharge-blas" REQUIRED) +endif() + +if(NOT MULTICHARGE_LAPACK_FOUND) + if(MULTICHARGE_BLAS 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 +40,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..57bcf32a 100644 --- a/config/template.cmake +++ b/config/template.cmake @@ -12,8 +12,9 @@ if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@") find_dependency("OpenMP") endif() - if(NOT TARGET "LAPACK::LAPACK") - find_dependency("custom-lapack") + set(MULTICHARGE_BLAS @MULTICHARGE_BLAS@) + if(NOT TARGET "multicharge::LAPACK") + find_dependency("multicharge-lapack") endif() if(NOT TARGET "mctc-lib::mctc-lib")