Skip to content

Commit 80f8cba

Browse files
committed
cmake: add CBLAS imported targets
1 parent 53df09e commit 80f8cba

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,10 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE)
9595
endif()
9696

9797
if (CBLAS_FOUND)
98-
set(CBLAS_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/CBLAS/include")
98+
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} CBLAS::CBLAS)
9999

100-
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${CBLAS_LIBRARIES})
100+
set(CBLAS_PRIVATE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/external/CBLAS/include")
101101
target_include_directories(${TARGET_NAME} PRIVATE ${CBLAS_PRIVATE_INCLUDE_DIR})
102-
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${CBLAS_INCLUDE_DIRS})
103102
endif()
104103

105104
if (LAPACK_FOUND)

external/CBLAS/cmake/FindCBLAS.cmake

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,3 +394,76 @@ include(FindPackageHandleStandardArgs)
394394
find_package_handle_standard_args(CBLAS DEFAULT_MSG
395395
CBLAS_LIBRARIES
396396
CBLAS_WORKS)
397+
398+
#-----------------------------------------------------------------------------
399+
# Create imported target
400+
#-----------------------------------------------------------------------------
401+
if (NOT TARGET CBLAS::CBLAS)
402+
set(CBLAS_LIBRARY_TARGETS "")
403+
foreach(LIBRARY_PATH ${CBLAS_LIBRARIES})
404+
get_filename_component(LIBRARY_FILENAME "${LIBRARY_PATH}" NAME)
405+
get_filename_component(LIBRARY_EXTENSION "${LIBRARY_PATH}" LAST_EXT)
406+
407+
string(REGEX REPLACE "\\.[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME}")
408+
string(REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET}")
409+
set(LIBRARY_TARGET "CBLAS::${LIBRARY_TARGET}_library")
410+
411+
if (LIBRARY_EXTENSION STREQUAL ".a")
412+
set(TARGET_TYPE "STATIC")
413+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
414+
elseif (LIBRARY_EXTENSION STREQUAL ".lib")
415+
get_filename_component(LIBRARY_BASENAME "${LIBRARY_FILENAME}" NAME_WE)
416+
get_filename_component(LIBRARY_DIRECTORY "${LIBRARY_PATH}" DIRECTORY)
417+
set(LIBRARY_DLL_SEARCH_PATHS
418+
"${LIBRARY_DIRECTORY}"
419+
"${LIBRARY_DIRECTORY}/../bin"
420+
"${LIBRARY_DIRECTORY}/../../redist/intel64"
421+
"${LIBRARY_DIRECTORY}/../../../redist/intel64"
422+
"${LIBRARY_DIRECTORY}/../../redist/intel64/compiler"
423+
"${LIBRARY_DIRECTORY}/../../../redist/intel64/compiler"
424+
"${LIBRARY_DIRECTORY}/../../redist/intel64_win/compiler"
425+
"${LIBRARY_DIRECTORY}/../../../redist/intel64_win/compiler"
426+
427+
)
428+
429+
set(TARGET_TYPE "STATIC")
430+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
431+
foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
432+
string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
433+
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.dll")
434+
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
435+
set(TARGET_TYPE "SHARED")
436+
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
437+
break()
438+
endif()
439+
440+
string(REGEX REPLACE "_dll$" "" CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_BASENAME}")
441+
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${CANDIDATE_LIBRARY_DLL_PATH}.2.dll")
442+
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
443+
set(TARGET_TYPE "SHARED")
444+
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
445+
break()
446+
endif()
447+
endforeach()
448+
elseif (LIBRARY_EXTENSION STREQUAL ".so")
449+
set(TARGET_TYPE "SHARED")
450+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
451+
elseif (LIBRARY_EXTENSION STREQUAL ".dll")
452+
set(TARGET_TYPE "SHARED")
453+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
454+
endif()
455+
456+
add_library(${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED)
457+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION})
458+
if (WIN32 AND TARGET_TYPE STREQUAL "SHARED")
459+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH}")
460+
endif()
461+
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CBLAS_INCLUDE_DIRS}")
462+
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_LINK_OPTIONS "${CBLAS_LINKER_FLAGS}")
463+
464+
list(APPEND CBLAS_LIBRARY_TARGETS ${LIBRARY_TARGET})
465+
endforeach()
466+
467+
add_library(CBLAS::CBLAS INTERFACE IMPORTED)
468+
set_target_properties(CBLAS::CBLAS PROPERTIES INTERFACE_LINK_LIBRARIES "${CBLAS_LIBRARY_TARGETS}")
469+
endif()

0 commit comments

Comments
 (0)