From e4beae16fcc9f7d663ddff5ea52c2062e4630a16 Mon Sep 17 00:00:00 2001 From: Ye Luo Date: Sun, 11 Oct 2020 02:16:46 -0500 Subject: [PATCH] Fix ELPA --- CMakeLists.txt | 25 ++++++++++--------------- cmake/FindELPA.cmake | 17 ++++++++++++++--- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 087bb9da1..f3d7400e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -252,27 +252,22 @@ qe_install_targets(qe_elpa) ########################################################### if(QE_ENABLE_ELPA) find_package(ELPA REQUIRED) - - string(REGEX MATCH "elpa-[0-9][0-9][0-9][0-9]" CMAKE_MATCH_ELPA_VER "${ELPA_INCLUDE_DIRS}") - string(REGEX MATCH "[0-9][0-9][0-9][0-9]" CMAKE_MATCH_ONLY_VER "${CMAKE_MATCH_ELPA_VER}") - + # Check if ELPA version is compatible with QE - if(CMAKE_MATCH_ONLY_VER EQUAL "2018" OR - CMAKE_MATCH_ONLY_VER EQUAL "2017" OR - CMAKE_MATCH_ONLY_VER EQUAL "2016") - qe_add_global_compile_definitions(__ELPA_2016) - elseif(CMAKE_MATCH_ONLY_VER EQUAL "2015") - qe_add_global_compile_definitions(__ELPA_2015) - elseif(CMAKE_MATCH_ONLY_VER LESS "2015") + if(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2018.11") qe_add_global_compile_definitions(__ELPA) + elseif(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2016.11") + qe_add_global_compile_definitions(__ELPA_2016) + elseif(ELPA_VERSION_STRING VERSION_GREATER_EQUAL "2015") + qe_add_global_compile_definitions(__ELPA_2015) else() - message(FATAL_ERROR "ELPA ver. ${CMAKE_MATCH_ONLY_VER} is not supported.") + message(FATAL_ERROR "ELPA verion ${ELPA_VERSION_STRING} is not supported.") endif() # Looking for module directory - file(GLOB_RECURSE ELPA_MODS "${ELPA_INCLUDE_DIRS}/*.mod") - list(GET ELPA_MODS 0 ELPA_MOD) - if(EXISTS ${ELPA_MOD}) + file(GLOB_RECURSE ELPA_MODS_FILES "${ELPA_INCLUDE_DIRS}/*.mod" "${ELPA_INCLUDE_DIRS}/../modules/*.mod") + if(ELPA_MODS_FILES) + list(GET ELPA_MODS_FILES 0 ELPA_MOD) get_filename_component(ELPA_MOD_DIR "${ELPA_MOD}" PATH) set(ELPA_INCLUDE_DIRS "${ELPA_MOD_DIR};${ELPA_INCLUDE_DIRS}") else() diff --git a/cmake/FindELPA.cmake b/cmake/FindELPA.cmake index 1e308a734..a59f085d1 100644 --- a/cmake/FindELPA.cmake +++ b/cmake/FindELPA.cmake @@ -198,6 +198,10 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR NAMES elpa.h HINTS ${ELPA_DIR} PATH_SUFFIXES "include" "include/elpa") + if(NOT ELPA_elpa.h_DIRS) + file(GLOB ELPA_elpa.h_PATH "${ELPA_DIR}/include/elpa-20*/elpa/elpa.h") + get_filename_component(ELPA_elpa.h_DIRS "${ELPA_elpa.h_PATH}" PATH) + endif() else() set(ELPA_elpa.h_DIRS "ELPA_elpa.h_DIRS-NOTFOUND") find_path(ELPA_elpa.h_DIRS @@ -210,6 +214,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR # If found, add path to cmake variable # ------------------------------------ if (ELPA_elpa.h_DIRS) + message(STATUS "elpa.h found in ${ELPA_elpa.h_DIRS}") set(ELPA_INCLUDE_DIRS "${ELPA_elpa.h_DIRS}") else () set(ELPA_INCLUDE_DIRS "ELPA_INCLUDE_DIRS-NOTFOUND") @@ -218,6 +223,12 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR endif() endif() + # If not defined, guess the version string + if(NOT ELPA_VERSION_STRING) + string(REGEX MATCH "elpa-20[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9]" CMAKE_MATCH_ELPA_VER "${ELPA_INCLUDE_DIRS}") + string(REGEX MATCH "20[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9]" ELPA_VERSION_STRING "${CMAKE_MATCH_ELPA_VER}") + message(status "ELPA version ${ELPA_VERSION_STRING}") + endif() # Looking for lib # --------------- @@ -354,7 +365,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR # test link unset(ELPA_WORKS CACHE) include(CheckFunctionExists) - check_function_exists(elpa_dgetrf ELPA_WORKS) + check_function_exists(elpa_init ELPA_WORKS) mark_as_advanced(ELPA_WORKS) if(ELPA_WORKS) @@ -368,7 +379,7 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT ELPA_FOUND) OR list(REMOVE_DUPLICATES ELPA_LINKER_FLAGS) else() if(NOT ELPA_FIND_QUIETLY) - message(STATUS "Looking for elpa : test of elpa_dgetrf with + message(STATUS "Looking for elpa : test of elpa_init with elpa, cblas, cuda and lapack libraries fails") message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}") message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}") @@ -413,4 +424,4 @@ else() find_package_handle_standard_args(ELPA DEFAULT_MSG ELPA_LIBRARIES ELPA_WORKS) -endif() \ No newline at end of file +endif()