From b17ff51517613d90665ae5d24bb6c383224f4cb7 Mon Sep 17 00:00:00 2001 From: John Halley Gotway Date: Tue, 14 Nov 2023 17:03:53 -0700 Subject: [PATCH] Feature #2611 oneapi met-basev3.1 (#2737) --- .github/jobs/set_job_controls.sh | 2 +- .../build_docker_and_trigger_metplus.yml | 2 +- internal/scripts/docker/Dockerfile | 2 +- internal/scripts/docker/Dockerfile.copy | 2 +- internal/scripts/docker/build_met_docker.sh | 4 +- .../scripts/environment/development.docker | 7 +- .../scripts/installation/compile_MET_all.sh | 266 ++++++++++++------ .../config/install_met_env.derecho | 38 +++ 8 files changed, 224 insertions(+), 99 deletions(-) create mode 100644 internal/scripts/installation/config/install_met_env.derecho diff --git a/.github/jobs/set_job_controls.sh b/.github/jobs/set_job_controls.sh index 6f80c44aea..3517fbf65c 100755 --- a/.github/jobs/set_job_controls.sh +++ b/.github/jobs/set_job_controls.sh @@ -6,7 +6,7 @@ run_unit_tests=false run_diff=false run_update_truth=false met_base_repo=met-base -met_base_tag=v3.0 +met_base_tag=v3.1 input_data_version=develop truth_data_version=develop diff --git a/.github/workflows/build_docker_and_trigger_metplus.yml b/.github/workflows/build_docker_and_trigger_metplus.yml index 6d0adf11fa..aec4f2ce30 100644 --- a/.github/workflows/build_docker_and_trigger_metplus.yml +++ b/.github/workflows/build_docker_and_trigger_metplus.yml @@ -29,7 +29,7 @@ jobs: env: SOURCE_BRANCH: ${{ steps.get_branch_name.outputs.branch_name }}-lite MET_BASE_REPO: met-base - MET_BASE_TAG: v3.0 + MET_BASE_TAG: v3.1 - name: Push Docker Image run: .github/jobs/push_docker_image.sh diff --git a/internal/scripts/docker/Dockerfile b/internal/scripts/docker/Dockerfile index b0506a210a..9bb73f6fd6 100644 --- a/internal/scripts/docker/Dockerfile +++ b/internal/scripts/docker/Dockerfile @@ -1,5 +1,5 @@ ARG MET_BASE_REPO=met-base -ARG MET_BASE_TAG=v3.0 +ARG MET_BASE_TAG=v3.1 FROM dtcenter/${MET_BASE_REPO}:${MET_BASE_TAG} MAINTAINER John Halley Gotway diff --git a/internal/scripts/docker/Dockerfile.copy b/internal/scripts/docker/Dockerfile.copy index 1da6cf19fa..edceef36eb 100644 --- a/internal/scripts/docker/Dockerfile.copy +++ b/internal/scripts/docker/Dockerfile.copy @@ -1,5 +1,5 @@ ARG MET_BASE_REPO=met-base-unit-test -ARG MET_BASE_TAG=v3.0 +ARG MET_BASE_TAG=v3.1 FROM dtcenter/${MET_BASE_REPO}:${MET_BASE_TAG} MAINTAINER John Halley Gotway diff --git a/internal/scripts/docker/build_met_docker.sh b/internal/scripts/docker/build_met_docker.sh index c8bc1ce47b..297e21508c 100755 --- a/internal/scripts/docker/build_met_docker.sh +++ b/internal/scripts/docker/build_met_docker.sh @@ -10,7 +10,7 @@ LOG_FILE=/met/logs/MET-${MET_GIT_NAME}_configure.log echo "Running bootstrap for MET ${MET_GIT_NAME} and writing log file ${LOG_FILE}" ./bootstrap > ${LOG_FILE} 2>&1 echo "Configuring MET ${MET_GIT_NAME} and appending to log file ${LOG_FILE}" -./configure --enable-grib2 --enable-mode_graphics --enable-modis --enable-lidar2nc --enable-python CPPFLAGS="-I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/cairo" LIBS="-ltirpc" >> ${LOG_FILE} 2>&1 +./configure BUFRLIB_NAME=${BUFRLIB_NAME} GRIB2CLIB_NAME=${GRIB2CLIB_NAME} --enable-grib2 --enable-mode_graphics --enable-modis --enable-lidar2nc --enable-python CPPFLAGS="-I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/cairo" LIBS="-ltirpc" >> ${LOG_FILE} 2>&1 if [ $? != 0 ]; then cat ${LOG_FILE} exit 1 @@ -22,7 +22,7 @@ fi LOG_FILE=/met/logs/MET-${MET_GIT_NAME}_make_install.log echo "Compiling MET ${MET_GIT_NAME} and writing log file ${LOG_FILE}" -make ${MAKE_ARGS} install > ${LOG_FILE} +make ${MAKE_ARGS} install > ${LOG_FILE} 2>&1 if [ $? != 0 ]; then cat ${LOG_FILE} exit 1 diff --git a/internal/scripts/environment/development.docker b/internal/scripts/environment/development.docker index 5011adabe3..87f4f9cd0a 100644 --- a/internal/scripts/environment/development.docker +++ b/internal/scripts/environment/development.docker @@ -26,7 +26,7 @@ export MET_FONT_DIR=${MET_TEST_INPUT}/fonts export MET_TEST_RSCRIPT=/usr/bin/Rscript # set make arguments to build using multiple jobs -export MAKE_ARGS=-j +export MAKE_ARGS="-j 5" export TEST_BASE=/met export COMPILER=gnu_12.2.0 @@ -36,6 +36,8 @@ export USE_MODULES=FALSE export MET_INSTALL_DIR=/usr/local +export COMPILE_ECKIT=1 +export COMPILE_ATLAS=1 export COMPILE_HDF=1 export COMPILE_HDFEOS=1 export COMPILE_FREETYPE=1 @@ -43,3 +45,6 @@ export COMPILE_CAIRO=1 export SQLITE_INCLUDE_DIR=/usr/include export SQLITE_LIB_DIR=/usr/lib/x86_64-linux-gnu + +export BUFRLIB_NAME="-lbufr_4" +export GRIB2CLIB_NAME="-lg2c" \ No newline at end of file diff --git a/internal/scripts/installation/compile_MET_all.sh b/internal/scripts/installation/compile_MET_all.sh index 59fb4f3dcf..4cd2d40950 100644 --- a/internal/scripts/installation/compile_MET_all.sh +++ b/internal/scripts/installation/compile_MET_all.sh @@ -53,16 +53,18 @@ # MET_HDF5, MET_NETCDF, MET_PROJ, MET_GSL, LIB_JASPER, LIB_PNG, LIB_Z, # SQLITE_INCLUDE_DIR, SQLITE_LIB_DIR. # -# The optional libraries HDF4, HDFEOS, FREETYPE, and CAIRO are +# The optional libraries ecKit and atlas offer support for unstructured +# grids. The optional libraries HDF4, HDFEOS, FREETYPE, and CAIRO are # used for the following, not widely used tools, MODIS-Regrid, -# lidar2nc, and MODE Graphics. To enable building of these libraries, -# set the compile flags for the library (e.g. COMPILE_HDF, COMPILE_HDFEOS) to -# any value in the environment config file. If these libraries have already -# been installed and don't need to be reinstalled, please -# supply values for the following environment variables in the input -# environment configuration file (install_met_env.): -# MET_HDF, MET_HDFEOS, MET_FREETYPEINC, MET_FREETYPELIB, -# MET_CAIROINC, MET_CAIROLIB. +# lidar2nc, and MODE Graphics. To enable building of these libraries, +# set the compile flags for the library (e.g. COMPILE_ECKIT, COMPILE_ATLAS, +# COMPILE_HDF, COMPILE_HDFEOS) to any value in the environment config +# file. If these libraries have already been installed and don't need +# to be reinstalled, please supply values for the following environment +# variables in the input environment configuration file +# (install_met_env.): MET_ECKIT, MET_ATLAS, MET_HDF, +# MET_HDFEOS, MET_FREETYPEINC, MET_FREETYPELIB, MET_CAIROINC, +# MET_CAIROLIB. # # Users can speed up the compilation of MET and its dependent libraries # by adding the following to their environment configuration file: @@ -199,14 +201,27 @@ else COMPILE_GSL=0 fi +# Only set COMPILE_ECKIT and COMPILE_ATLAS if you want to compile and enable support for unstructued grids +if [ ! -z "${COMPILE_ECKIT}" ]; then COMPILE_ECKIT=1; else COMPILE_ECKIT=0; fi +if [ ! -z "${COMPILE_ATLAS}" ]; then COMPILE_ATLAS=1; else COMPILE_ATLAS=0; fi + +if [[ -z ${MET_ECKIT} ]] && [[ -z ${MET_ATLAS} ]]; then + if [[ $COMPILE_ECKIT -eq 1 && $COMPILE_ATLAS -eq 1 ]]; then + export MET_ECKIT=${LIB_DIR} + export MET_ATLAS=${LIB_DIR} + fi +else + # Only set COMPILE_ECKIT and COMPILE_ATLAS to 1 if you have already compiled ECKIT and ATLAS, + # have set MET_ECKIT and MET_ATLAS in your configuration file, and want to enable + # unstructured grids + COMPILE_ECKIT=0 + COMPILE_ATLAS=0 +fi + # Only set COMPILE_HDF and COMPILE_HDFEOS if you want to compile and enable MODIS-Regrid (not widely used) if [ ! -z "${COMPILE_HDF}" ]; then COMPILE_HDF=1; else COMPILE_HDF=0; fi if [ ! -z "${COMPILE_HDFEOS}" ]; then COMPILE_HDFEOS=1; else COMPILE_HDFEOS=0; fi -# Only set COMPILE_FREETYPE and COMPILE_CAIRO if you want to compile and enable MODE Graphics (not widely used) -if [ ! -z "${COMPILE_FREETYPE}" ]; then COMPILE_FREETYPE=1; else COMPILE_FREETYPE=0; fi -if [ ! -z "${COMPILE_CAIRO}" ]; then COMPILE_CAIRO=1; else COMPILE_CAIRO=0; fi - if [[ -z ${MET_HDF} ]] && [[ -z ${MET_HDFEOS} ]]; then if [[ $COMPILE_HDF -eq 1 && $COMPILE_HDFEOS -eq 1 ]]; then export MET_HDF=${LIB_DIR} @@ -220,6 +235,11 @@ else COMPILE_HDFEOS=0 fi +# Only set COMPILE_FREETYPE and COMPILE_CAIRO if you want to compile and enable MODE Graphics (not widely used) +if [ ! -z "${COMPILE_FREETYPE}" ]; then COMPILE_FREETYPE=1; else COMPILE_FREETYPE=0; fi +if [ ! -z "${COMPILE_CAIRO}" ]; then COMPILE_CAIRO=1; else COMPILE_CAIRO=0; fi + + if [[ ! -z ${MET_FREETYPE} ]]; then echo "ERROR: MET_FREETYPEINC and MET_FREETYPELIB must be set instead of MET_FREETYPE" exit 1 @@ -259,6 +279,8 @@ if [ ! -z "${SKIP_LIBS}" ]; then COMPILE_LIBPNG=0 COMPILE_JASPER=0 COMPILE_G2CLIB=0 + COMPILE_ECKIT=0 + COMPILE_ATLAS=0 COMPILE_HDF=0 COMPILE_HDFEOS=0 COMPILE_NETCDF=0 @@ -289,13 +311,20 @@ fi if [ -z ${COMPILER_FAMILY} ]; then COMPILER_FAMILY=` echo $COMPILER | cut -d'_' -f1` fi - + +# Check for "oneapi" in compiler family name +#if echo ${COMPILER_FAMILY} | grep -E "^intel"; then +if [[ ${COMPILER_FAMILY} == *intel* ]]; then + COMPILER_FAMILY_SUFFIX=` echo $COMPILER_FAMILY | cut -d'-' -f2` +fi + if [ -z ${COMPILER_VERSION} ]; then COMPILER_VERSION=`echo $COMPILER | cut -d'_' -f2` fi echo "COMPILER = $COMPILER" echo "COMPILER_FAMILY = $COMPILER_FAMILY" +echo "COMPILER_FAMILY_SUFFIX = $COMPILER_FAMILY_SUFFIX" echo "COMPILER_VERSION = $COMPILER_VERSION" COMPILER_MAJOR_VERSION=`echo $COMPILER_VERSION | cut -d'.' -f1` COMPILER_MINOR_VERSION=`echo $COMPILER_VERSION | cut -d'.' -f2` @@ -322,36 +351,48 @@ if [[ ${COMPILER_FAMILY} == *gnu* ]]; then fi if [ ${COMPILER_FAMILY} = "gnu" ]; then - if [ -z ${CC} ]; then CC=`which gcc`; fi - if [ -z ${CXX} ]; then CXX=`which g++`; fi - if [ -z ${FC} ]; then FC=`which gfortran`; fi - if [ -z ${F77} ]; then F77=`which gfortran`; fi - if [ -z ${F90} ]; then F90=`which gfortran`; fi + if [ -z ${CC} ]; then export CC=`which gcc`; fi + if [ -z ${CXX} ]; then export CXX=`which g++`; fi + if [ -z ${FC} ]; then export FC=`which gfortran`; fi + if [ -z ${F77} ]; then export F77=`which gfortran`; fi + if [ -z ${F90} ]; then export F90=`which gfortran`; fi elif [ ${COMPILER_FAMILY} = "pgi" ]; then - if [ -z ${CC} ]; then CC=`which pgcc`; fi - if [ -z ${CXX} ]; then CXX=`which pgc++`; fi - if [ -z ${FC} ]; then FC=`which pgf90`; fi - if [ -z ${F77} ]; then F77=`which pgf90`; fi - if [ -z ${F90} ]; then F90=`which pgf90`; fi -elif [[ ${COMPILER_FAMILY} == "intel" ]] || \ + if [ -z ${CC} ]; then export CC=`which pgcc`; fi + if [ -z ${CXX} ]; then export CXX=`which pgc++`; fi + if [ -z ${FC} ]; then export FC=`which pgf90`; fi + if [ -z ${F77} ]; then export F77=`which pgf90`; fi + if [ -z ${F90} ]; then export F90=`which pgf90`; fi +elif [[ ${COMPILER_FAMILY} == *intel* && ${CC} == "icc" ]] || \ [[ ${COMPILER_FAMILY} == "ics" ]] || \ [[ ${COMPILER_FAMILY} == "ips" ]] || \ + [[ ${COMPILER_FAMILY} == "intel-classic" ]] || \ [[ ${COMPILER_FAMILY} == "PrgEnv-intel" ]]; then - if [ -z ${CC} ]; then CC=`which icc`; fi - if [ -z ${CXX} ]; then CXX=`which icc`; fi - if [ -z ${FC} ]; then FC=`which ifort`; fi - if [ -z ${F77} ]; then F77=`which ifort`; fi - if [ -z ${F90} ]; then F90=`which ifort`; fi + if [ -z ${CC} ]; then export CC=`which icc`; fi + if [ -z ${CXX} ]; then export CXX=`which icpc`; fi + if [ -z ${FC} ]; then export FC=`which ifort`; fi + if [ -z ${F77} ]; then export F77=`which ifort`; fi + if [ -z ${F90} ]; then export F90=`which ifort`; fi +elif [[ ${COMPILER_FAMILY} == *intel* ]] && [[ ${CC} == *icx* ]]; then + export CXX=`which icpx` + export FC=`which ifx` + export F77=`which ifx` + export F90=`which ifx` +elif [[ ${COMPILER_FAMILY_SUFFIX} == oneapi ]]; then + export CC=`which icx` + export CXX=`which icpx` + export FC=`which ifx` + export F77=`which ifx` + export F90=`which ifx` else - echo "ERROR: \${COMPILER} must start with gnu, intel, ics, ips, PrgEnv-intel, or pgi" + echo "ERROR: \${COMPILER} must start with gnu, intel, ics, ips, intel-classic, PrgEnv-intel, or pgi" exit fi -export CC -export CXX -export FC -export F77 -export F90 +#export CC +#export CXX +#export FC +#export F77 +#export F90 echo "export CC=${CC}" echo "export CXX=${CXX}" @@ -416,7 +457,7 @@ if [ $COMPILE_PROJ -eq 1 ]; then export SQLITE_LIB_DIR=${LIB_DIR}/lib fi - vrs="9.2.1"; + vrs="7.1.0"; echo echo "Compiling PROJ_${vrs} at `date`" @@ -427,7 +468,11 @@ if [ $COMPILE_PROJ -eq 1 ]; then echo "cd `pwd`" export PATH=${LIB_DIR}/bin:${PATH} run_cmd "mkdir build; cd build" - run_cmd "cmake -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DSQLITE3_INCLUDE_DIR=${SQLITE_INCLUDE_DIR} -DSQLITE3_LIBRARY=${SQLITE_LIB_DIR}/libsqlite3.so .." + if [[ -z "$LIB_TIFF" ]]; then + run_cmd "cmake -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DSQLITE3_INCLUDE_DIR=${SQLITE_INCLUDE_DIR} -DSQLITE3_LIBRARY=${SQLITE_LIB_DIR}/libsqlite3.so .." + else + run_cmd "cmake -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DSQLITE3_INCLUDE_DIR=${SQLITE_INCLUDE_DIR} -DSQLITE3_LIBRARY=${SQLITE_LIB_DIR}/libsqlite3.so -DTIFF_LIBRARY_RELEASE=${LIB_TIFF} .." + fi run_cmd "cmake --build ." run_cmd "cmake --build . --target install" @@ -439,7 +484,7 @@ if [ $COMPILE_GSL -eq 1 ]; then if [ ${COMPILER_FAMILY} = "pgi" ]; then vrs="1.11"; else - vrs="2.1"; + vrs="2.7.1"; fi echo @@ -457,33 +502,23 @@ fi # Compile BUFRLIB if [ $COMPILE_BUFRLIB -eq 1 ]; then - vrs="v11.3.0"; + vrs="v11.6.0"; echo - echo "Compiling BUFRLIB_${vrs} at `date`" - mkdir -p ${LIB_DIR}/bufrlib/BUFRLIB_${vrs} - rm -rf ${LIB_DIR}/bufrlib/BUFRLIB_${vrs}/* - cd ${LIB_DIR}/bufrlib/BUFRLIB_${vrs} + echo "Compiling bufr_${vrs} at `date`" + mkdir -p ${LIB_DIR}/bufrlib + rm -rf ${LIB_DIR}/bufrlib/NCEPLIBS-bufr-bufr_${vrs} + tar -xf ${TAR_DIR}/bufr_${vrs}.tar.gz -C ${LIB_DIR}/bufrlib + export SOURCE_DIR=${LIB_DIR}/bufrlib/NCEPLIBS-bufr-bufr_${vrs} + cd $SOURCE_DIR echo "cd `pwd`" - tar -xf ${TAR_DIR}/BUFRLIB_`echo $vrs | sed 's/\./-/g'`.tar -C ${LIB_DIR}/bufrlib/BUFRLIB_${vrs} - - ${CC} -c -DUNDERSCORE `./getdefflags_C.sh` *.c >> make.log 2>&1 - - # For GNU and Intel follow BUFRLIB11 instructions - if [[ ${COMPILER_FAMILY} == "gnu" ]]; then - if [[ ${COMPILER_MAJOR_VERSION} -ge 10 ]]; then - ${FC} -c -fno-second-underscore -fallow-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 - elif [[ ${COMPILER_MAJOR_VERSION} -lt 10 ]]; then - ${FC} -c -fno-second-underscore -Wno-argument-mismatch `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 - fi - elif [[ ${COMPILER_FAMILY} == "intel" ]] || [[ ${COMPILER_FAMILY} == "ics" ]] || [[ ${COMPILER_FAMILY} == "ips" ]] || [[ ${COMPILER_FAMILY} == "PrgEnv-intel" ]]; then - ${FC} -c `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 - elif [[ ${COMPILER_FAMILY} == "pgi" ]]; then - ${FC} -c -Mnosecond_underscore `./getdefflags_F.sh` modv*.F moda*.F `ls -1 *.F *.f | grep -v "mod[av]_"` >> bufr.make.log 2>&1 - fi - - ar crv libbufr.a *.o >> bufr.make.log 2>&1 - cp *.a ${LIB_DIR}/lib/. + run_cmd "mkdir build" + export BUILD_DIR=${SOURCE_DIR}/build + run_cmd "cmake -H${SOURCE_DIR} -B${BUILD_DIR} -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DCMAKE_BUILD_TYPE=Debug" + run_cmd "cd ${BUILD_DIR}" + run_cmd "make ${MAKE_ARGS} > bufr.make.log 2>&1" + run_cmd "ctest > bufr.ctest.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > bufr.make_install.log 2>&1" fi @@ -522,49 +557,96 @@ fi # Compile JASPER if [ $COMPILE_JASPER -eq 1 ]; then + + vrs="2.0.25"; + echo echo "Compiling JASPER at `date`" mkdir -p ${LIB_DIR}/jasper rm -rf ${LIB_DIR}/jasper/jasper* - unzip ${TAR_DIR}/jasper*.zip -d ${LIB_DIR}/jasper > /dev/null 2>&1 - cd ${LIB_DIR}/jasper/jasper* + tar -xf ${TAR_DIR}/jasper-${vrs}.tar.gz -C ${LIB_DIR}/jasper + cd ${LIB_DIR}/jasper/jasper-version-${vrs} export CPPFLAGS="-I${LIB_DIR}/include" + export SOURCE_DIR=${LIB_DIR}/jasper/jasper-version-${vrs} echo "cd `pwd`" - run_cmd "./configure --prefix=${LIB_DIR} > jasper.configure.log 2>&1" - run_cmd "make ${MAKE_ARGS} > jasper.make.log 2>&1" + export BUILD_DIR=${LIB_DIR}/jasper/jasper-version-${vrs}/build + run_cmd "cmake -G \"Unix Makefiles\" -H${SOURCE_DIR} -B${BUILD_DIR} -DCMAKE_INSTALL_PREFIX=${LIB_DIR}" + run_cmd "cd ${BUILD_DIR}" + run_cmd "make clean all" + run_cmd "make ${MAKE_ARGS} test > jasper.make_test.log 2>&1" run_cmd "make ${MAKE_ARGS} install > jasper.make_install.log 2>&1" fi # Compile G2CLIB if [ $COMPILE_G2CLIB -eq 1 ]; then + + vrs="1.6.4"; + echo echo "Compiling G2CLIB at `date`" mkdir -p ${LIB_DIR}/g2clib - rm -rf ${LIB_DIR}/g2clib/g2clib* - tar -xf ${TAR_DIR}/g2clib*.tar -C ${LIB_DIR}/g2clib - cd ${LIB_DIR}/g2clib/g2clib* - - # Sed commands use double-quotes to support variable expansion. - $sed_inline "s|INC=.*|INC=-I${LIB_DIR}/include -I${LIB_DIR}/include/jasper|g" makefile + rm -rf ${LIB_DIR}/g2clib/NCEP* + tar -xf ${TAR_DIR}/g2clib-${vrs}.tar.gz -C ${LIB_DIR}/g2clib + cd ${LIB_DIR}/g2clib/NCEP* + echo "cd `pwd`" + run_cmd "mkdir build; cd build" + run_cmd "cmake -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DCMAKE_PREFIX_PATH=${LIB_DIR} .." + run_cmd "make ${MAKE_ARGS} > g2c.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} test > g2c.make_test.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > g2c.make_install.log 2>&1" +fi + +# Compile ECKIT +if [ $COMPILE_ECKIT -eq 1 ]; then - # Allow other compilers besides gcc - $sed_inline "s|CC=gcc|CC=${CC}|g" makefile + # Need to obtain ecbuild before installing eckit - # remove -D__64BIT__ flag because compiling with it has - # shown issues with GRIB/GRIB2 files that are over 2GB in size - # This flag was removed in g2clib 1.6.4 - # so this can be removed if the version is updated - $sed_inline 's/-D__64BIT__//g' makefile + vrs="3.5.0"; + + echo + echo "Compiling ECBUILD at `date`" + mkdir -p ${LIB_DIR}/ecbuild + rm -rf ${LIB_DIR}/ecbuild/ecbuild* + tar -xf ${TAR_DIR}/ecbuild-${vrs}.tar.gz -C ${LIB_DIR}/ecbuild + cd ${LIB_DIR}/ecbuild/ecbuild* + echo "cd `pwd`" + run_cmd "mkdir build; cd build" + run_cmd "cmake ../ -DCMAKE_INSTALL_PREFIX=${LIB_DIR}" + run_cmd "make ${MAKE_ARGS} install > ecbuild.make_install.log 2>&1" + vrs="1.20.2"; + + echo + echo "Compiling ECKIT at `date`" + mkdir -p ${LIB_DIR}/eckit + rm -rf ${LIB_DIR}/eckit/eckit* + tar -xf ${TAR_DIR}/eckit-${vrs}.tar.gz -C ${LIB_DIR}/eckit + cd ${LIB_DIR}/eckit/eckit* echo "cd `pwd`" - # g2clib appears to compile but causes failure compiling MET if -j argument is used - # so exclude it from this call - run_cmd "make > g2clib.make.log 2>&1" + run_cmd "mkdir build; cd build" + run_cmd "cmake ../ -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DCMAKE_PREFIX_PATH=${LIB_DIR}" + run_cmd "make ${MAKE_ARGS} install > eckit.make_install.log 2>&1" - cp libg2c*.a ${LIB_DIR}/lib/libgrib2c.a - cp *.h ${LIB_DIR}/include/. fi +# Compile ATLAS +if [ $COMPILE_ATLAS -eq 1 ]; then + + vrs="0.30.0"; + + echo + echo "Compiling ATLAS at `date`" + mkdir -p ${LIB_DIR}/atlas + rm -rf ${LIB_DIR}/atlas/atlas* + tar -xf ${TAR_DIR}/atlas-${vrs}.tar.gz -C ${LIB_DIR}/atlas + cd ${LIB_DIR}/atlas/atlas* + echo "cd `pwd`" + run_cmd "mkdir build; cd build" + run_cmd "cmake ../ -DCMAKE_INSTALL_PREFIX=${LIB_DIR} -DCMAKE_PREFIX_PATH=${LIB_DIR}" + run_cmd "make ${MAKE_ARGS} > atlas.make.log 2>&1" + run_cmd "make ${MAKE_ARGS} install > atlas.make_install.log 2>&1" + +fi # Compile HDF # Depends on jpeg @@ -717,7 +799,7 @@ cd ${MET_DIR}/MET* if [ -z ${MET_BUFRLIB} ]; then export MET_BUFRLIB=${LIB_DIR}/lib - export BUFRLIB_NAME=-lbufr + export BUFRLIB_NAME=-lbufr_4 fi if [ -z ${MET_GRIB2CLIB} ]; then @@ -726,7 +808,7 @@ if [ -z ${MET_GRIB2CLIB} ]; then export LIB_JASPER=${LIB_DIR}/lib export LIB_LIBPNG=${LIB_DIR}/lib export LIB_Z=${LIB_DIR}/lib - export GRIB2CLIB_NAME=-lgrib2c + export GRIB2CLIB_NAME=-lg2c fi if [ -z ${MET_NETCDF} ]; then @@ -754,16 +836,12 @@ fi # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html # ${parameter:+word} # If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted. -export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_DIR}/lib:${MET_PROJ:+:$MET_PROJ/lib64}${LIB_DIR}/lib${MET_NETCDF:+:$MET_NETCDF/lib}${MET_HDF5:+:$MET_HDF5/lib}${MET_BUFRLIB:+:$MET_BUFRLIB}${MET_GRIB2CLIB:+:$MET_GRIB2CLIB}${MET_PYTHON_LIB:+:$MET_PYTHON_LIB}${MET_GSL:+:$MET_GSL/lib}${ADDTL_DIR:+:$ADDTL_DIR}" +export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_DIR}/lib:${MET_PROJ:+:$MET_PROJ/lib64}:${LIB_DIR}/lib${MET_NETCDF:+:$MET_NETCDF/lib}${MET_HDF5:+:$MET_HDF5/lib}${MET_BUFRLIB:+:$MET_BUFRLIB}${MET_GRIB2CLIB:+:$MET_GRIB2CLIB}${MET_PYTHON_LIB:+:$MET_PYTHON_LIB}${MET_GSL:+:$MET_GSL/lib}${ADDTL_DIR:+:$ADDTL_DIR}" export LDFLAGS="${LDFLAGS} -Wl,-rpath,${LIB_JASPER:+$LIB_JASPER}${LIB_LIBPNG:+:$LIB_PNG}${LIB_Z:+$LIB_Z}" export LDFLAGS="${LDFLAGS} ${LIB_JASPER:+-L$LIB_JASPER} ${LIB_LIBPNG:+-L$LIB_LIBPNG} ${MET_HDF5:+-L$MET_HDF5/lib} ${ADDTL_DIR:+-L$ADDTL_DIR}" export LIBS="${LIBS} -lhdf5_hl -lhdf5 -lz -ltiff" export MET_FONT_DIR=${TEST_BASE}/fonts -if [ "${SET_D64BIT}" = "TRUE" ]; then - export CFLAGS="-D__64BIT__" - export CXXFLAGS="-D__64BIT__" -fi echo "MET Configuration settings..." printenv | egrep "^MET_" | sed -r 's/^/export /g' @@ -781,6 +859,10 @@ if [[ ! -z ${MET_FREETYPEINC} && ! -z ${MET_FREETYPELIB} && \ configure_cmd="${configure_cmd} --enable-mode_graphics" fi +if [[ ! -z $MET_ECKIT && ! -z $MET_ATLAS ]]; then + configure_cmd="${configure_cmd} --enable-ugrid" +fi + if [[ ! -z $MET_HDF && ! -z $MET_HDFEOS ]]; then configure_cmd="${configure_cmd} --enable-modis --enable-lidar2nc" fi diff --git a/internal/scripts/installation/config/install_met_env.derecho b/internal/scripts/installation/config/install_met_env.derecho new file mode 100644 index 0000000000..5ad11f3eb7 --- /dev/null +++ b/internal/scripts/installation/config/install_met_env.derecho @@ -0,0 +1,38 @@ +module load ncarenv/23.06 +module load intel-oneapi/2023.0.0 +module load cmake/3.26.3 +module load hdf5/1.12.2 +module load netcdf/4.9.2 + +export TEST_BASE=/glade/p/ral/jntp/MET/MET_releases/12.0.0 +export COMPILER=intel-oneapi_2023.0.0 +export MET_SUBDIR=${TEST_BASE} +export MET_TARBALL=v12.0.0.tar.gz +export USE_MODULES=TRUE +export MET_PYTHON=/glade/p/ral/jntp/MET/METplus/miniconda/miniconda3/envs/metplus_v5.1_py3.10 +export MET_PYTHON_CC=-I${MET_PYTHON}/include/python3.10 +export MET_PYTHON_LD=`${MET_PYTHON}/bin/python3-config --ldflags --embed` +export MET_NETCDF=/glade/u/apps/derecho/23.06/spack/opt/spack/netcdf/4.9.2/oneapi/2023.0.0/iijr +export MET_HDF5=/glade/u/apps/derecho/23.06/spack/opt/spack/hdf5/1.12.2/oneapi/2023.0.0/d6xa +export ADDTL_DIR=/usr/lib64 +export EXTERNAL_LIBS=${TEST_BASE}/external_libs +#export MET_PROJ=${EXTERNAL_LIBS} +#export LIB_TIFF=${ADDTL_DIR}/libtiff.so.5 +export COMPILE_ECKIT=1 +export COMPILE_ATLAS=1 +#export MET_ECKIT=${EXTERNAL_LIBS} +#export MET_ATLAS=${EXTERNAL_LIBS} +#export MET_GSL=${EXTERNAL_LIBS} +#export MET_BUFRLIB=${EXTERNAL_LIBS} +#export BUFRLIB_NAME=-lbufr_4 +#export MET_GRIB2CLIB=${EXTERNAL_LIBS}/lib64 +#export MET_GRIB2CINC=${EXTERNAL_LIBS}/include +#export GRIB2CLIB_NAME=-lg2c +#export LIB_JASPER=${EXTERNAL_LIBS}/lib64 +#export LIB_LIBPNG=${EXTERNAL_LIBS}/lib +#export LIB_Z=${EXTERNAL_LIBS}/lib +export MAKE_ARGS=-j +#export CFLAGS="-Wall -g" +#export CXXFLAGS="-Wall -g" +#export CXXFLAGS="-std=c++11" +