-
Notifications
You must be signed in to change notification settings - Fork 1
/
CMakeLists.txt
154 lines (127 loc) · 5.38 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# This file is part of Fortuno.
# Licensed under the BSD-2-Clause Plus Patent license.
# SPDX-License-Identifier: BSD-2-Clause-Patent
# The CMake config files were created based on the public template at
# https://github.com/LecrisUT/CMake-Template
#[=================================================================================================[
# Basic project definition #
]=================================================================================================]
cmake_minimum_required(VERSION 3.22...3.28)
list(APPEND CMAKE_MESSAGE_CONTEXT FortunoMpi)
project(
FortunoMpi
VERSION 0.1.0
DESCRIPTION "Extensible unit testing framework for Fortran (MPI dependent part)"
HOMEPAGE_URL "https://github.com/fortuno-repos/fortuno-mpi"
LANGUAGES Fortran
)
#[=================================================================================================[
# Options #
]=================================================================================================]
option(FORTUNO_MPI_BUILD_SHARED_LIBS "FortunoMpi: Build as shared library" ${PROJECT_IS_TOP_LEVEL})
option(FORTUNO_MPI_BUILD_TESTS "FortunoMpi: Build test suite" ${PROJECT_IS_TOP_LEVEL})
option(FORTUNO_MPI_BUILD_EXAMPLES "FortunoMpi: Build example apps" ${PROJECT_IS_TOP_LEVEL})
option(FORTUNO_MPI_INSTALL "FortunoMpi: Install project" ${PROJECT_IS_TOP_LEVEL})
set(
FORTUNO_MPI_INSTALL_MODULEDIR "modules" CACHE STRING
"FortunoMpi: Sub-directory to install Fortran module files (relative to CMAKE_INSTALL_LIBDIR)"
)
option(
FORTUNO_MPI_SUBPROJECT_REQUIRE_FIND
"FortunoMpi: Whether all subprojects should be obtained by the find method (e.g. for packaging)"
FALSE
)
option(
FORTUNO_MPI_SUBPROJECT_DISABLE_FIND
"FortunoMpi: Whether none of the subprojects should be obtained by the find method"
FALSE
)
#[=================================================================================================[
# Project configuration #
]=================================================================================================]
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(FortunoMpiHelpers)
if (FORTUNO_MPI_INSTALL)
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
endif ()
set(BUILD_SHARED_LIBS ${FORTUNO_MPI_BUILD_SHARED_LIBS})
fortuno_mpi_setup_build_type("RelWithDebInfo")
find_package(MPI REQUIRED)
if(NOT MPI_FORTRAN_FOUND)
message(FATAL_ERROR "Failed to detect MPI-framework for Fortran")
endif()
#[=================================================================================================[
# Main definition #
]=================================================================================================]
# Get subproject(s)
include(FetchContent)
include(subprojects/fortuno.cmake)
# Build library and examples
add_subdirectory(src)
if (FORTUNO_MPI_BUILD_EXAMPLES)
add_subdirectory(example)
endif ()
#[=================================================================================================[
# Install and export #
]=================================================================================================]
if (FORTUNO_MPI_INSTALL)
# pkg-config files
configure_file(cmake/fortuno-mpi.pc.in fortuno-mpi.pc @ONLY)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/fortuno-mpi.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
COMPONENT FortunoMpi_development
)
# cmake export files
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/FortunoMpiConfigVersion.cmake
VERSION ${PROJECT_VERSION}
# COMPATIBILITY SameMajorVersion
COMPATIBILITY SameMinorVersion
)
configure_package_config_file(
cmake/FortunoMpiConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/FortunoMpiConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/FortunoMpi
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/FortunoMpiConfigVersion.cmake
${CMAKE_CURRENT_BINARY_DIR}/FortunoMpiConfig.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/FortunoMpi
COMPONENT FortunoMpi_development
)
export(
EXPORT FortunoMpiTargets
FILE FortunoMpiTargets.cmake
NAMESPACE Fortuno::
)
install(
EXPORT FortunoMpiTargets
FILE FortunoMpiTargets.cmake
NAMESPACE Fortuno::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/FortunoMpi
COMPONENT FortunoMpi_development
)
endif ()
# Make project available for FetchContent
if (NOT PROJECT_IS_TOP_LEVEL)
# Propagate variables
if (CMAKE_VERSION VERSION_LESS 3.25)
# TODO: Remove when required minimum cmake version is >= 3.25
set(FortunoMpi_VERSION ${FortunoMpi_VERSION} PARENT_SCOPE)
set(FortunoMpi_VERSION_MAJOR ${FortunoMpi_VERSION_MAJOR} PARENT_SCOPE)
set(FortunoMpi_VERSION_MINOR ${FortunoMpi_VERSION_MINOR} PARENT_SCOPE)
set(FortunoMpi_VERSION_PATCH ${FortunoMpi_VERSION_PATCH} PARENT_SCOPE)
set(FortunoMpi_VERSION_TWEAK ${FortunoMpi_VERSION_TWEAK} PARENT_SCOPE)
else ()
return(
PROPAGATE
FortunoMpi_VERSION
FortunoMpi_VERSION_MAJOR
FortunoMpi_VERSION_MINOR
FortunoMpi_VERSION_PATCH
FortunoMpi_VERSION_TWEAK
)
endif ()
endif ()