2016-04-13 15:12:21 +00:00
|
|
|
#
|
2020-01-28 14:32:34 +00:00
|
|
|
# (C) Copyright 2005- ECMWF.
|
2016-04-13 15:12:21 +00:00
|
|
|
#
|
|
|
|
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
|
|
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
|
|
#
|
|
|
|
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
|
|
# granted to it by virtue of its status as an intergovernmental organisation
|
|
|
|
# nor does it submit to any jurisdiction.
|
|
|
|
#
|
|
|
|
###############################################################################
|
2013-03-25 12:04:10 +00:00
|
|
|
# cmake options:
|
|
|
|
#
|
|
|
|
# -DCMAKE_BUILD_TYPE=Debug|RelWithDebInfo|Release|Production
|
|
|
|
# -DCMAKE_INSTALL_PREFIX=/path/to/install
|
|
|
|
#
|
|
|
|
# -DCMAKE_MODULE_PATH=/path/to/ecbuild/cmake
|
2013-04-03 10:45:13 +00:00
|
|
|
|
2020-08-21 15:32:53 +00:00
|
|
|
cmake_minimum_required( VERSION 3.12 FATAL_ERROR )
|
2020-08-27 16:54:29 +00:00
|
|
|
|
2022-08-22 11:11:15 +00:00
|
|
|
find_package( ecbuild 3.7 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild)
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2020-08-21 15:32:53 +00:00
|
|
|
# Initialise project
|
2023-06-02 15:15:29 +00:00
|
|
|
project( eccodes LANGUAGES CXX )
|
2023-04-13 10:06:32 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2023-01-30 10:53:14 +00:00
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2018-05-11 12:07:03 +00:00
|
|
|
###############################################################################
|
|
|
|
# system checks needed for eccodes_config.h and some options like MEMFS
|
|
|
|
|
2022-02-03 15:25:45 +00:00
|
|
|
check_type_size( int ECCODES_SIZEOF_INT )
|
|
|
|
check_type_size( long ECCODES_SIZEOF_LONG )
|
|
|
|
check_type_size( size_t ECCODES_SIZEOF_SIZE_T )
|
2018-05-19 11:38:24 +00:00
|
|
|
|
2022-02-03 15:25:45 +00:00
|
|
|
check_include_files( assert.h ECCODES_HAVE_ASSERT_H )
|
|
|
|
check_include_files( string.h ECCODES_HAVE_STRING_H )
|
|
|
|
check_include_files( sys/types.h ECCODES_HAVE_SYS_TYPES_H )
|
|
|
|
check_include_files( sys/stat.h ECCODES_HAVE_SYS_STAT_H )
|
|
|
|
check_include_files( fcntl.h ECCODES_HAVE_FCNTL_H )
|
|
|
|
check_include_files( unistd.h ECCODES_HAVE_UNISTD_H )
|
2018-05-19 11:38:24 +00:00
|
|
|
|
2022-02-03 15:25:45 +00:00
|
|
|
check_symbol_exists( fseeko "stdio.h" ECCODES_HAVE_FSEEKO )
|
|
|
|
check_symbol_exists( posix_memalign "stdlib.h" ECCODES_HAVE_POSIX_MEMALIGN )
|
|
|
|
check_symbol_exists( fmemopen "stdio.h" ECCODES_HAVE_FMEMOPEN )
|
|
|
|
check_symbol_exists( funopen "stdio.h" ECCODES_HAVE_FUNOPEN )
|
|
|
|
check_symbol_exists( realpath "stdlib.h" ECCODES_HAVE_REALPATH )
|
|
|
|
check_symbol_exists( fsync "unistd.h" ECCODES_HAVE_FSYNC)
|
|
|
|
check_symbol_exists( fdatasync "unistd.h" ECCODES_HAVE_FDATASYNC)
|
2018-05-11 12:07:03 +00:00
|
|
|
|
2018-05-18 15:34:35 +00:00
|
|
|
check_c_source_compiles(
|
|
|
|
" typedef int foo_t;
|
2024-07-26 13:03:30 +00:00
|
|
|
static inline foo_t static_foo(void){return 0;}
|
|
|
|
foo_t foo(void){return 0;}
|
|
|
|
int main(int argc, char *argv[]){ return static_foo(); }
|
2020-03-30 13:07:31 +00:00
|
|
|
" ECCODES_HAVE_C_INLINE
|
|
|
|
)
|
2018-05-18 15:34:35 +00:00
|
|
|
|
2018-05-19 16:42:03 +00:00
|
|
|
include(eccodes_test_endiness)
|
2019-01-21 13:18:21 +00:00
|
|
|
if( EC_OS_NAME MATCHES "windows" )
|
|
|
|
include(eccodes_find_linux_utils)
|
|
|
|
endif()
|
2018-05-18 15:34:35 +00:00
|
|
|
|
2018-05-19 16:49:38 +00:00
|
|
|
ecbuild_debug("ECCODES_BIG_ENDIAN=${ECCODES_BIG_ENDIAN}")
|
|
|
|
ecbuild_debug("ECCODES_LITTLE_ENDIAN=${ECCODES_LITTLE_ENDIAN}")
|
2019-10-08 17:24:59 +00:00
|
|
|
ecbuild_info("Operating system=${CMAKE_SYSTEM} (${EC_OS_BITS} bits)")
|
2018-05-19 16:49:38 +00:00
|
|
|
|
2023-02-02 16:59:06 +00:00
|
|
|
# Only support 64 bit operating systems
|
|
|
|
if( NOT EC_OS_BITS EQUAL "64" )
|
2023-02-03 12:59:33 +00:00
|
|
|
ecbuild_critical( "Operating system ${CMAKE_SYSTEM} (${EC_OS_BITS} bits) -- ecCodes only supports 64 bit platforms" )
|
2023-02-02 16:59:06 +00:00
|
|
|
endif()
|
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
###############################################################################
|
|
|
|
# some variables/options of this project
|
|
|
|
|
2024-03-04 11:04:54 +00:00
|
|
|
# ecbuild_add_cxx_flags("-Wno-write-strings" NO_FAIL)
|
|
|
|
# ecbuild_add_cxx_flags("-Wno-writable-strings" NO_FAIL)
|
|
|
|
# ecbuild_add_cxx_flags("-Wno-deprecated" NO_FAIL)
|
2024-03-03 19:05:57 +00:00
|
|
|
|
|
|
|
if( CMAKE_CXX_COMPILER_ID STREQUAL "Cray" )
|
2023-01-28 15:18:23 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "-hstd=c++11 ${CMAKE_CXX_FLAGS}")
|
2022-05-21 13:37:23 +00:00
|
|
|
endif()
|
|
|
|
|
2020-03-12 17:19:34 +00:00
|
|
|
ecbuild_add_option( FEATURE PRODUCT_GRIB
|
|
|
|
DESCRIPTION "Support for the product GRIB"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2020-03-12 14:16:45 +00:00
|
|
|
ecbuild_add_option( FEATURE PRODUCT_BUFR
|
2020-03-12 17:19:34 +00:00
|
|
|
DESCRIPTION "Support for the product BUFR"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2020-10-20 20:30:54 +00:00
|
|
|
if( NOT HAVE_PRODUCT_GRIB AND NOT HAVE_PRODUCT_BUFR )
|
|
|
|
ecbuild_critical("Cannot disable both GRIB and BUFR! Please specify just one option")
|
|
|
|
endif()
|
2020-03-12 14:16:45 +00:00
|
|
|
|
2015-06-09 13:50:51 +00:00
|
|
|
ecbuild_add_option( FEATURE EXAMPLES
|
|
|
|
DESCRIPTION "Build the examples"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2015-06-09 13:50:51 +00:00
|
|
|
|
2020-08-07 21:36:59 +00:00
|
|
|
ecbuild_add_option( FEATURE BUILD_TOOLS
|
|
|
|
DESCRIPTION "Build the command line tools"
|
|
|
|
DEFAULT ON )
|
|
|
|
|
2024-07-12 08:51:12 +00:00
|
|
|
ecbuild_add_option( FEATURE GEOGRAPHY
|
|
|
|
DESCRIPTION "Support for Geoiterator and nearest neighbour"
|
|
|
|
DEFAULT ON )
|
|
|
|
|
2014-10-20 16:40:17 +00:00
|
|
|
ecbuild_add_option( FEATURE JPG
|
2017-07-21 13:00:54 +00:00
|
|
|
DESCRIPTION "Support for JPG decoding/encoding"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2023-08-04 21:19:53 +00:00
|
|
|
# Options related to JPG. The JasPer and OpenJPEG libraries
|
2019-12-13 15:44:54 +00:00
|
|
|
ecbuild_add_option( FEATURE JPG_LIBJASPER
|
2023-08-04 21:19:53 +00:00
|
|
|
DESCRIPTION "Support for JPG decoding/encoding with the JasPer library"
|
2019-12-13 15:44:54 +00:00
|
|
|
CONDITION ENABLE_JPG
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2019-12-13 15:44:54 +00:00
|
|
|
ecbuild_add_option( FEATURE JPG_LIBOPENJPEG
|
|
|
|
DESCRIPTION "Support for JPG decoding/encoding with the OpenJPEG library"
|
|
|
|
CONDITION ENABLE_JPG
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
|
|
|
ecbuild_add_option( FEATURE PNG
|
2017-07-21 13:00:54 +00:00
|
|
|
DESCRIPTION "Support for PNG decoding/encoding"
|
2015-01-09 15:18:52 +00:00
|
|
|
DEFAULT OFF
|
2020-08-18 10:14:29 +00:00
|
|
|
REQUIRED_PACKAGES PNG )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
|
|
|
if( HAVE_PNG )
|
2015-01-09 15:18:52 +00:00
|
|
|
set( HAVE_LIBPNG 1 ) # compatibility with autotools
|
|
|
|
add_definitions( ${PNG_DEFINITIONS} )
|
2014-10-20 16:40:17 +00:00
|
|
|
else()
|
2015-01-09 15:18:52 +00:00
|
|
|
set( HAVE_LIBPNG 0 )
|
2014-10-20 16:40:17 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
ecbuild_add_option( FEATURE NETCDF
|
2017-07-21 13:00:54 +00:00
|
|
|
DESCRIPTION "Support for GRIB to NetCDF conversion"
|
2015-01-09 15:18:52 +00:00
|
|
|
DEFAULT ON
|
2020-08-18 10:14:29 +00:00
|
|
|
REQUIRED_PACKAGES NetCDF
|
2020-03-25 17:57:25 +00:00
|
|
|
NO_TPL )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
2020-08-18 10:14:29 +00:00
|
|
|
find_package( AEC )
|
2022-02-14 23:09:29 +00:00
|
|
|
if(NOT DEFINED ENABLE_AEC AND NOT AEC_FOUND)
|
2022-02-23 17:32:46 +00:00
|
|
|
ecbuild_critical("AEC library was not found.\n"
|
|
|
|
"AEC (Adaptive Entropy Coding) provides the WMO GRIB CCSDS compression and decompression of data. "
|
|
|
|
"This is highly recommended from ecCodes >= 2.25.0"
|
|
|
|
"\nTo force the build without it, use -DENABLE_AEC=OFF")
|
2022-02-14 23:09:29 +00:00
|
|
|
endif()
|
2014-10-20 16:40:17 +00:00
|
|
|
ecbuild_add_option( FEATURE AEC
|
2017-07-21 13:00:54 +00:00
|
|
|
DESCRIPTION "Support for Adaptive Entropy Coding"
|
2022-02-14 16:34:50 +00:00
|
|
|
DEFAULT ON
|
2020-08-17 15:43:18 +00:00
|
|
|
CONDITION AEC_FOUND )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
2024-02-02 11:42:30 +00:00
|
|
|
ecbuild_find_python( VERSION 3.6 NO_LIBS )
|
|
|
|
# find_package( NumPy )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
2020-03-25 17:57:25 +00:00
|
|
|
## TODO REQUIRED_LANGUAGES Fortran
|
2014-10-20 16:40:17 +00:00
|
|
|
ecbuild_add_option( FEATURE FORTRAN
|
2017-07-21 13:00:54 +00:00
|
|
|
DESCRIPTION "Build the ecCodes Fortran interface"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ON )
|
2014-10-20 16:40:17 +00:00
|
|
|
|
2015-06-09 13:50:51 +00:00
|
|
|
# TODO Remove this after REQUIRED_LANGUAGES
|
2014-03-31 12:57:06 +00:00
|
|
|
if( ENABLE_FORTRAN )
|
2014-10-03 15:49:05 +00:00
|
|
|
# will set EC_HAVE_FORTRAN with the result
|
2018-02-01 16:07:40 +00:00
|
|
|
set( EC_HAVE_FORTRAN 0 )
|
2014-10-03 15:49:05 +00:00
|
|
|
ecbuild_enable_fortran( MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/fortran/modules )
|
2015-01-09 15:18:52 +00:00
|
|
|
set( HAVE_FORTRAN ${EC_HAVE_FORTRAN} )
|
2015-06-09 13:50:51 +00:00
|
|
|
else()
|
|
|
|
set( HAVE_FORTRAN 0 )
|
2014-03-31 12:57:06 +00:00
|
|
|
endif()
|
|
|
|
|
2016-07-11 15:29:33 +00:00
|
|
|
# memfs requires only Python executable and not its libraries
|
2016-06-14 14:27:49 +00:00
|
|
|
ecbuild_add_option( FEATURE MEMFS
|
2016-06-20 17:00:09 +00:00
|
|
|
DESCRIPTION "Memory based access to definitions/samples"
|
2016-06-14 14:27:49 +00:00
|
|
|
DEFAULT OFF
|
2024-01-24 14:48:29 +00:00
|
|
|
REQUIRED_PACKAGES Python3 )
|
2016-07-04 11:48:40 +00:00
|
|
|
|
2016-07-11 15:29:33 +00:00
|
|
|
#if( HAVE_MEMFS AND "${CMAKE_C_COMPILER_ID}" STREQUAL "Cray")
|
|
|
|
# set( HAVE_MEMFS OFF )
|
|
|
|
# ecbuild_warn("MEMFS not supported with Cray C compiler")
|
|
|
|
#endif()
|
2016-07-04 11:48:40 +00:00
|
|
|
|
2017-09-06 10:16:26 +00:00
|
|
|
if(HAVE_MEMFS)
|
|
|
|
set( _will_install_defs_samples OFF )
|
|
|
|
else()
|
|
|
|
set( _will_install_defs_samples ON )
|
|
|
|
endif()
|
2017-09-06 10:12:48 +00:00
|
|
|
|
2020-03-12 14:16:45 +00:00
|
|
|
|
2017-09-06 10:12:48 +00:00
|
|
|
# controls installation of files in definitions/ -- note that it still creates the symlinks in the build dir
|
|
|
|
# by default, if memfs is available, then we don't need to install definitions
|
|
|
|
ecbuild_add_option( FEATURE INSTALL_ECCODES_DEFINITIONS
|
|
|
|
DESCRIPTION "Install the ecCodes definitions"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ${_will_install_defs_samples} )
|
2017-09-06 10:12:48 +00:00
|
|
|
|
|
|
|
# controls installation of files in samples/ and ifs_samples/ -- note that it still creates the symlinks in the build dir
|
|
|
|
# by default, if memfs is available, then we don't need to install samples
|
|
|
|
ecbuild_add_option( FEATURE INSTALL_ECCODES_SAMPLES
|
|
|
|
DESCRIPTION "Install the ecCodes samples, including IFS samples"
|
2020-03-25 17:57:25 +00:00
|
|
|
DEFAULT ${_will_install_defs_samples} )
|
2017-09-06 10:12:48 +00:00
|
|
|
|
2014-10-20 16:40:17 +00:00
|
|
|
# advanced options (not visible in cmake-gui )
|
|
|
|
|
2017-07-21 13:00:54 +00:00
|
|
|
ecbuild_add_option( FEATURE MEMORY_MANAGEMENT DESCRIPTION "Enable memory management" DEFAULT OFF ADVANCED )
|
|
|
|
ecbuild_add_option( FEATURE ALIGN_MEMORY DESCRIPTION "Enable memory alignment" DEFAULT OFF ADVANCED )
|
2021-01-06 19:19:21 +00:00
|
|
|
ecbuild_add_option( FEATURE TIMER DESCRIPTION "Enable timer" DEFAULT OFF ADVANCED )
|
2024-03-12 12:00:15 +00:00
|
|
|
ecbuild_add_option( FEATURE ECCODES_THREADS DESCRIPTION "Enable thread-safety using POSIX threads" DEFAULT OFF ADVANCED )
|
|
|
|
ecbuild_add_option( FEATURE ECCODES_OMP_THREADS DESCRIPTION "Enable thread-safety using OpenMP threads" DEFAULT OFF ADVANCED )
|
2017-07-21 13:00:54 +00:00
|
|
|
ecbuild_add_option( FEATURE EXTRA_TESTS DESCRIPTION "Enable extended regression testing" DEFAULT OFF ADVANCED )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
# macro processing
|
|
|
|
|
2015-02-18 10:14:22 +00:00
|
|
|
set( ECCODES_EXTRA_LIBRARIES "" )
|
|
|
|
set( ECCODES_EXTRA_INCLUDE_DIRS "" )
|
|
|
|
set( ECCODES_EXTRA_DEFINITIONS "" )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2013-04-10 15:46:41 +00:00
|
|
|
find_package( CMath )
|
2015-09-18 10:07:02 +00:00
|
|
|
list( APPEND ECCODES_TPLS CMath )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
### JPG support
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
set( HAVE_JPEG 0 )
|
|
|
|
set( HAVE_LIBJASPER 0 )
|
|
|
|
set( HAVE_LIBOPENJPEG 0 )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2013-12-09 14:47:14 +00:00
|
|
|
if( ENABLE_JPG )
|
2023-08-04 21:19:53 +00:00
|
|
|
# Note: The function ecbuild_add_extra_search_paths is deprecated but we need it to find JasPer at ECMWF.
|
2019-12-13 15:44:54 +00:00
|
|
|
# It modifies CMAKE_PREFIX_PATH
|
2015-12-17 11:11:42 +00:00
|
|
|
# which can affect future package discovery if not undone by the caller.
|
|
|
|
# The current CMAKE_PREFIX_PATH is backed up as _CMAKE_PREFIX_PATH
|
|
|
|
#
|
2020-08-18 10:14:29 +00:00
|
|
|
#set(CMAKE_WARN_DEPRECATED OFF) # Suppress deprecation message
|
|
|
|
#ecbuild_add_extra_search_paths( jasper )
|
2013-04-03 10:45:13 +00:00
|
|
|
find_package( Jasper )
|
2020-08-18 10:14:29 +00:00
|
|
|
#set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH}) # Restore CMAKE_PREFIX_PATH
|
|
|
|
#set(CMAKE_WARN_DEPRECATED ON) # Remove suppression
|
2013-09-18 07:53:52 +00:00
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
find_package( OpenJPEG )
|
|
|
|
|
2019-12-13 15:44:54 +00:00
|
|
|
if( JASPER_FOUND AND ENABLE_JPG_LIBJASPER )
|
2015-09-18 10:07:02 +00:00
|
|
|
list( APPEND ECCODES_TPLS Jasper )
|
2013-04-23 08:59:14 +00:00
|
|
|
set( HAVE_JPEG 1 )
|
|
|
|
set( HAVE_LIBJASPER 1 )
|
2023-08-04 21:19:53 +00:00
|
|
|
# Extract JasPer's major version number to enable conditional code. See ECC-396
|
2016-12-06 11:51:41 +00:00
|
|
|
string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" JASPER_VERSION_MAJOR "${JASPER_VERSION_STRING}")
|
2013-04-03 10:45:13 +00:00
|
|
|
endif()
|
|
|
|
|
2019-12-13 15:44:54 +00:00
|
|
|
if( OPENJPEG_FOUND AND ENABLE_JPG_LIBOPENJPEG )
|
2015-09-18 10:07:02 +00:00
|
|
|
list( APPEND ECCODES_TPLS OpenJPEG )
|
2013-04-23 08:59:14 +00:00
|
|
|
set( HAVE_JPEG 1 )
|
2013-04-03 10:45:13 +00:00
|
|
|
set( HAVE_LIBOPENJPEG 1 )
|
|
|
|
endif()
|
|
|
|
|
2018-11-27 17:56:46 +00:00
|
|
|
ecbuild_info(" HAVE_JPEG=${HAVE_JPEG}")
|
2019-12-13 15:44:54 +00:00
|
|
|
ecbuild_info(" HAVE_LIBJASPER=${HAVE_LIBJASPER}")
|
|
|
|
ecbuild_info(" HAVE_LIBOPENJPEG=${HAVE_LIBOPENJPEG}")
|
2018-11-27 17:56:46 +00:00
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
2013-05-14 16:38:40 +00:00
|
|
|
###############################################################################
|
2013-04-10 15:46:41 +00:00
|
|
|
# other options
|
|
|
|
|
2021-01-06 19:19:21 +00:00
|
|
|
if( HAVE_TIMER )
|
2021-01-06 17:49:43 +00:00
|
|
|
set( ECCODES_TIMER 1 )
|
2013-04-10 15:46:41 +00:00
|
|
|
else()
|
2021-01-06 17:49:43 +00:00
|
|
|
set( ECCODES_TIMER 0 )
|
2013-04-10 15:46:41 +00:00
|
|
|
endif()
|
|
|
|
|
2018-05-19 16:49:38 +00:00
|
|
|
set( IS_BIG_ENDIAN 0 )
|
2018-05-19 16:42:03 +00:00
|
|
|
if( ECCODES_BIG_ENDIAN )
|
2013-04-10 15:46:41 +00:00
|
|
|
set( IS_BIG_ENDIAN 1 )
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set( MANAGE_MEM 0 )
|
2013-12-09 14:47:14 +00:00
|
|
|
if( ENABLE_MEMORY_MANAGEMENT )
|
2013-04-10 15:46:41 +00:00
|
|
|
set( MANAGE_MEM 1 )
|
|
|
|
endif()
|
|
|
|
|
2013-12-23 15:50:47 +00:00
|
|
|
set( CMAKE_THREAD_PREFER_PTHREAD 1 ) # find thread library, but prefer pthreads
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
2015-01-29 15:50:51 +00:00
|
|
|
# debug
|
2016-04-14 10:10:15 +00:00
|
|
|
ecbuild_info(" CMAKE_THREAD_LIBS_INIT=${CMAKE_THREAD_LIBS_INIT}")
|
|
|
|
ecbuild_info(" CMAKE_USE_PTHREADS_INIT=${CMAKE_USE_PTHREADS_INIT}")
|
|
|
|
ecbuild_info(" HAVE_ECCODES_THREADS=${HAVE_ECCODES_THREADS}")
|
2015-01-29 15:50:51 +00:00
|
|
|
|
2016-04-07 15:51:07 +00:00
|
|
|
|
2013-04-10 15:46:41 +00:00
|
|
|
set( GRIB_PTHREADS 0 )
|
2015-12-30 14:39:02 +00:00
|
|
|
set( GRIB_OMP_THREADS 0 )
|
2013-04-10 15:46:41 +00:00
|
|
|
set( GRIB_LINUX_PTHREADS 0 )
|
2015-05-14 15:45:03 +00:00
|
|
|
#if( HAVE_ECCODES_THREADS AND CMAKE_THREAD_LIBS_INIT )
|
|
|
|
if( HAVE_ECCODES_THREADS )
|
2016-01-07 11:31:42 +00:00
|
|
|
if( NOT ${CMAKE_USE_PTHREADS_INIT} )
|
2016-04-14 10:10:15 +00:00
|
|
|
ecbuild_critical("Pthreads is not supported on your system: thread library found=[${CMAKE_THREAD_LIBS_INIT}]")
|
2016-01-07 11:31:42 +00:00
|
|
|
endif()
|
|
|
|
set( GRIB_PTHREADS 1 )
|
2021-07-29 14:31:38 +00:00
|
|
|
set( ECCODES_PTHREADS_LIBRARIES Threads::Threads ) # ECC-1268
|
2016-01-07 11:31:42 +00:00
|
|
|
if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
|
|
|
|
set( GRIB_LINUX_PTHREADS 1 )
|
2013-04-10 15:46:41 +00:00
|
|
|
endif()
|
2015-12-30 14:39:02 +00:00
|
|
|
elseif(HAVE_ECCODES_OMP_THREADS)
|
|
|
|
ecbuild_enable_omp()
|
|
|
|
set( GRIB_OMP_THREADS 1 )
|
2013-04-10 15:46:41 +00:00
|
|
|
endif()
|
2016-01-07 11:31:42 +00:00
|
|
|
|
|
|
|
# Cannot have both options
|
|
|
|
if( HAVE_ECCODES_THREADS AND HAVE_ECCODES_OMP_THREADS )
|
2021-11-30 12:12:56 +00:00
|
|
|
ecbuild_critical("Cannot enable both POSIX threads and OpenMP! Please specify just one option")
|
2016-01-07 11:31:42 +00:00
|
|
|
endif()
|
|
|
|
|
2021-11-30 12:12:56 +00:00
|
|
|
ecbuild_info(" POSIX THREADS = ${GRIB_PTHREADS}")
|
|
|
|
ecbuild_info(" OpenMP THREADS= ${GRIB_OMP_THREADS}")
|
2013-04-10 15:46:41 +00:00
|
|
|
|
|
|
|
set( GRIB_MEM_ALIGN 0 )
|
2013-12-09 14:47:14 +00:00
|
|
|
if( ENABLE_ALIGN_MEMORY )
|
2013-04-10 15:46:41 +00:00
|
|
|
set( GRIB_MEM_ALIGN 1 )
|
|
|
|
endif()
|
|
|
|
|
2013-06-19 15:54:11 +00:00
|
|
|
# fix for #if IEEE_LE or IEE_BE instead of #ifdef
|
|
|
|
|
|
|
|
if( IEEE_BE )
|
|
|
|
set( IEEE_LE 0 )
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if( IEEE_LE )
|
|
|
|
set( IEEE_BE 0 )
|
|
|
|
endif()
|
|
|
|
|
2019-12-12 11:08:31 +00:00
|
|
|
set( ECCODES_ON_WINDOWS 0 )
|
2019-01-21 13:18:21 +00:00
|
|
|
if( EC_OS_NAME MATCHES "windows" )
|
|
|
|
# Symbols need to be explicitly exported on Windows so we can link to dlls.
|
|
|
|
set( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
|
2019-12-12 11:08:31 +00:00
|
|
|
set( ECCODES_ON_WINDOWS 1 )
|
2019-01-21 13:18:21 +00:00
|
|
|
|
|
|
|
# Suppress compliler warnings - see ECC-850
|
|
|
|
# Suppress warnings about using 'insecure' functions. Fixing this would require changes all over
|
|
|
|
# the codebase which would damage portability.
|
|
|
|
ecbuild_add_c_flags("/D_CRT_SECURE_NO_WARNINGS")
|
|
|
|
# Suppress warnings about using well-known C functions.
|
|
|
|
ecbuild_add_c_flags("/D_CRT_NONSTDC_NO_DEPRECATE")
|
|
|
|
# Suppress C4267: warns about possible loss of data when converting 'size_t' to 'int'.
|
|
|
|
ecbuild_add_c_flags("/wd4267")
|
|
|
|
endif()
|
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
###############################################################################
|
|
|
|
# contents
|
2020-07-29 13:28:11 +00:00
|
|
|
set( the_default_data_prefix ${CMAKE_INSTALL_PREFIX} )
|
|
|
|
if( ${DEVELOPER_MODE} )
|
|
|
|
ecbuild_info("DEVELOPER_MODE is defined")
|
2015-08-28 13:00:17 +00:00
|
|
|
set( the_default_data_prefix ${CMAKE_BINARY_DIR} )
|
2014-11-25 13:21:39 +00:00
|
|
|
endif()
|
|
|
|
|
2015-09-22 10:42:54 +00:00
|
|
|
if( NOT DEFINED ECCODES_DEFINITION_SUFF )
|
2017-02-03 12:08:35 +00:00
|
|
|
set( ECCODES_DEFINITION_SUFF ${INSTALL_DATA_DIR}/definitions )
|
2013-03-25 12:04:10 +00:00
|
|
|
endif()
|
2015-09-22 10:42:54 +00:00
|
|
|
if( NOT DEFINED ECCODES_SAMPLES_SUFF )
|
2017-02-03 12:08:35 +00:00
|
|
|
set( ECCODES_SAMPLES_SUFF ${INSTALL_DATA_DIR}/samples )
|
2013-03-25 12:04:10 +00:00
|
|
|
endif()
|
2015-09-22 10:42:54 +00:00
|
|
|
if( NOT DEFINED ECCODES_IFS_SAMPLES_SUFF )
|
2017-02-03 12:08:35 +00:00
|
|
|
set( ECCODES_IFS_SAMPLES_SUFF ${INSTALL_DATA_DIR}/ifs_samples )
|
2015-01-19 10:23:02 +00:00
|
|
|
endif()
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2015-09-22 10:42:54 +00:00
|
|
|
set( ECCODES_DEFINITION_PATH ${the_default_data_prefix}/${ECCODES_DEFINITION_SUFF} )
|
|
|
|
set( ECCODES_SAMPLES_PATH ${the_default_data_prefix}/${ECCODES_SAMPLES_SUFF} )
|
|
|
|
set( ECCODES_IFS_SAMPLES_PATH ${the_default_data_prefix}/${ECCODES_IFS_SAMPLES_SUFF} )
|
|
|
|
|
2018-05-11 10:31:13 +00:00
|
|
|
###############################################################################
|
2013-04-03 10:45:13 +00:00
|
|
|
### config header
|
|
|
|
|
2014-01-03 11:20:14 +00:00
|
|
|
ecbuild_generate_config_headers()
|
|
|
|
|
2015-02-18 18:11:38 +00:00
|
|
|
configure_file( eccodes_config.h.in eccodes_config.h )
|
2013-04-03 10:45:13 +00:00
|
|
|
|
2015-02-18 18:11:38 +00:00
|
|
|
add_definitions( -DHAVE_ECCODES_CONFIG_H )
|
2013-04-10 15:46:41 +00:00
|
|
|
|
|
|
|
if( CMAKE_COMPILER_IS_GNUCC )
|
2015-09-18 09:39:20 +00:00
|
|
|
ecbuild_add_c_flags("-pedantic")
|
2013-04-10 15:46:41 +00:00
|
|
|
endif()
|
2013-04-03 10:45:13 +00:00
|
|
|
|
2020-08-04 12:41:40 +00:00
|
|
|
# gfortran 10 has become stricter with argument matching
|
|
|
|
if( HAVE_FORTRAN AND CMAKE_Fortran_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10 )
|
|
|
|
ecbuild_add_fortran_flags("-fallow-argument-mismatch")
|
|
|
|
endif()
|
|
|
|
|
2016-04-13 15:12:21 +00:00
|
|
|
###############################################################################
|
2013-05-14 16:38:40 +00:00
|
|
|
# contents
|
|
|
|
|
2014-03-31 12:57:06 +00:00
|
|
|
### export package to other ecbuild packages
|
2013-05-14 16:38:40 +00:00
|
|
|
|
2015-02-18 10:14:22 +00:00
|
|
|
set( ECCODES_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src )
|
|
|
|
set( ECCODES_LIBRARIES eccodes )
|
2013-05-14 16:38:40 +00:00
|
|
|
|
2015-01-26 22:28:46 +00:00
|
|
|
get_directory_property( COMPILE_DEFINITIONS ECCODES_DEFINITIONS )
|
2013-05-14 16:38:40 +00:00
|
|
|
|
2015-02-18 10:14:22 +00:00
|
|
|
foreach( _tpl ${ECCODES_TPLS} )
|
2014-06-18 16:14:01 +00:00
|
|
|
string( TOUPPER ${_tpl} TPL )
|
|
|
|
if( ${TPL}_FOUND )
|
2019-03-19 16:31:49 +00:00
|
|
|
if( REPLACE_TPL_ABSOLUTE_PATHS )
|
|
|
|
# replace TPL absolute paths with their library names
|
|
|
|
# this helps make ecCodes relocatable
|
|
|
|
set( _TMP "" )
|
|
|
|
|
|
|
|
foreach( _lib ${${TPL}_LIBRARIES} )
|
|
|
|
get_filename_component( _lib_name ${_lib} NAME_WE )
|
|
|
|
string( REGEX REPLACE "^lib" "" _name ${_lib_name} )
|
|
|
|
list( APPEND _TMP "-l${_name}" )
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
set( ${TPL}_LIBRARIES ${_TMP} )
|
|
|
|
set( _TMP "" )
|
|
|
|
endif()
|
|
|
|
|
2015-02-18 10:14:22 +00:00
|
|
|
list( APPEND ECCODES_EXTRA_DEFINITIONS ${${TPL}_DEFINITIONS} )
|
|
|
|
list( APPEND ECCODES_EXTRA_INCLUDE_DIRS ${${TPL}_INCLUDE_DIRS} ${${TPL}_INCLUDE_DIR} )
|
|
|
|
list( APPEND ECCODES_EXTRA_LIBRARIES ${${TPL}_LIBRARIES} )
|
2014-06-18 16:14:01 +00:00
|
|
|
endif()
|
2013-05-14 16:38:40 +00:00
|
|
|
endforeach()
|
|
|
|
|
2013-04-03 10:45:13 +00:00
|
|
|
### include directories
|
|
|
|
|
2015-02-18 10:14:22 +00:00
|
|
|
include_directories( ${ECCODES_INCLUDE_DIRS} ${ECCODES_EXTRA_INCLUDE_DIRS} )
|
2013-04-03 10:45:13 +00:00
|
|
|
|
2016-06-14 14:27:49 +00:00
|
|
|
add_subdirectory( definitions ) # must be before memfs
|
|
|
|
add_subdirectory( memfs )
|
2013-03-25 12:04:10 +00:00
|
|
|
add_subdirectory( src )
|
2020-08-07 21:36:59 +00:00
|
|
|
if( HAVE_BUILD_TOOLS )
|
|
|
|
add_subdirectory( tools )
|
|
|
|
endif()
|
2013-03-25 12:04:10 +00:00
|
|
|
add_subdirectory( fortran )
|
2019-06-11 16:15:06 +00:00
|
|
|
|
2013-03-25 12:04:10 +00:00
|
|
|
add_subdirectory( tests )
|
|
|
|
add_subdirectory( examples )
|
2014-03-31 12:57:06 +00:00
|
|
|
add_subdirectory( data )
|
2013-04-02 14:17:46 +00:00
|
|
|
add_subdirectory( samples )
|
|
|
|
add_subdirectory( ifs_samples ) # must come after samples
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
# ecbuild_dont_pack( DIRS samples DONT_PACK_REGEX "*.grib" )
|
2023-03-24 10:14:19 +00:00
|
|
|
ecbuild_dont_pack( FILES .cproject .project )
|
2014-07-11 15:31:24 +00:00
|
|
|
ecbuild_dont_pack( DIRS
|
2023-03-24 10:14:19 +00:00
|
|
|
experimental deprecated doxygen confluence tests/deprecated tests/tests.ecmwf
|
|
|
|
src/deprecated tools/deprecated ifs_samples/grib1_mlgrib2_ieee32
|
|
|
|
examples/examples.dev examples/extra examples/deprecated bamboo
|
2023-07-12 15:31:31 +00:00
|
|
|
fortran/fortranCtypes share/eccodes .settings )
|
2014-11-04 14:49:23 +00:00
|
|
|
#ecbuild_dont_pack( DIRS data/bufr DONT_PACK_REGEX "*.bufr" )
|
|
|
|
#ecbuild_dont_pack( DIRS data/tigge DONT_PACK_REGEX "*.grib" )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2014-07-11 15:50:30 +00:00
|
|
|
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
|
|
|
|
|
2016-04-13 15:12:21 +00:00
|
|
|
###############################################################################
|
2013-04-03 10:45:13 +00:00
|
|
|
# export to other projects
|
2013-03-25 12:04:10 +00:00
|
|
|
|
2013-05-14 16:38:40 +00:00
|
|
|
# temporary -- add support for ecbuild 1.0.x sub-project inclusion
|
|
|
|
# to remove once mars server & client use eckit & ecbuild >= 1.1
|
2013-04-23 08:59:14 +00:00
|
|
|
|
2018-02-01 16:07:40 +00:00
|
|
|
if( HAVE_FORTRAN )
|
2015-02-18 10:14:22 +00:00
|
|
|
list( APPEND ECCODES_INCLUDE_DIRS ${CMAKE_Fortran_MODULE_DIRECTORY} )
|
2015-02-27 18:21:10 +00:00
|
|
|
list( APPEND ECCODES_LIBRARIES eccodes_f90 )
|
2015-01-19 10:23:02 +00:00
|
|
|
endif()
|
|
|
|
|
2015-01-29 13:07:39 +00:00
|
|
|
# pkg-config
|
|
|
|
ecbuild_pkgconfig(
|
2016-06-06 12:22:29 +00:00
|
|
|
NAME eccodes
|
2019-01-28 12:47:22 +00:00
|
|
|
URL "https://confluence.ecmwf.int/display/ECC/"
|
2016-06-06 12:22:29 +00:00
|
|
|
DESCRIPTION "The ecCodes library"
|
|
|
|
LIBRARIES eccodes
|
2016-09-28 08:58:43 +00:00
|
|
|
IGNORE_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIRS} ${NETCDF_INCLUDE_DIRS}
|
2024-07-12 08:51:12 +00:00
|
|
|
VARIABLES HAVE_MEMFS HAVE_GEOGRAPHY HAVE_JPEG HAVE_LIBJASPER HAVE_LIBOPENJPEG
|
2016-06-06 12:22:29 +00:00
|
|
|
HAVE_ECCODES_THREADS HAVE_ECCODES_OMP_THREADS
|
2023-01-27 12:14:08 +00:00
|
|
|
HAVE_NETCDF HAVE_FORTRAN HAVE_PNG HAVE_AEC
|
2015-01-29 13:07:39 +00:00
|
|
|
)
|
2018-02-01 16:07:40 +00:00
|
|
|
if( HAVE_FORTRAN )
|
2015-02-05 16:57:47 +00:00
|
|
|
ecbuild_pkgconfig(
|
|
|
|
NAME eccodes_f90
|
2019-01-28 12:47:22 +00:00
|
|
|
URL "https://confluence.ecmwf.int/display/ECC/"
|
2015-02-13 18:04:42 +00:00
|
|
|
LIBRARIES eccodes_f90 eccodes
|
2015-02-05 16:57:47 +00:00
|
|
|
DESCRIPTION "The ecCodes library for Fortran 90"
|
|
|
|
IGNORE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/fortran ${PROJECT_BINARY_DIR}/fortran
|
2016-09-28 08:58:43 +00:00
|
|
|
${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIRS} ${NETCDF_INCLUDE_DIRS}
|
2024-07-12 08:51:12 +00:00
|
|
|
VARIABLES HAVE_MEMFS HAVE_GEOGRAPHY HAVE_JPEG HAVE_LIBJASPER HAVE_LIBOPENJPEG
|
2016-06-06 12:22:29 +00:00
|
|
|
HAVE_ECCODES_THREADS HAVE_ECCODES_OMP_THREADS
|
2023-01-27 12:14:08 +00:00
|
|
|
HAVE_NETCDF HAVE_PNG HAVE_AEC
|
2015-02-05 16:57:47 +00:00
|
|
|
)
|
2015-01-29 13:07:39 +00:00
|
|
|
endif()
|
|
|
|
|
2020-01-13 16:18:07 +00:00
|
|
|
###############################################################################
|
|
|
|
# Debugging aid. Print all known CMake variables
|
2024-02-01 12:08:34 +00:00
|
|
|
#get_cmake_property(_variableNames VARIABLES)
|
|
|
|
#foreach( _variableName ${_variableNames} )
|
2020-01-13 16:18:07 +00:00
|
|
|
# ecbuild_info(" ${_variableName}=${${_variableName}}")
|
2024-02-01 12:08:34 +00:00
|
|
|
#endforeach()
|
2016-04-13 15:12:21 +00:00
|
|
|
###############################################################################
|
2013-03-25 12:04:10 +00:00
|
|
|
# finalize
|
|
|
|
|
2014-03-31 12:57:06 +00:00
|
|
|
ecbuild_install_project( NAME ${CMAKE_PROJECT_NAME} )
|
2013-03-25 12:04:10 +00:00
|
|
|
|
|
|
|
ecbuild_print_summary()
|
2015-10-02 09:03:28 +00:00
|
|
|
|
2016-04-14 10:10:15 +00:00
|
|
|
ecbuild_info("")
|
2017-03-09 15:40:48 +00:00
|
|
|
ecbuild_info(" +--------------------------+")
|
2020-08-18 10:14:29 +00:00
|
|
|
ecbuild_info(" | ecCodes version ${eccodes_VERSION} |")
|
2017-03-09 15:40:48 +00:00
|
|
|
ecbuild_info(" +--------------------------+")
|
2016-04-14 10:10:15 +00:00
|
|
|
ecbuild_info("")
|
2019-06-11 16:15:06 +00:00
|
|
|
|
2019-06-19 15:39:46 +00:00
|
|
|
ecbuild_info(" +--------------------------------------+")
|
|
|
|
ecbuild_info(" | Please note: |")
|
|
|
|
ecbuild_info(" | For Python3 support, first install |")
|
|
|
|
ecbuild_info(" | ecCodes and then install the Python |")
|
|
|
|
ecbuild_info(" | bindings from PyPI with: |")
|
2020-03-09 17:02:09 +00:00
|
|
|
ecbuild_info(" | $ pip3 install eccodes |")
|
2019-06-19 15:39:46 +00:00
|
|
|
ecbuild_info(" +--------------------------------------+")
|
|
|
|
ecbuild_info("")
|