|
1 | | -cmake_minimum_required(VERSION 3.14...3.28) |
2 | | -project(ParMETIS LANGUAGES C) |
| 1 | +cmake_minimum_required(VERSION 3.16...4.1) |
| 2 | + |
| 3 | +if(NOT CMAKE_BUILD_TYPE AND NOT DEFINED ENV{CMAKE_BUILD_TYPE}) |
| 4 | + set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug or Release") |
| 5 | +endif() |
| 6 | + |
| 7 | +project(ParMETIS LANGUAGES C VERSION 1.0.0) |
3 | 8 |
|
4 | 9 | # --- need METIS first |
5 | | -include(FetchContent) |
| 10 | +include(GNUInstallDirs) |
| 11 | +include(cmake/GitSubmodule.cmake) |
6 | 12 |
|
7 | | -FetchContent_Declare(GKlib |
8 | | -GIT_REPOSITORY https://github.com/scivision/GKlib.git |
9 | | -GIT_TAG 44630ca |
10 | | -GIT_SHALLOW true |
11 | | -) |
12 | | -FetchContent_MakeAvailable(GKlib) |
| 13 | +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND metis_IS_TOP_LEVEL) |
| 14 | + set(CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/local" CACHE PATH "install prefix" FORCE) |
| 15 | +endif() |
13 | 16 |
|
14 | | -FetchContent_Declare(metis_fc |
15 | | -GIT_REPOSITORY https://github.com/scivision/metis.git |
16 | | -GIT_TAG fd7799b |
17 | | -GIT_SHALLOW true |
18 | | -) |
| 17 | +message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION} CMake ${CMAKE_VERSION} install prefix ${CMAKE_INSTALL_PREFIX}") |
19 | 18 |
|
20 | | -FetchContent_MakeAvailable(metis_fc) |
| 19 | +git_submodule(${CMAKE_CURRENT_SOURCE_DIR}/METIS) |
| 20 | +add_subdirectory(METIS) |
21 | 21 |
|
22 | | -if(NOT DEFINED REALTYPEWIDTH) |
23 | | - set(REALTYPEWIDTH 32) |
24 | | -endif() |
25 | | -if(NOT DEFINED IDXTYPEWIDTH) |
26 | | - set(IDXTYPEWIDTH 32) |
27 | | -endif() |
28 | | -add_compile_definitions(REALTYPEWIDTH=${REALTYPEWIDTH} IDXTYPEWIDTH=${IDXTYPEWIDTH}) |
| 22 | +set(CMAKE_C_STANDARD 99) |
29 | 23 |
|
30 | | -message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION} CMake ${CMAKE_VERSION} |
31 | | -REALTYPEWIDTH=${REALTYPEWIDTH} IDXTYPEWIDTH=${IDXTYPEWIDTH}") |
32 | | -message(STATUS "METIS ${metis_fc_SOURCE_DIR}") |
33 | | -message(STATUS "GKlib ${gklib_SOURCE_DIR}") |
| 24 | +add_compile_definitions( |
| 25 | +"REALTYPEWIDTH=$<IF:$<BOOL:${REALTYPEWIDTH}>,${REALTYPEWIDTH},32>" |
| 26 | +"IDXTYPEWIDTH=$<IF:$<BOOL:${IDXTYPEWIDTH}>,${IDXTYPEWIDTH},32>" |
| 27 | +) |
34 | 28 |
|
35 | 29 | find_package(MPI REQUIRED) |
36 | 30 |
|
37 | 31 | include(./conf/gkbuild.cmake) |
38 | 32 |
|
39 | 33 | install(FILES include/parmetis.h TYPE INCLUDE) |
40 | 34 |
|
| 35 | +add_library(parmetis) |
| 36 | +target_include_directories(parmetis PUBLIC |
| 37 | +"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include;${PROJECT_SOURCE_DIR}/libparmetis>" |
| 38 | +$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> |
| 39 | +) |
| 40 | +target_link_libraries(parmetis PRIVATE MPI::MPI_C METIS::METIS) |
| 41 | + |
| 42 | +if(SHARED) |
| 43 | + target_link_libraries(parmetis PRIVATE metis GKlib) |
| 44 | +endif() |
| 45 | + |
| 46 | +add_library(METIS::PARMETIS INTERFACE IMPORTED GLOBAL) |
| 47 | +target_link_libraries(METIS::PARMETIS INTERFACE parmetis) |
| 48 | + |
| 49 | +install(TARGETS parmetis EXPORT ${PROJECT_NAME}-targets) |
| 50 | + |
41 | 51 | add_subdirectory(libparmetis) |
42 | 52 | add_subdirectory(programs) |
43 | 53 |
|
44 | 54 | # This is for testing during development and is not being distributed |
45 | 55 | #add_subdirectory(test) |
| 56 | + |
| 57 | +include(cmake/install.cmake) |
| 58 | + |
| 59 | +file(GENERATE OUTPUT .gitignore CONTENT "*") |
0 commit comments