Skip to content

Commit f71c4f0

Browse files
committed
ECLand: Add manual netcdf build for Intel
1 parent 0c6d1e0 commit f71c4f0

File tree

4 files changed

+194
-2
lines changed

4 files changed

+194
-2
lines changed

.github/tools/install-hdf5.sh

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env bash
2+
3+
version=1.14.4-3
4+
5+
TEMPORARY_FILES="${TMPDIR:-/tmp}"
6+
export HDF5_INSTALL_DIR=$(pwd)/hdf5-install
7+
while [ $# != 0 ]; do
8+
case "$1" in
9+
"--prefix")
10+
export HDF5_INSTALL_DIR="$2"; shift
11+
;;
12+
"--tmpdir")
13+
TEMPORARY_FILES="$2"; shift
14+
;;
15+
"--version")
16+
version="$2"; shift
17+
;;
18+
*)
19+
echo "Unrecognized argument '$1'"
20+
exit 1
21+
;;
22+
esac
23+
shift
24+
done
25+
26+
HDF5_MIRROR=https://support.hdfgroup.org/ftp/HDF5/releases
27+
HDF5_VERSION=${version}
28+
29+
# Pick out version parts separated by '.'
30+
VERSION_PARTS=($(echo ${HDF5_VERSION} | tr "." "\n"))
31+
# Major version, e.g., 1.14
32+
MAJOR_VERSION=${VERSION_PARTS[0]}.${VERSION_PARTS[1]}
33+
34+
# Minor version parts, including patch level (if any), e.g., 3 or 4-3
35+
MINOR_VERSION_PARTS=($(echo ${VERSION_PARTS[2]} | tr "-" "\n"))
36+
37+
# Minor version without patch level
38+
MINOR_VERSION=${MINOR_VERSION_PARTS[0]}
39+
40+
URL=${HDF5_MIRROR}/hdf5-${MAJOR_VERSION}/hdf5-${MAJOR_VERSION}.${MINOR_VERSION}/src/hdf5-${HDF5_VERSION}.tar.gz
41+
FOLDER=hdf5-${HDF5_VERSION}
42+
43+
if [ ! -d "${TEMPORARY_FILES}/${FOLDER}" ]; then
44+
echo "Downloading ${TEMPORARY_FILES}/${FOLDER} from URL [${URL}]"
45+
mkdir -p ${TEMPORARY_FILES}
46+
curl --location \
47+
"${URL}" | tar zx -C "${TEMPORARY_FILES}"
48+
else
49+
echo "Download already present in ${TEMPORARY_FILES}/${FOLDER}"
50+
fi
51+
52+
mkdir -p ${TEMPORARY_FILES}/build-${FOLDER} && cd ${TEMPORARY_FILES}/build-${FOLDER}
53+
rm -rf ./*
54+
cmake -G Ninja ${TEMPORARY_FILES}/${FOLDER} -DHDF5_BUILD_FORTRAN=ON -DHDF5_BUILD_HL_LIB=ON -DBUILD_TESTING=OFF
55+
cmake --build . --config Release
56+
cmake --install . --prefix "${HDF5_INSTALL_DIR}"

.github/tools/install-netcdf-c.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env bash
2+
3+
version=4.9.2
4+
5+
TEMPORARY_FILES="${TMPDIR:-/tmp}"
6+
export NETCDF_INSTALL_DIR=$(pwd)/netcdf-install
7+
while [ $# != 0 ]; do
8+
case "$1" in
9+
"--prefix")
10+
export NETCDF_INSTALL_DIR="$2"; shift
11+
;;
12+
"--tmpdir")
13+
TEMPORARY_FILES="$2"; shift
14+
;;
15+
"--version")
16+
version="$2"; shift
17+
;;
18+
"--hdf5-root")
19+
export HDF5_ROOT="$2"; shift
20+
;;
21+
*)
22+
echo "Unrecognized argument '$1'"
23+
exit 1
24+
;;
25+
esac
26+
shift
27+
done
28+
29+
NETCDF_MIRROR=https://downloads.unidata.ucar.edu/netcdf-c/
30+
NETCDF_VERSION=${version}
31+
32+
URL=${NETCDF_MIRROR}/${NETCDF_VERSION}/netcdf-c-${NETCDF_VERSION}.tar.gz
33+
FOLDER=netcdf-c-${NETCDF_VERSION}
34+
35+
if [ ! -d "${TEMPORARY_FILES}/${FOLDER}" ]; then
36+
echo "Downloading ${TEMPORARY_FILES}/${FOLDER} from URL [${URL}]"
37+
mkdir -p ${TEMPORARY_FILES}
38+
curl --location \
39+
"${URL}" | tar zx -C "${TEMPORARY_FILES}"
40+
else
41+
echo "Download already present in ${TEMPORARY_FILES}/${FOLDER}"
42+
fi
43+
44+
mkdir -p ${TEMPORARY_FILES}/build-${FOLDER} && cd ${TEMPORARY_FILES}/build-${FOLDER}
45+
rm -rf ./*
46+
cmake -G Ninja ${TEMPORARY_FILES}/${FOLDER} \
47+
-DHDF5_DIR=${HDF5_ROOT}/cmake -DCMAKE_INSTALL_PREFIX="${NETCDF_INSTALL_DIR}" \
48+
-DENABLE_TESTS=OFF
49+
cmake --build . --config Release
50+
cmake --install .
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/usr/bin/env bash
2+
3+
version=4.6.1
4+
5+
TEMPORARY_FILES="${TMPDIR:-/tmp}"
6+
export NETCDF_INSTALL_DIR=$(pwd)/netcdf-install
7+
while [ $# != 0 ]; do
8+
case "$1" in
9+
"--prefix")
10+
export NETCDF_INSTALL_DIR="$2"; shift
11+
;;
12+
"--tmpdir")
13+
TEMPORARY_FILES="$2"; shift
14+
;;
15+
"--version")
16+
version="$2"; shift
17+
;;
18+
"--netcdf-root")
19+
export NETCDF_ROOT="$2"; shift
20+
;;
21+
*)
22+
echo "Unrecognized argument '$1'"
23+
exit 1
24+
;;
25+
esac
26+
shift
27+
done
28+
29+
NETCDF_MIRROR=https://downloads.unidata.ucar.edu/netcdf-fortran/
30+
NETCDF_VERSION=${version}
31+
32+
URL=${NETCDF_MIRROR}/${NETCDF_VERSION}/netcdf-fortran-${NETCDF_VERSION}.tar.gz
33+
FOLDER=/netcdf-fortran-${NETCDF_VERSION}
34+
35+
if [ ! -d "${TEMPORARY_FILES}/${FOLDER}" ]; then
36+
echo "Downloading ${TEMPORARY_FILES}/${FOLDER} from URL [${URL}]"
37+
mkdir -p ${TEMPORARY_FILES}
38+
curl --location \
39+
"${URL}" | tar zx -C "${TEMPORARY_FILES}"
40+
else
41+
echo "Download already present in ${TEMPORARY_FILES}/${FOLDER}"
42+
fi
43+
44+
45+
mkdir -p ${TEMPORARY_FILES}/build-${FOLDER} && cd ${TEMPORARY_FILES}/build-${FOLDER}
46+
rm -rf ./*
47+
NETCDF_LIB_DIR="$(${NETCDF_ROOT}/bin/nc-config --libdir)"
48+
cmake -G Ninja ${TEMPORARY_FILES}/${FOLDER} \
49+
-DnetCDF_LIBRARIES="${NETCDF_LIB_DIR}/libnetcdf.so" -DnetCDF_INCLUDE_DIR="${NETCDF_ROOT}/include" \
50+
-DENABLE_TESTS=OFF -DCMAKE_INSTALL_PREFIX="${NETCDF_INSTALL_DIR}"
51+
cmake --build . --config Release
52+
cmake --install .

.github/workflows/build.yml

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,16 @@ jobs:
107107
echo "SDKROOT=$(xcrun --show-sdk-path)" >> $GITHUB_ENV
108108
brew install ninja
109109
brew install libomp
110-
brew install netcdf-fortran
110+
brew install libaec
111111
brew install coreutils
112+
brew install netcdf-fortran
112113
else
113114
sudo apt-get update
114-
sudo apt-get install ninja-build
115+
sudo apt-get install libaec-dev
116+
sudo apt-get install ninja-build libcurl4-openssl-dev
117+
fi
118+
119+
if [[ "${{ matrix.compiler }}" =~ gnu ]]; then
115120
sudo apt-get install libnetcdff-dev
116121
fi
117122
@@ -180,6 +185,35 @@ jobs:
180185
# Add mpirun to path for testing
181186
[ -z ${MPI_HOME+x} ] || echo "${MPI_HOME}/bin" >> $GITHUB_PATH
182187
188+
- name: Install HDF5
189+
if: contains( matrix.compiler, 'intel' )
190+
run: |
191+
if [[ -f ${{ env.DEPS_DIR }}/hdf5/lib/libhdf5.settings ]]; then
192+
echo "::debug::HDF5 restored from cache"
193+
else
194+
${ECLAND_TOOLS}/install-hdf5.sh --prefix ${{ env.DEPS_DIR }}/hdf5
195+
fi
196+
echo "HDF5_ROOT=${{ env.DEPS_DIR }}/hdf5" >> $GITHUB_ENV
197+
198+
- name: Install NetCDF C
199+
if: contains( matrix.compiler, 'intel' )
200+
run: |
201+
if [[ -f ${{ env.DEPS_DIR }}/netcdf/bin/nc-config ]]; then
202+
echo "::debug::NetCDF C restored from cache"
203+
else
204+
${ECLAND_TOOLS}/install-netcdf-c.sh --prefix ${{ env.DEPS_DIR }}/netcdf --hdf5-root ${HDF5_ROOT}
205+
fi
206+
echo "NETCDF_ROOT=${{ env.DEPS_DIR }}/netcdf" >> $GITHUB_ENV
207+
208+
- name: Install NetCDF Fortran
209+
if: contains( matrix.compiler, 'intel' )
210+
run: |
211+
if [[ -f ${NETCDF_ROOT}/bin/nf-config ]]; then
212+
echo "::debug::NetCDF Fortran restored from cache"
213+
else
214+
${ECLAND_TOOLS}/install-netcdf-fortran.sh --prefix ${{ env.DEPS_DIR }}/netcdf --netcdf-root ${NETCDF_ROOT}
215+
fi
216+
183217
- name: Build & Test
184218
id: build-test
185219
uses: ecmwf-actions/build-package@v2

0 commit comments

Comments
 (0)