@@ -32,50 +32,52 @@ else()
3232endif ()
3333find_package_handle_standard_args (ARMPL REQUIRED_VARS ARMPL_LIBRARY)
3434
35- get_filename_component (ARMPL_LIB_DIR ${ARMPL_LIBRARY} DIRECTORY )
36- find_path (ARMPL_INCLUDE armpl.h HINTS ${ARMPL_ROOT} $ENV{ARMPLROOT} PATH_SUFFIXES include )
37- #cmake replaces fullpath to libarmpl by -larmpl (because SONAME is absent) and -Wl,-rpath is not enough for some compilers as hint
38- #so we need to add -L to compiler, otherwise we need to set LIBRARY_PATH manually when building
39- if (UNIX )
40- list (APPEND ARMPL_LINK "-Wl,-rpath,${ARMPL_LIB_DIR} -L${ARMPL_LIB_DIR} " )
41- endif ()
42- list (APPEND ARMPL_LINK ${ARMPL_LIBRARY} )
43- list (APPEND ARMPL_LINK ${ARMPL_LIBRARY} )
44- message (${ARMPL_LINK} )
45- find_package_handle_standard_args (ARMPL REQUIRED_VARS ARMPL_INCLUDE ARMPL_LINK)
35+ if (ARMPL_FOUND AND NOT TARGET ONEMKL::ARMPL::ARMPL)
36+ get_filename_component (ARMPL_LIB_DIR ${ARMPL_LIBRARY} DIRECTORY )
37+ find_path (ARMPL_INCLUDE armpl.h HINTS ${ARMPL_ROOT} $ENV{ARMPLROOT} PATH_SUFFIXES include )
38+ #cmake replaces fullpath to libarmpl by -larmpl (because SONAME is absent) and -Wl,-rpath is not enough for some compilers as hint
39+ #so we need to add -L to compiler, otherwise we need to set LIBRARY_PATH manually when building
40+ if (UNIX )
41+ list (APPEND ARMPL_LINK "-Wl$<COMMA >-rpath$<COMMA >${ARMPL_LIB_DIR} -L${ARMPL_LIB_DIR} " )
42+ endif ()
43+ list (APPEND ARMPL_LINK ${ARMPL_LIBRARY} )
44+ list (APPEND ARMPL_LINK ${ARMPL_LIBRARY} )
45+ message (${ARMPL_LINK} )
46+ find_package_handle_standard_args (ARMPL REQUIRED_VARS ARMPL_INCLUDE ARMPL_LINK)
4647
47- # Check ARMPL version (only versions higher or equal to 22.0.1 are supported)
48- set (ARMPL_MAJOR 22)
49- set (ARMPL_MINOR 0)
50- set (ARMPL_BUILD 1)
51- file (WRITE ${CMAKE_BINARY_DIR} /armplversion.cpp
52- "#include <stdio.h>\n "
53- "\n "
54- "#include \" armpl.h\"\n "
55- "\n "
56- "int main(void) {\n "
57- " int major, minor, build;\n "
58- " char *tag;\n "
59- " armplversion(&major, &minor, &build, (const char **)&tag);\n "
60- " if (major > MAJOR) {\n "
61- " return 0;\n "
62- " }\n "
63- " else if (major == MAJOR && minor > MINOR) {\n "
64- " return 0;\n "
65- " }\n "
66- " else if (major == MAJOR && minor == MINOR && build >= BUILD) {\n "
67- " return 0;\n "
68- " }\n "
69- " printf(\" You are using version %d.%d.%d\\ n\" , major, minor, build);\n "
70- " return 1;\n "
71- "}\n " )
72- execute_process (COMMAND ${CMAKE_CXX_COMPILER} armplversion.cpp -O0 -I${ARMPL_INCLUDE} -Wl,-rpath,${ARMPL_LIB_DIR} -larmpl -DMAJOR=${ARMPL_MAJOR} -DMINOR=${ARMPL_MINOR} -DBUILD=${ARMPL_BUILD} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
73- execute_process (COMMAND ./a.out WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE ARMPL_CHECK_VERSION )
74- execute_process (COMMAND rm ./a.out WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
75- execute_process (COMMAND rm armplversion.cpp WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
76- if (ARMPL_CHECK_VERSION)
77- message (FATAL_ERROR "ARMPL backend does not support ARMPL version prior to version ${ARMPL_MAJOR} .${ARMPL_MINOR} .${ARMPL_BUILD} " )
78- endif ()
48+ # Check ARMPL version (only versions higher or equal to 22.0.1 are supported)
49+ set (ARMPL_MAJOR 22)
50+ set (ARMPL_MINOR 0)
51+ set (ARMPL_BUILD 1)
52+ file (WRITE ${CMAKE_BINARY_DIR} /armplversion.cpp
53+ "#include <stdio.h>\n "
54+ "\n "
55+ "#include \" armpl.h\"\n "
56+ "\n "
57+ "int main(void) {\n "
58+ " int major, minor, build;\n "
59+ " char *tag;\n "
60+ " armplversion(&major, &minor, &build, (const char **)&tag);\n "
61+ " if (major > MAJOR) {\n "
62+ " return 0;\n "
63+ " }\n "
64+ " else if (major == MAJOR && minor > MINOR) {\n "
65+ " return 0;\n "
66+ " }\n "
67+ " else if (major == MAJOR && minor == MINOR && build >= BUILD) {\n "
68+ " return 0;\n "
69+ " }\n "
70+ " printf(\" You are using version %d.%d.%d\\ n\" , major, minor, build);\n "
71+ " return 1;\n "
72+ "}\n " )
73+ execute_process (COMMAND ${CMAKE_CXX_COMPILER} armplversion.cpp -O0 -I${ARMPL_INCLUDE} -Wl,-rpath,${ARMPL_LIB_DIR} -larmpl -DMAJOR=${ARMPL_MAJOR} -DMINOR=${ARMPL_MINOR} -DBUILD=${ARMPL_BUILD} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
74+ execute_process (COMMAND ./a.out WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE ARMPL_CHECK_VERSION )
75+ execute_process (COMMAND rm ./a.out WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
76+ execute_process (COMMAND rm armplversion.cpp WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
77+ if (ARMPL_CHECK_VERSION)
78+ message (FATAL_ERROR "ARMPL backend does not support ARMPL version prior to version ${ARMPL_MAJOR} .${ARMPL_MINOR} .${ARMPL_BUILD} " )
79+ endif ()
7980
80- add_library (ONEMKL::ARMPL::ARMPL UNKNOWN IMPORTED )
81- set_target_properties (ONEMKL::ARMPL::ARMPL PROPERTIES IMPORTED_LOCATION ${ARMPL_LIBRARY} )
81+ add_library (ONEMKL::ARMPL::ARMPL UNKNOWN IMPORTED )
82+ set_target_properties (ONEMKL::ARMPL::ARMPL PROPERTIES IMPORTED_LOCATION ${ARMPL_LIBRARY} )
83+ endif ()
0 commit comments