File: CMakeLists.txt

package info (click to toggle)
odb-api 0.18.1-5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 26,452 kB
  • sloc: cpp: 115,083; ansic: 86,859; f90: 30,318; sql: 12,508; sh: 9,939; yacc: 3,680; python: 2,432; lex: 1,593; perl: 1,116; fortran: 341; csh: 214; makefile: 111; lisp: 17
file content (152 lines) | stat: -rw-r--r-- 4,607 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
cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)

project(odb C Fortran)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake "${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild/cmake")

if(NOT PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake PARENT_SCOPE)
endif()

include(ecbuild_system)
include(odb_add_schema)
include(odb_link_schemas)
include(odb_set_environment)

ecbuild_requires_macro_version(1.9)

if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
  set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/module)
else()
  set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/odb/module)
endif()

ecbuild_declare_project()

ecbuild_add_option(FEATURE OMP
  DESCRIPTION "Support for OpenMP multi-threading"
  REQUIRED_PACKAGES "OMP COMPONENTS C"
  DEFAULT ON)

if(HAVE_OMP)
  ecbuild_enable_omp()
endif()

ecbuild_add_option(FEATURE ODB_MPI
  DESCRIPTION "Use system MPI library"
  REQUIRED_PACKAGES MPI
  DEFAULT OFF)

ecbuild_add_option(FEATURE ODB_EMOS
  DESCRIPTION "Use system EMOS library"
  REQUIRED_PACKAGES libemos
  DEFAULT OFF)

ecbuild_add_option(FEATURE ODB_SHARED_LIBS
  DESCRIPTION "Build ODB project with shared libraries (overrides BUILD_SHARED_LIBS)"
  DEFAULT ${BUILD_SHARED_LIBS}
  ADVANCED)

set(BUILD_SHARED_LIBS ${ENABLE_ODB_SHARED_LIBS})

option(ODB_CLIENT_SERVER "Enable client/server support" OFF)

if(ODB_CLIENT_SERVER AND HAVE_ODB_SHARED_LIBS)
  message(FATAL_ERROR "Please set BUILD_SHARED_LIBS or ENABLE_ODB_SHARED_LIBS to OFF for client/server support")
endif()

test_big_endian(BIG_ENDIAN)

if(NOT BIG_ENDIAN)
  add_definitions(-DLITTLE)
endif()

if(CMAKE_SYSTEM_NAME MATCHES "Linux")
  add_definitions(-DLINUX)
endif()

if(CMAKE_C_COMPILER_ID MATCHES "Intel")
    set(CMAKE_C_FLAGS "-fPIC -DINTEL -traceback")
endif()

if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")

  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC -ffree-line-length-none")
  set(CMAKE_Fortran_FLAGS_DEBUG "-g -O0 -fcheck=bounds")
  set(CMAKE_Fortran_FLAGS_RELEASE "-O2")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")

elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")

  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC -traceback -fpe0 -names lowercase")
  set(CMAKE_Fortran_FLAGS_DEBUG "-g -O0 -check bounds -check pointers")
  set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")

elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI")

  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fPIC -Ktrap=fp -noswitcherror")
  set(CMAKE_Fortran_FLAGS_DEBUG "-g -O0 -Mbounds")
  set(CMAKE_Fortran_FLAGS_RELEASE "-O2")

elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Cray")

  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -hPIC -emf -M 226,867,7212")
  set(CMAKE_Fortran_FLAGS_DEBUG "-G0 -O0 -hdevelop")
  set(CMAKE_Fortran_FLAGS_RELEASE "-G2 -O2")
  set(CMAKE_C_FLAGS "-fPIC -hnomessage=186:192:223:236:7212:10082")
  set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")

endif()

find_package(Dl REQUIRED)
find_package(PythonInterp REQUIRED)

find_program(ODB_AR NAMES sxar ar)
find_program(ODB_GZIP NAMES gzip)
find_program(ODB_GUNZIP NAMES gunzip)

file(GLOB schema_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/src "src/ddl.[A-Z0-9]*")
string(REGEX REPLACE "ddl.([A-Z0-9]*)" "\\1" schemas "${schema_dirs}")
set(ODB_SCHEMAS ${schemas} CACHE STRING "List of pre-compiled ODB schemas")

foreach(schema ${ODB_SCHEMAS})
  set(ODB_HAVE_${schema} 1 CACHE INTERNAL "")
endforeach()

get_directory_property(ODB_DEFINITIONS COMPILE_DEFINITIONS)

list(APPEND ODB_TPLS Dl)

set(ODB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/include ${CMAKE_Fortran_MODULE_DIRECTORY})
set(ODB_LIBRARIES odb_lib)
set(ODB_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake CACHE INTERNAL "")

odb_set_environment(ODB_ENVIRONMENT ROOT ${CMAKE_BINARY_DIR})
odb_set_environment(ODB_INSTALL_ENVIRONMENT ROOT ${CMAKE_INSTALL_PREFIX})

ecbuild_find_project_files()

add_subdirectory(cmake)
add_subdirectory(src)
add_subdirectory(share)
add_subdirectory(tests)

odb_set_environment(ODB_PKGCONFIG_ENVIRONMENT ROOT \\\${prefix})

set(_odb_pkgconfig_vars)

foreach(_pair ${ODB_PKGCONFIG_ENVIRONMENT})
    string(REGEX MATCH "^[^=]+" _name ${_pair})
    string(REGEX REPLACE "${_name}=" "" _value ${_pair})
    list(APPEND _odb_pkgconfig_vars ${_name})
    set(${_name} ${_value})
endforeach()

ecbuild_pkgconfig(URL "https://software.ecmwf.int/wiki/display/ODB"
  DESCRIPTION "Observation database software"
  VARIABLES ${_odb_pkgconfig_vars})

ecbuild_install_project(NAME odb)

ecbuild_print_summary()