Skip to content

Instantly share code, notes, and snippets.

@dcasati
Last active January 17, 2025 12:30
Show Gist options
  • Save dcasati/4dca4e190c4187527b2cc8168b9649d6 to your computer and use it in GitHub Desktop.
Save dcasati/4dca4e190c4187527b2cc8168b9649d6 to your computer and use it in GitHub Desktop.
compile delft3d on rockylinux9
#!/bin/env bash
# shfmt -i 2 -ci -w
set -eox
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d461a695-6481-426f-a22f-b5644cd1fa8b/l_HPCKit_p_2024.2.1.79_offline.sh
sh ./l_HPCKit_p_2024.2.1.79_offline.sh -a --silent --cli --eula accept
# pre-requisites
apt update && apt install -y \
bison \
cmake \
file \
flex \
g++ \
gfortran \
libblosc-dev \
libcurl4-openssl-dev \
libhdf5-serial-dev
m4 \
make \
patch \
patchelf \
pkg-config \
python3 \
python3-pip \
ruby \
sqlite \
subversion \
unzip \
util-linux \
uuid-dev
#########################
# Set environment variables for compilers
export LD_LIBRARY_PATH=/opt/intel/oneapi/2024.2/lib:/opt/intel/oneapi/compiler/2024.2/lib:/home/delft3d/lib:$LD_LIBRARY_PATH
export PATH="/home/delft3d/bin:$PATH"
export MAKEFLAGS="-j $(nproc)"
##############################
# Create necessary directories
mkdir -p /home/delft3d/src &&
mkdir -p /home/delft3d/
cd /home/delft3d/src
export SRCDIR=/home/delft3d/src
##################
# Download sources
[ ! -f "zlib-1.3.1.tar.gz" ] && wget https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz -O zlib-1.3.1.tar.gz
[ ! -f "hdf5-1_10_5.tar.gz" ] && wget https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5-1_10_5.tar.gz -O hdf5-1_10_5.tar.gz
[ ! -f "v4.9.2.tar.gz" ] && wget https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz -O netcdf-c-4.9.2.tar.gz
[ ! -f "netcdf-fortran-4.6.1.tar.gz" ] && wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz -O netcdf-fortran-4.6.1.tar.gz
[ ! -f "petsc-with-docs-3.21.1.tar.gz" ] && wget https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-with-docs-3.21.1.tar.gz -O petsc-with-docs-3.21.1.tar.gz
[ ! -f "v1.14.0.tar.gz" ] && wget https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz -O googletest-1.14.0.tar.gz
[ ! -f "v2.0.0.tar.gz" ] && wget https://github.com/OSGeo/gdal/archive/refs/tags/v2.0.0.tar.gz -O gdal-2.0.0.tar.gz
[ ! -f "proj-4.9.3.tar.gz" ] && wget https://download.osgeo.org/proj/proj-4.9.3.tar.gz -O proj-4.9.3.tar.gz
#########################
# Install zlib
tar -xzvf zlib-1.3.1.tar.gz &&
cd zlib-1.3.1 &&
./configure --prefix=/home/delft3d &&
make &&
make check &&
make install &&
cd $SRCDIR
######
# hdf5
tar -xzvf hdf5-1_10_5.tar.gz &&
cd hdf5-hdf5-1_10_5 &&
./configure --with-zlib=/home/delft3d --enable-parallel --enable-fortran --prefix=/home/delft3d
make &&
make install &&
cd $SRCDIR
export FC=mpiifx
export CXX=mpiicpx
export CC=mpiicx
source /opt/intel/oneapi/setvars.sh
##################
# netcdf-c library
tar -xzvf netcdf-c-4.9.2.tar.gz &&
cd netcdf-c-4.9.2 &&
export CPPFLAGS='-I/home/delft3d/include' &&
export LDFLAGS='-L/home/delft3d/lib' &&
./configure --prefix=/home/delft3d/ --disable-libxml2 &&
make &&
make check &&
make install &&
cd $SRCDIR
########################
# netcdf fortran library
tar -xzvf netcdf-fortran-4.6.1.tar.gz &&
cd netcdf-fortran-4.6.1 &&
export CPPFLAGS='-I/home/delft3d/include' &&
export LDFLAGS='-L/home/delft3d/lib' &&
./configure --prefix=/home/delft3d/ &&
make &&
make check &&
make install &&
cd $SRCDIR
########
# petsc
tar xvzf petsc-with-docs-3.21.1.tar.gz &&
cd petsc-3.21.1 &&
./configure --prefix=/home/delft3d --download-fblaslapack=1 &&
make PETSC_DIR=/home/delft3d/src/petsc-3.21.1 PETSC_ARCH=arch-linux-c-debug all &&
make PETSC_DIR=/home/delft3d/src/petsc-3.21.1 PETSC_ARCH=arch-linux-c-debug install &&
cd $SRCDIR
############
# googletest
tar -xvzf googletest-1.14.0.tar.gz &&
cd googletest-1.14.0/ && mkdir build &&
cd build/ && cmake -DCMAKE_PREFIX_PATH=/home/delft3d -DCMAKE_INSTALL_PREFIX=/home/delft3d .. && cmake --build . && cmake --build . --target install &&
cd $SRCDIR
##################
# pro legacy 4.9.3
tar -xvzf proj-4.9.3.tar.gz &&
cd proj-4.9.3 &&
CFLAGS=-O0 ./configure --prefix=/home/delft3d &&
make &&
make check &&
make install &&
cd $SRCDIR
###################
# gdal legacy 2.0.0
tar -xvzf gdal-2.0.0.tar.gz &&
cp patches/gdal/* gdal-2.0.0/gdal/ &&
cd gdal-2.0.0/gdal
# convert from CRLF to LF
sed -i 's/\r$//' frmts/jpeg2000/jpeg2000_vsil_io.cpp
# Apply the patches
for patch in patch-*.cpp; do
echo "Applying $patch..."
patch -p0 <"$patch" | tee patch_log.txt 2>&1
done
./configure --prefix=/home/delft3d --without-jasper CFLAGS='-std=gnu89' &&
make &&
make install &&
cd $SRCDIR
#################
# Delft3D
export CC=mpiicx
export CXX=mpiicpx
export FC=mpiifx
export LD_LIBRARY_PATH="/home/delft3d/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/home/delft3d/lib64:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="/home/delft3d/lib/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/home/delft3d/lib64/pkgconfig:$PKG_CONFIG_PATH"
export C_INCLUDE_PATH="/home/delft3d/include"
export CPLUS_INCLUDE_PATH="/home/delft3d/include"
export PATH=/home/delft3d/bin:$PATH
svn checkout -r 142633 https://svn.oss.deltares.nl/repos/delft3d/trunk /home/delft3d/src/delft3d_142633
cp patches/delft3d delft3d_142633
cd delft3D_142633
# dos2unix
sed -i 's/\r$//g' src/utils_lgpl/deltares_common/packages/deltares_common_c/src/meminfo.cpp
# apply the patches
patch -p0 <patch-src-setenv.sh
patch -p0 <patch-src-cmake-CMakeLists.txt
patch -p0 <patch-src-utils_lgpl-deltares_common-packages-deltares_common_c-src-meminfo.cpp
./build.sh delft3d4 --compiler intel21
@ad-dagostini
Copy link

ad-dagostini commented Jan 17, 2025

Hi,

Thanks for sharing this code. It's quite useful and well-organized.

In your code, you considered the information from "patches/gdal" and "patches/delft3d."
Could you please share where you collected these files from?
That would be very helpful. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment