forked from geospace-code/h5fortran
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
107 lines (84 loc) · 2.9 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
cmake_minimum_required(VERSION 3.20...3.22)
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT is_multi_config AND NOT (CMAKE_BUILD_TYPE OR DEFINED ENV{CMAKE_BUILD_TYPE}))
set(CMAKE_BUILD_TYPE Release CACHE STRING "Release default")
endif()
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/VERSION PROJECT_VERSION
REGEX "^([0-9]+\.[0-9]+\.[0-9]+)" LIMIT_INPUT 16 LENGTH_MAXIMUM 16 LIMIT_COUNT 1)
project(h5fortran
LANGUAGES C Fortran
VERSION ${PROJECT_VERSION}
DESCRIPTION "thin, light object-oriented HDF5 Fortran interface"
HOMEPAGE_URL https://github.com/geospace-code/h5fortran
)
include(CTest)
if(NOT DEFINED ${PROJECT_NAME}_BUILD_TESTING)
set(${PROJECT_NAME}_BUILD_TESTING ${BUILD_TESTING})
endif()
if(CMAKE_GENERATOR STREQUAL "Ninja Multi-Config")
set(EXTPROJ_GENERATOR "Ninja")
else()
set(EXTPROJ_GENERATOR ${CMAKE_GENERATOR})
endif()
if(BUILD_SHARED_LIBS)
if(WIN32 AND CMAKE_VERSION VERSION_LESS 3.21 AND BUILD_TESTING)
message(STATUS "Windows with shared libs needs CMake >= 3.21 to run tests")
endif()
if(MSVC)
message(WARNING "Intel oneAPI has trouble with shared libs in general on Windows, try
cmake -DBUILD_SHARED_LIBS=off")
endif()
endif()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
include(cmake/options.cmake)
include(cmake/compilers.cmake)
# --- find or build HDF5 library
if(NOT hdf5_external)
if(autobuild)
find_package(HDF5 COMPONENTS Fortran HL)
else()
find_package(HDF5 REQUIRED COMPONENTS Fortran HL)
endif()
endif()
if(NOT HDF5_FOUND OR hdf5_external)
include(cmake/libraries.cmake)
include(cmake/build_hdf5.cmake)
endif()
if(HDF5_VERSION VERSION_LESS 1.8.7)
message(WARNING "H5Fortran requires HDF5 >= 1.8.7")
endif()
if(hdf5_parallel OR HDF5_HAVE_PARALLEL)
find_package(MPI COMPONENTS Fortran REQUIRED)
target_link_libraries(HDF5::HDF5 INTERFACE MPI::MPI_Fortran)
endif()
# --- h5fortran library
add_library(h5fortran)
target_include_directories(h5fortran
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(h5fortran PUBLIC HDF5::HDF5)
set_target_properties(h5fortran PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include
LABELS core
VERSION ${PROJECT_VERSION}
)
# GLOBAL needed for use by FetchContent
add_library(h5fortran::h5fortran INTERFACE IMPORTED GLOBAL)
target_link_libraries(h5fortran::h5fortran INTERFACE h5fortran)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/h5fortran.mod TYPE INCLUDE)
install(TARGETS h5fortran EXPORT ${PROJECT_NAME}-targets)
add_subdirectory(src)
if(${PROJECT_NAME}_BUILD_TESTING)
add_subdirectory(src/tests)
endif()
# additional Find*.cmake necessary
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindHDF5.cmake
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindSZIP.cmake
DESTINATION cmake
)
include(cmake/pkgconf.cmake)
include(cmake/install.cmake)
include(cmake/summary.cmake)