File: CMakeLists.txt

package info (click to toggle)
fdb 5.19.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 78,884 kB
  • sloc: cpp: 36,786; sh: 4,380; python: 1,334; makefile: 32; ansic: 8
file content (189 lines) | stat: -rw-r--r-- 6,132 bytes parent folder | download
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
cmake_minimum_required( VERSION 3.18 FATAL_ERROR )

find_package( ecbuild 3.12 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild)

project( fdb5 LANGUAGES C CXX )

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
# add_compile_options(-fsanitize=address)
# add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer)
# add_link_options(-fsanitize=address)
# set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-sign-compare")
# set(CMAKE_CXX_FLAGS "-Wno-unused-parameter -Wno-unused-variable -Wno-reorder -Wno-sign-compare -Wvla-cxx-extension")

CHECK_TYPE_SIZE(off_t SIZEOF_OFF_T)

if ("${SIZEOF_OFF_T}" LESS 8)
    MESSAGE(SEND_ERROR "Missing support for large files (off_t size < 64 bits)")
endif()

########################################################################################################################
### dependencies and options

### Documentation
ecbuild_add_option( FEATURE FDB_DOCUMENTATION
                    DEFAULT OFF
                    DESCRIPTION "Enable documentation generation" )

### eckit

set( PERSISTENT_NAMESPACE "eckit" CACHE INTERNAL "" ) # needed for generating .b files for persistent support

ecbuild_find_package( NAME eckit  VERSION 1.32 REQUIRED )

### GRIB support

ecbuild_find_package( NAME eccodes VERSION 2.10 QUIET )

ecbuild_add_option( FEATURE GRIB
                    DEFAULT ON
                    CONDITION eccodes_FOUND
                    DESCRIPTION "Support for GRIB via eccodes")

ecbuild_find_package( NAME metkit VERSION 1.15 REQUIRED )

### FDB backend in CEPH object store (using Rados)

find_package( RADOS QUIET )
ecbuild_add_option( FEATURE RADOSFDB  # option defined in fdb5_config.h
                    CONDITION eckit_HAVE_RADOS AND RADOS_FOUND
                    DEFAULT OFF
                    DESCRIPTION "Ceph/Rados support for FDB Store" )

### FDB backend in indexed filesystem with table-of-contents, i.e. TOC
### Supports Lustre parallel filesystem stripping control

ecbuild_add_option( FEATURE TOCFDB  # option defined in fdb5_config.h
                    DEFAULT ON
                    DESCRIPTION "Filesystem TOC support for FDB" )

### support for Lustre API control of file stripping

find_package( LUSTREAPI QUIET )

ecbuild_add_option( FEATURE LUSTRE  # option defined in fdb5_config.h
                    CONDITION LUSTREAPI_FOUND
                    DEFAULT ON
                    DESCRIPTION "Support for Lustre API control of file stripping " )

### experimental & sandbox features

ecbuild_add_option( FEATURE FDB_REMOTE
                    DEFAULT ON
                    DESCRIPTION "Support for FDB remote access" )

find_package(LibUUID QUIET)

find_package(DAOS QUIET)


set(_default_dummy_daos ON)
if(DAOS_FOUND)
    set(_default_dummy_daos OFF)
endif()

ecbuild_add_option( FEATURE DUMMY_DAOS
                    DEFAULT ${_default_dummy_daos}
                    CONDITION LibUUID_FOUND
                    DESCRIPTION "Use dummy DAOS library emulating DAOS with a file system" )

if(HAVE_DUMMY_DAOS)
    set(DAOS_LIBRARIES dummy_daos)
    set(DAOS_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/dummy_daos)
    set(DAOS_FOUND TRUE)
    set(DAOS_TESTS_LIBRARIES dummy_daos_tests)
    set(DAOS_TESTS_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/dummy_daos)
    set(DAOS_TESTS_FOUND TRUE)
endif()

ecbuild_add_option( FEATURE DAOSFDB
                    CONDITION DAOS_FOUND AND LibUUID_FOUND
                    DEFAULT ON
                    DESCRIPTION "DAOS support for FDB Store" )

ecbuild_add_option( FEATURE DAOS_ADMIN
                    DEFAULT ${_default_dummy_daos}
                    CONDITION HAVE_DAOSFDB AND DAOS_TESTS_FOUND
                    DESCRIPTION "Add features for DAOS pool management. Removes need to manually create a pool for DAOS unit tests" )

# DAOS_TESTS is a daos admin library, usually not present
if(NOT HAVE_DAOS_ADMIN)
    set( DAOS_TESTS_LIBRARIES "" )
    set( DAOS_TESTS_INCLUDE_DIRS "" )
endif()

ecbuild_add_option( FEATURE EXPERIMENTAL
                    DEFAULT OFF
                    DESCRIPTION "Experimental features" )

ecbuild_add_option( FEATURE SANDBOX
                    DESCRIPTION "build the sandbox stuff"
                    DEFAULT OFF	 )

ecbuild_add_option( FEATURE PYTHON_ZARR_INTERFACE
                    DESCRIPTION "Build python Zarr interface layer"
                    DEFAULT OFF
                    REQUIRED_PACKAGES "NAME pybind11 VERSION 3.0.1" )
if(HAVE_PYTHON_ZARR_INTERFACE)
    find_package(Python 3.11 COMPONENTS Interpreter Development REQUIRED)
endif()


### build the tools

ecbuild_add_option( FEATURE BUILD_TOOLS
                    DEFAULT ON
                    DESCRIPTION "Build the command line tools" )

if(HAVE_BUILD_TOOLS)
    set(_default_fdb_tools ON)
else()
    set(_default_fdb_tools OFF)
endif()

ecbuild_add_option( FEATURE FDB_BUILD_TOOLS
                    DEFAULT ${_default_fdb_tools}
                    DESCRIPTION "Build the command line FDB tools" )

### find thread library ( preferably pthreads )

set( CMAKE_THREAD_PREFER_PTHREAD 1 )
find_package(Threads REQUIRED)

### checks

# check thread library is pthreads

if( NOT ${CMAKE_USE_PTHREADS_INIT} )
	message( FATAL_ERROR "Only pthreads supported - thread library found is [${CMAKE_THREAD_LIBS_INIT}]" )
endif()

########################################################################################################################
# contents

include(cmake/compiler_warnings.cmake) # optionally handle compiler specific warnings

set( fdb5_INCLUDE_DIRS  ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src )

include_directories( ${fdb5_INCLUDE_DIRS} )

set_directory_properties( PROPERTIES COMPILE_DEFINITIONS "${ECKIT_DEFINITIONS};${ECCODES_DEFINITIONS}" )

get_directory_property( fdb5_DEFINITIONS COMPILE_DEFINITIONS )

### source files

add_subdirectory( src )
add_subdirectory( tests )

### finalize
if(ENABLE_FDB_DOCUMENTATION)
    add_subdirectory(docs)
endif()


ecbuild_install_project( NAME fdb )

ecbuild_print_summary()