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()
|