Skip to content

Commit 5f1a1bb

Browse files
committed
next petsc attempt...moved to FindPETSc and create my own targets based
on if it is STATIC or not
1 parent 708b844 commit 5f1a1bb

4 files changed

Lines changed: 73 additions & 14 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,7 @@ if (PCMS_ENABLE_MESHFIELDS)
7676
message(STATUS "Found MeshFields: ${meshfields_DIR} (found version ${meshfields_VERSION})")
7777
endif()
7878

79-
find_package(PkgConfig REQUIRED)
80-
if(DEFINED PETSC_DIR)
81-
if(DEFINED PETSC_ARCH)
82-
set(ENV{PKG_CONFIG_PATH} "${PETSC_DIR}/${PETSC_ARCH}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
83-
else()
84-
set(ENV{PKG_CONFIG_PATH} "${PETSC_DIR}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
85-
endif()
86-
endif()
87-
pkg_check_modules(PETSC QUIET IMPORTED_TARGET PETSc)
88-
if(NOT PETSC_FOUND)
89-
pkg_check_modules(PETSC REQUIRED IMPORTED_TARGET petsc)
90-
endif()
79+
find_package(PETSc REQUIRED)
9180

9281
add_subdirectory(src)
9382

cmake/FindPETSc.cmake

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
find_package(PkgConfig REQUIRED)
2+
if(DEFINED PETSC_DIR)
3+
if(DEFINED PETSC_ARCH)
4+
set(ENV{PKG_CONFIG_PATH} "${PETSC_DIR}/${PETSC_ARCH}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
5+
else()
6+
set(ENV{PKG_CONFIG_PATH} "${PETSC_DIR}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
7+
endif()
8+
endif()
9+
10+
# we give an internal name _petsc
11+
# so we can fill up the PETSC_VARIABLE based
12+
# on static or not
13+
pkg_check_modules(_petsc PETSc)
14+
15+
find_file(_petsc_PC_FILE petsc.pc
16+
PATHS ${_petsc_LIBRARY_DIRS}/../lib/pkgconfig
17+
${_petsc_STATIC_LIBRARY_DIRS}/../lib/pkgconfig
18+
ENV PKG_CONFIG_PATH
19+
NO_DEFAULT_PATH)
20+
if(_petsc_PC_FILE)
21+
file(READ "${_petsc_PC_FILE}" _petsc_PC_CONTENTS)
22+
message(STATUS "PETSc .pc file: ${_petsc_PC_FILE}")
23+
message(STATUS "PETSc .pc contents:\n${_petsc_PC_CONTENTS}")
24+
endif()
25+
26+
if((_petsc_FOUND OR _petsc_STATIC_FOUND) AND _petsc_VERSION)
27+
set(PETSC_VERSION ${_petsc_VERSION})
28+
endif()
29+
30+
# note, there are a number of additional properties that
31+
# can be extracted / set on a target. We just do the basic
32+
# set for now. See: https://cmake.org/cmake/help/latest/module/FindPkgConfig.html
33+
if(_petsc_STATIC_FOUND)
34+
message(STATUS "STATIC PETSC BUILD")
35+
set(PETSC_LIBRARIES ${_petsc_STATIC_LINK_LIBRARIES})
36+
set(PETSC_INCLUDE_DIRS ${_petsc_STATIC_INCLUDE_DIRS})
37+
set(PETSC_LIBRARY_DIRS ${_petsc_STATIC_LIBRARY_DIRS})
38+
set(PETSC_LDFLAGS ${_petsc_STATIC_LDFLAGS})
39+
set(PETSC_LDFLAGS_OTHER ${_petsc_STATIC_LDFLAGS_OTHER})
40+
elseif(_petsc_FOUND)
41+
message(STATUS "SHARED PETSC BUILD")
42+
set(PETSC_LIBRARIES ${_petsc_LINK_LIBRARIES})
43+
set(PETSC_INCLUDE_DIRS ${_petsc_INCLUDE_DIRS})
44+
set(PETSC_LIBRARY_DIRS ${_petsc_LIBRARY_DIRS})
45+
set(PETSC_LDFLAGS ${_petsc_LDFLAGS})
46+
set(PETSC_LDFLAGS_OTHER ${_petsc_LDFLAGS_OTHER})
47+
endif()
48+
message(STATUS "PETSC_LIBRARIES ${PETSC_LIBRARIES}")
49+
message(STATUS "PETSC_INCLUDE_DIRS ${PETSC_INCLUDE_DIRS}")
50+
message(STATUS "PETSC_LIBRARY_DIRS ${PETSC_LIBRARY_DIRS}")
51+
message(STATUS "PETSC_LDFLAGS ${PETSC_LDFLAGS}")
52+
message(STATUS "PETSC_LDFLAGS_OTHER ${PETSC_LDFLAGS_OTHER}")
53+
54+
55+
if(NOT TARGET PETSc::PETSc)
56+
add_library(PETSc::PETSc INTERFACE IMPORTED GLOBAL)
57+
set_target_properties(PETSc::PETSc PROPERTIES INTERFACE_LINK_LIBRARIES "${PETSC_LIBRARIES}"
58+
INTERFACE_INCLUDE_DIRECTORIES "${PETSC_INCLUDE_DIRS}"
59+
INTERFACE_LINK_DIRECTORIES "${PETSC_LIBRARY_DIRS}"
60+
INTERFACE_LINK_OPTIONS "${PETSC_LDFLAGS_OTHER}")
61+
endif()
62+
63+
64+
65+
include(FindPackageHandleStandardArgs)
66+
# TODO consider adding version check logic
67+
find_package_handle_standard_args(PETSc
68+
REQUIRED_VARS PETSC_LIBRARIES PETSC_INCLUDE_DIRS
69+
VERSION_VAR PETSC_VERSION)
70+

src/pcms/transfer/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ target_link_libraries(pcms_transfer PUBLIC
4848

4949
target_link_libraries(pcms_transfer PUBLIC meshfields::meshfields)
5050

51-
target_link_libraries(pcms_transfer PRIVATE PkgConfig::PETSC)
51+
target_link_libraries(pcms_transfer PRIVATE PETSc::PETSc)
5252

5353
target_include_directories(pcms_transfer INTERFACE
5454
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>

test/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ if(Catch2_FOUND)
415415
# target_link_libraries(unit_tests PUBLIC meshfields::meshfields)
416416
# endif()
417417

418-
target_link_libraries(unit_tests PRIVATE PkgConfig::PETSC)
418+
target_link_libraries(unit_tests PRIVATE PETSc::PETSc)
419419

420420
target_link_libraries(unit_tests PUBLIC
421421
Catch2::Catch2

0 commit comments

Comments
 (0)