Skip to content

Commit 7022bc5

Browse files
committed
cmake: add PETSc imported targets
1 parent dd7c5f6 commit 7022bc5

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ function(configureBitpitTargetDependencies TARGET_NAME DEPENDENCIES_SCOPE)
116116
endif()
117117

118118
if (PETSC_FOUND)
119-
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${PETSC_LIBRARIES})
120-
target_include_directories(${TARGET_NAME} ${DEPENDENCIES_SCOPE} ${PETSC_INCLUDES})
119+
target_link_libraries(${TARGET_NAME} ${DEPENDENCIES_SCOPE} PETSc::PETSc)
121120
endif()
122121
unset(_PETSc_index)
123122

external/PETSc/cmake/FindPETSc.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,3 +444,59 @@ find_package_handle_standard_args (PETSc
444444
REQUIRED_VARS PETSC_INCLUDES PETSC_LIBRARIES PETSC_EXECUTABLE_RUNS
445445
VERSION_VAR PETSC_VERSION
446446
FAIL_MESSAGE "PETSc could not be found. Be sure to set PETSC_DIR and PETSC_ARCH.")
447+
448+
#-----------------------------------------------------------------------------
449+
# Create imported target
450+
#-----------------------------------------------------------------------------
451+
if (NOT TARGET PETSc::PETSc)
452+
set(PETSC_LIBRARY_TARGETS "")
453+
foreach(LIBRARY_PATH ${PETSC_LIBRARIES})
454+
get_filename_component(LIBRARY_FILENAME "${LIBRARY_PATH}" NAME)
455+
get_filename_component(LIBRARY_EXTENSION "${LIBRARY_PATH}" LAST_EXT)
456+
457+
string(REGEX REPLACE "\\.[^.]*$" "" LIBRARY_TARGET "${LIBRARY_FILENAME}")
458+
string(REGEX REPLACE "^lib" "" LIBRARY_TARGET "${LIBRARY_TARGET}")
459+
set(LIBRARY_TARGET "PETSc::${LIBRARY_TARGET}_library")
460+
461+
if (LIBRARY_EXTENSION STREQUAL ".a")
462+
set(TARGET_TYPE "STATIC")
463+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
464+
elseif (LIBRARY_EXTENSION STREQUAL ".lib")
465+
get_filename_component(LIBRARY_BASENAME "${LIBRARY_FILENAME}" NAME_WE)
466+
get_filename_component(LIBRARY_DIRECTORY "${LIBRARY_PATH}" DIRECTORY)
467+
set(LIBRARY_DLL_SEARCH_PATHS
468+
"${LIBRARY_DIRECTORY}"
469+
"${LIBRARY_DIRECTORY}/../bin"
470+
)
471+
472+
set(TARGET_TYPE "STATIC")
473+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
474+
foreach(LIBRARY_DLL_SEARCH_PATH IN LISTS LIBRARY_DLL_SEARCH_PATHS)
475+
set(CANDIDATE_LIBRARY_DLL_PATH "${LIBRARY_DLL_SEARCH_PATH}/${LIBRARY_BASENAME}.dll")
476+
if(EXISTS "${CANDIDATE_LIBRARY_DLL_PATH}")
477+
set(TARGET_TYPE "SHARED")
478+
set(TARGET_IMPORTED_LOCATION "${CANDIDATE_LIBRARY_DLL_PATH}")
479+
break()
480+
endif()
481+
endforeach()
482+
elseif (LIBRARY_EXTENSION STREQUAL ".so")
483+
set(TARGET_TYPE "SHARED")
484+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
485+
elseif (LIBRARY_EXTENSION STREQUAL ".dll")
486+
set(TARGET_TYPE "SHARED")
487+
set(TARGET_IMPORTED_LOCATION "${LIBRARY_PATH}")
488+
endif()
489+
490+
add_library(${LIBRARY_TARGET} ${TARGET_TYPE} IMPORTED)
491+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_LOCATION ${TARGET_IMPORTED_LOCATION})
492+
if (WIN32 AND TARGET_TYPE STREQUAL "SHARED")
493+
set_target_properties(${LIBRARY_TARGET} PROPERTIES IMPORTED_IMPLIB "${LIBRARY_PATH}")
494+
endif()
495+
set_target_properties(${LIBRARY_TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PETSC_INCLUDES}")
496+
target_compile_definitions(${LIBRARY_TARGET} INTERFACE ${PETSC_DEFINITIONS})
497+
list(APPEND PETSC_LIBRARY_TARGETS ${LIBRARY_TARGET})
498+
endforeach()
499+
500+
add_library(PETSc::PETSc INTERFACE IMPORTED)
501+
set_target_properties(PETSc::PETSc PROPERTIES INTERFACE_LINK_LIBRARIES "${PETSC_LIBRARY_TARGETS}")
502+
endif()

0 commit comments

Comments
 (0)