moved libs to the lib directory

This commit is contained in:
2025-11-13 18:40:06 +03:00
parent 4678ff1690
commit dda7ed6db8
634 changed files with 3 additions and 2 deletions

View File

@ -0,0 +1,173 @@
# базовая директория может быть задана с помощью переменной cmake MKL_ROOT (самый высокий приоритет)
# или с помощью переменной окружения MKL_ROOT.
# Если MKL_ROOT не задан, то ищет в стандартных путях:
# на Windows в Program Files или Program Files (x86) в директории Intel/oneAPI/mkl/latest
# на Linux в штатных путях (в корне или /usr)
#
# использует tbb threading model, соглашение ILP64 на 64 битах, cdecl на 32
# (при необходимости можно добавить опции...)
# можно задать пользовательскую версию библитеки
# (если создана своя версия с подможеством функций с помощью intel compiler):
# MKL_CUSTOM_LIBRARY_NAME - имя библиотеки
# MKL_CUSTOM_LIBRARY_DIR - путь к пользовательской библиотеки без lib/<сиффикс> (может быть вне MKL_ROOT)
# Заголовочные файлы в этом случае сперва ищутся в ${MKL_CUSTOM_LIBRARY_DIR}/include, а затем уже внутри MKL_ROOT
# в первую очередь пытаемся найти mkl с помощью pkgconfig, если применимо
if (NOT MKL_FOUND)
if(NOT WIN32 AND NOT MKL_CUSTOM_LIBRARY_NAME AND NOT MKL_ROOT)
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
#ищем среди разных реализаций потоков в порядке приоритета
pkg_check_modules(MKL QUIET mkl-dynamic-ilp64-tbb)
if (NOT MKL_FOUND)
pkg_check_modules(MKL QUIET mkl-dynamic-ilp64-iomp)
endif(NOT MKL_FOUND)
if (NOT MKL_FOUND)
pkg_check_modules(MKL QUIET mkl-dynamic-ilp64-seq)
endif(NOT MKL_FOUND)
endif(PkgConfig_FOUND)
endif()
endif(NOT MKL_FOUND)
# если не нашли через PkgConfig, то ищмем самостоятельно
if (NOT MKL_FOUND)
macro(MKL_FIND_LIBRARY LIB_VAR LIB_FILE_NAME)
find_library(${LIB_VAR} NAMES ${LIB_FILE_NAME}
PATHS
${MKL_SEARCH_LIBRARY_DIRS}
PATH_SUFFIXES ${MKL_SEARCH_LIBRARY_DIR_SUFFIX}
)
get_filename_component(LIB_DIR ${${LIB_VAR}} DIRECTORY)
get_filename_component(LIB_NAME ${${LIB_VAR}} NAME)
if (${LIB_DIR} IN_LIST MKL_LIBRARY_DIRS)
else()
set(MKL_LIBRARY_DIRS ${MKL_LIBRARY_DIRS} ${LIB_DIR})
endif()
set(MKL_REQIRED_LIBS ${MKL_REQIRED_LIBS} ${LIB_VAR})
endmacro()
if(WIN32)
cmake_policy(VERSION 3.2)
# в переменных окружения могут быть пути с разделителем \.
# если пыти с разными разделителями, то могут быть проблемы, поэтому переводим
# все к /
if(NOT MKL_ROOT)
set(set MKL_ROOT $ENV{MKLROOT})
endif(NOT MKL_ROOT)
if(MKL_ROOT)
string(REGEX REPLACE "\\\\" "/" MKL_ROOT MKL_ROOT)
endif(MKL_ROOT)
string(REGEX REPLACE "\\\\" "/" PROGFILES $ENV{PROGRAMFILES})
string(REGEX REPLACE "\\\\" "/" PROGFILESX86 $ENV{PROGRAMFILES\(x86\)})
if(MKL_ROOT)
set(MKL_SEARCH_DIRS ${MKL_ROOT})
else(MKL_ROOT)
set(MKL_WINSTD_DIR "Intel/oneAPI/mkl/latest")
set(MKL_SEARCH_DIRS "${PROGFILES}/${MKL_WINSTD_DIR}" "${PROGFILESX86}/${MKL_WINSTD_DIR}")
endif(MKL_ROOT)
set(MKL_SEARCH_INCLUDE_DIRS ${MKL_SEARCH_DIRS})
set(MKL_SEARCH_LIBRARY_DIRS ${MKL_SEARCH_DIRS})
set(MKL_SEARCH_INCLUDE_DIR_SUFFIX include)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(MKL_SEARCH_LIBRARY_DEF_SUFFIX "ia32_win")
else(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(MKL_SEARCH_LIBRARY_DEF_SUFFIX "intel64_win")
endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
endif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
set(MKL_SEARCH_LIBRARY_DIR_SUFFIX "lib/${MKL_SEARCH_LIBRARY_DEF_SUFFIX}")
#todo возможно сделать опцию, static или dll
set(MKL_LIB_FILE_SUFFIX "_dll")
else(WIN32)
if(NOT MKL_ROOT)
set(MKL_ROOT $ENV{MKLROOT})
endif(NOT MKL_ROOT)
if (MKL_ROOT)
set(MKL_SEARCH_INCLUDE_DIRS ${MKL_ROOT}/include)
else(MKL_ROOT)
set(MKL_SEARCH_INCLUDE_DIRS include local/include)
endif(MKL_ROOT)
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
if (MKL_ROOT)
set(MKL_SEARCH_LIBRARY_DIRS ${MKL_ROOT}/lib)
else (MKL_ROOT)
set(MKL_SEARCH_LIBRARY_DIRS lib local/lib lib/i386-linux-gnu)
endif(MKL_ROOT)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
if (MKL_ROOT)
set(MKL_SEARCH_LIBRARY_DIRS ${MKL_ROOT}/lib64 ${MKL_ROOT}/lib/intel64)
else(MKL_ROOT)
set(MKL_SEARCH_LIBRARY_DIRS lib64 lib/x86_64-linux-gnu local/lib64)
endif(MKL_ROOT)
#взято из готового примера - проверить необходимость
set(ABI "-m64")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ABI}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ABI}")
endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
endif(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
#todo возможно сделать опцию выбора между ILP64 и LP64 (MKL_LONG 64 или 32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMKL_ILP64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMKL_ILP64")
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
if(MKL_CUSTOM_LIBRARY_DIR)
set(MKL_SEARCH_INCLUDE_DIRS ${MKL_CUSTOM_LIBRARY_DIR} ${MKL_SEARCH_INCLUDE_DIRS})
endif(MKL_CUSTOM_LIBRARY_DIR)
find_path(MKL_INCLUDE_DIR NAMES mkl.h
PATHS
${MKL_SEARCH_INCLUDE_DIRS}
PATH_SUFFIXES ${MKL_SEARCH_INCLUDE_DIR_SUFFIX}
)
if (NOT MKL_CUSTOM_LIBRARY_NAME)
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
MKL_FIND_LIBRARY(MKL_INTERFACE_LIBRARY mkl_intel_c${MKL_LIB_FILE_SUFFIX})
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
MKL_FIND_LIBRARY(MKL_INTERFACE_LIBRARY mkl_intel_ilp64${MKL_LIB_FILE_SUFFIX})
endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
MKL_FIND_LIBRARY(MKL_CORE_LIBRARY mkl_core${MKL_LIB_FILE_SUFFIX})
MKL_FIND_LIBRARY(MKL_THREAD_LIBRARY mkl_tbb_thread${MKL_LIB_FILE_SUFFIX})
if(NOT WIN32)
MKL_FIND_LIBRARY(MKL_TBB_LIBRARY tbb)
endif(NOT WIN32)
else(NOT MKL_CUSTOM_LIBRARY_NAME)
set(MKL_SEARCH_LIBRARY_DIRS ${MKL_SEARCH_LIBRARY_DIRS} ${MKL_CUSTOM_LIBRARY_DIR})
MKL_FIND_LIBRARY(MKL_CUSTOM_LIBRARY ${MKL_CUSTOM_LIBRARY_NAME})
endif(NOT MKL_CUSTOM_LIBRARY_NAME)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MKL
REQUIRED_VARS MKL_INCLUDE_DIR ${MKL_REQIRED_LIBS}
)
if(MKL_FOUND)
foreach(MKL_LIB ${MKL_REQIRED_LIBS})
set(MKL_LIBRARIES ${MKL_LIBRARIES} ${${MKL_LIB}})
endforeach()
set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIR})
endif(MKL_FOUND)
endif()