From 1579a6d4e6e17a3484d68fe597ac1765e386e25f Mon Sep 17 00:00:00 2001 From: Lars Bilke <lars.bilke@ufz.de> Date: Wed, 16 Feb 2022 11:59:50 +0100 Subject: [PATCH] [cmake] Use a better FindMKL.cmake which includes also linker flags. Environment variable MKLROOT is required! Detection is based on mkl_link_tool. --- CMakeLists.txt | 16 ++++++++++++++-- MathLib/CMakeLists.txt | 4 +++- scripts/cmake/CMakeSetup.cmake | 9 +++++++++ scripts/cmake/Find.cmake | 22 ++++++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f3e337f2c9..25bcdffeb3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,18 @@ if(MSVC) set(CMD_COMMAND "cmd;/c") endif() +option(OGS_USE_MKL "Use Intel MKL" OFF) +if(OGS_USE_MKL) + option(MKL_USE_parallel "Use MKL parallel" True) + option(MKL_USE_sdl "Single Dynamic Library or static/dynamic" False) + set(MKL_USE_interface + "lp64" + CACHE + STRING + "for Intel(R)64 compatible arch: ilp64/lp64 or for ia32 arch: cdecl/stdcall" + ) +endif() + # ---- CMake includes ---- include(Versions) include(GitSetup) @@ -144,8 +156,6 @@ else() endif() # Eigen End -option(OGS_USE_MKL "Use Intel MKL" OFF) - # Debug option(OGS_FATAL_ABORT "Abort in OGS_FATAL" OFF) @@ -274,3 +284,5 @@ unset(PRE_INSTALL_RUN CACHE) include(Features) printEnabledProcesses() + +printMKLUsage() diff --git a/MathLib/CMakeLists.txt b/MathLib/CMakeLists.txt index 204d6fa93a4..68c1dfb6e78 100644 --- a/MathLib/CMakeLists.txt +++ b/MathLib/CMakeLists.txt @@ -41,7 +41,9 @@ if(OGS_USE_LIS) endif() if(OGS_USE_MKL) target_include_directories(MathLib PRIVATE ${MKL_INCLUDE_DIR}) - target_link_libraries(MathLib PUBLIC ${MKL_LIBRARIES}) + target_link_libraries(MathLib PRIVATE ${MKL_LIBRARIES}) + target_link_options(MathLib PUBLIC ${MKL_LINK_FLAGS}) + target_compile_definitions(MathLib PRIVATE ${MKL_DEFINITIONS}) endif() target_compile_definitions( diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake index 5bea088560a..5c31bb46524 100644 --- a/scripts/cmake/CMakeSetup.cmake +++ b/scripts/cmake/CMakeSetup.cmake @@ -16,11 +16,20 @@ CPMAddPackage( GIT_TAG d98828f54f6974717798e63195cfbf08fe2daad0 DOWNLOAD_ONLY YES ) +# To be replaced later. See +# https://gitlab.kitware.com/cmake/cmake/-/issues/22831 +CPMAddPackage( + NAME findmkl_cmake + GITHUB_REPOSITORY bilke/findmkl_cmake + GIT_TAG c8a6db75ae33b580cfc7d09d5b68493229793c33 + DOWNLOAD_ONLY YES +) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/scripts/cmake" "${PROJECT_SOURCE_DIR}/scripts/cmake/jedbrown" "${PROJECT_SOURCE_DIR}/scripts/cmake/vector-of-bool" + "${findmkl_cmake_SOURCE_DIR}/cmake" "${cmake-modules_SOURCE_DIR}" ) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 7467130e97e..dd88b0acef7 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -101,9 +101,31 @@ find_package(GEOTIFF) if(OGS_USE_MKL) find_package(MKL REQUIRED) + find_file(MKL_SETVARS setvars.sh PATHS ${MKL_ROOT_DIR} ${MKL_ROOT_DIR}/.. + ${MKL_ROOT_DIR}/../.. + NO_DEFAULT_PATH + ) endif() # Check MPI package if(OGS_USE_MPI) find_package(MPI REQUIRED) endif() + +# Prints instructions for setting MKL runtime environment. +function(printMKLUsage) + if(NOT OGS_USE_MKL) + return() + endif() + if(MKL_SETVARS) + message( + STATUS + "NOTE: Please run `source ${MKL_SETVARS}` to set LD_LIBRARY_PATH for MKL!\n" + ) + else() + message( + STATUS + "NOTE: Please set LD_LIBRARY_PATH with `export LD_LIBRARY_PATH=${MKL_LIBRARY_DIR}`!\n" + ) + endif() +endfunction() -- GitLab