Skip to content

Commit d37fb9e

Browse files
authored
Add libraries required to build UFS-Aerosols (#252)
Add libraries required to build UFS-Aerosols
1 parent 5c73d31 commit d37fb9e

File tree

15 files changed

+460
-3
lines changed

15 files changed

+460
-3
lines changed

.github/workflows/build_ubuntu.yaml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,26 @@ jobs:
1212

1313
steps:
1414

15-
- name: Install dependencies (OpenMPI)
15+
- name: cache-mpi
1616
if: matrix.mpi == 'openmpi'
17+
id: cache-mpi
18+
uses: actions/cache@v2
19+
with:
20+
path: ~/mpi
21+
key: openmpi-4.1.1
22+
23+
- name: build-openmpi
24+
if: steps.cache-mpi.outputs.cache-hit != 'true'
1725
run: |
18-
sudo apt-get update
19-
sudo apt-get install openmpi-bin libopenmpi-dev
26+
echo "$HOME/mpi/bin" >> $GITHUB_PATH
27+
if [[ ${{ matrix.mpi }} == "openmpi" ]]; then
28+
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.1.tar.gz &> /dev/null
29+
tar -xzf openmpi-4.1.1.tar.gz
30+
cd openmpi-4.1.1
31+
./configure --prefix=$HOME/mpi --enable-mpi-fortran --enable-mpi-cxx
32+
make -j2
33+
make install
34+
fi
2035
2136
- name: Install dependencies (MPICH)
2237
if: matrix.mpi == 'mpich'

build_stack.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,11 @@ build_lib atlas
210210

211211
build_lib esmf
212212
build_lib fms
213+
build_lib cmakemodules
214+
build_lib esma_cmake
215+
build_lib gftl_shared
216+
build_lib yafyaml
217+
build_lib mapl
213218

214219
# ==============================================================================
215220
# optionally clean up

libs/build_cmakemodules.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
name="cmakemodules"
6+
repo="NOAA-EMC"
7+
version=${2:-${STACK_cmakemodules_version:-"develop"}}
8+
id=${version//\//-}
9+
10+
if $MODULES; then
11+
set +x
12+
source $MODULESHOME/init/bash
13+
module list
14+
set -x
15+
16+
prefix="${PREFIX:-"/opt/modules"}/core/$name/$id"
17+
if [[ -d $prefix ]]; then
18+
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!"; $SUDO rm -rf $prefix; $SUDO mkdir $prefix ) \
19+
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
20+
fi
21+
else
22+
prefix=${CMAKEMODULES_ROOT:-"/usr/local"}
23+
fi
24+
25+
software=$name-$id
26+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
27+
URL="https://github.com/$repo/$name.git"
28+
[[ -d $software ]] || git clone $URL $software
29+
[[ -d $software ]] && cd $software || ( echo "$software does not exist, ABORT!"; exit 1 )
30+
31+
git fetch --tags
32+
git checkout $version
33+
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
34+
35+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
36+
mkdir -p $prefix && cp -r $software/* $prefix
37+
38+
# generate modulefile from template
39+
$MODULES && update_modules core $name $id
40+
echo $name $id $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log

libs/build_esma_cmake.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
name="esma_cmake"
6+
repo="GEOS-ESM"
7+
version=${2:-${STACK_esma_cmake_version:-"main"}}
8+
id=${version//\//-}
9+
10+
if $MODULES; then
11+
set +x
12+
source $MODULESHOME/init/bash
13+
module list
14+
set -x
15+
16+
prefix="${PREFIX:-"/opt/modules"}/core/$name/$id"
17+
if [[ -d $prefix ]]; then
18+
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!"; $SUDO rm -rf $prefix; $SUDO mkdir $prefix ) \
19+
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
20+
fi
21+
else
22+
prefix=${ESMA_CMAKE_ROOT:-"/usr/local"}
23+
fi
24+
25+
software=$name-$id
26+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
27+
URL="https://github.com/$repo/$name.git"
28+
[[ -d $software ]] || git clone $URL $software
29+
[[ -d $software ]] && cd $software || ( echo "$software does not exist, ABORT!"; exit 1 )
30+
31+
git fetch --tags
32+
git checkout $version
33+
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
34+
35+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
36+
mkdir -p $prefix && cp -r $software/* $prefix
37+
38+
# generate modulefile from template
39+
$MODULES && update_modules core $name $id
40+
echo $name $id $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log

libs/build_gftl_shared.sh

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
name="gftl-shared"
6+
repo="Goddard-Fortran-Ecosystem"
7+
version=${2:-${STACK_gftl_shared_version:-"main"}}
8+
9+
# Hyphenated version used for install prefix
10+
compiler=$(echo $HPC_COMPILER | sed 's/\//-/g')
11+
id=${version//\//-}
12+
13+
if $MODULES; then
14+
set +x
15+
source $MODULESHOME/init/bash
16+
module load hpc-$HPC_COMPILER
17+
module try-load cmake
18+
module list
19+
set -x
20+
21+
prefix="${PREFIX:-"/opt/modules"}/$compiler/$name/$id"
22+
if [[ -d $prefix ]]; then
23+
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!"; $SUDO rm -rf $prefix; $SUDO mkdir $prefix ) \
24+
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
25+
fi
26+
else
27+
prefix=${GFTL_SHARED_ROOT:-"/usr/local"}
28+
fi
29+
30+
software=$name-$id
31+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
32+
URL="https://github.com/$repo/$name.git"
33+
[[ -d $software ]] || git clone $URL $software
34+
[[ -d $software ]] && cd $software || ( echo "$software does not exist, ABORT!"; exit 1 )
35+
36+
git fetch --tags
37+
git checkout $version
38+
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
39+
40+
[[ -d build ]] && $SUDO rm -rf build
41+
mkdir -p build && cd build
42+
cmake -DCMAKE_INSTALL_PREFIX=$prefix ..
43+
VERBOSE=$MAKE_VERBOSE make -j${NTHREADS:-4} install
44+
45+
# generate modulefile from template
46+
$MODULES && update_modules compiler $name $id
47+
echo $name $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log

libs/build_mapl.sh

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
name="mapl"
6+
repo="GEOS-ESM"
7+
version=${2:-${STACK_mapl_version:-"main"}}
8+
9+
# Hyphenated version used for install prefix
10+
compiler=$(echo $HPC_COMPILER | sed 's/\//-/g')
11+
mpi=$(echo $HPC_MPI | sed 's/\//-/g')
12+
id=${version//\//-}
13+
14+
if $MODULES; then
15+
set +x
16+
source $MODULESHOME/init/bash
17+
module load hpc-$HPC_COMPILER
18+
module load hpc-$HPC_MPI
19+
module try-load cmake
20+
module load esma_cmake
21+
module load cmakemodules
22+
module load ecbuild
23+
# module exports ecbuild_ROOT, but when building without modules ECBUILD_ROOT is set
24+
export ECBUILD_ROOT=$ecbuild_ROOT
25+
module load gftl-shared
26+
module load yafyaml
27+
module load netcdf
28+
module load esmf
29+
module list
30+
31+
set -x
32+
33+
prefix="${PREFIX:-"/opt/modules"}/$compiler/$mpi/$name/$id"
34+
if [[ -d $prefix ]]; then
35+
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!"; $SUDO rm -rf $prefix; $SUDO mkdir $prefix ) \
36+
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
37+
fi
38+
else
39+
prefix=${MAPL_ROOT:-"/usr/local"}
40+
export ESMFMKFILE=$ESMF_ROOT/lib/esmf.mk
41+
fi
42+
43+
export FC=$MPI_FC
44+
export CC=$MPI_CC
45+
export CXX=$MPI_CXX
46+
47+
software=$name-$id
48+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
49+
URL="https://github.com/$repo/$name.git"
50+
[[ -d $software ]] || git clone $URL $software
51+
[[ -d $software ]] && cd $software || ( echo "$software does not exist, ABORT!"; exit 1 )
52+
53+
git fetch --tags
54+
git checkout $version
55+
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
56+
57+
[[ -d build ]] && $SUDO rm -rf build
58+
mkdir -p build && cd build
59+
60+
CMAKE_OPTS=${STACK_mapl_cmake_opts:-""}
61+
62+
cmake .. \
63+
-DCMAKE_INSTALL_PREFIX=$prefix \
64+
-DCMAKE_MODULE_PATH="${ESMA_CMAKE_ROOT};${CMAKEMODULES_ROOT}/Modules;${ECBUILD_ROOT}/share/ecbuild/cmake" \
65+
-DCMAKE_BUILD_TYPE=Release \
66+
-DBUILD_WITH_FLAP=OFF \
67+
-DBUILD_WITH_PFLOGGER=OFF \
68+
-DESMA_USE_GFE_NAMESPACE=ON \
69+
-DBUILD_SHARED_MAPL=OFF \
70+
${CMAKE_OPTS}
71+
72+
VERBOSE=$MAKE_VERBOSE make -j${NTHREADS:-4} install
73+
74+
# generate modulefile from template
75+
modpath=mpi
76+
$MODULES && update_modules $modpath $name $id
77+
echo $name $id $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log

libs/build_yafyaml.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
name="yafyaml"
6+
repo="Goddard-Fortran-Ecosystem"
7+
version=${2:-${STACK_yafyaml_version:-"main"}}
8+
9+
# Hyphenated version used for install prefix
10+
compiler=$(echo $HPC_COMPILER | sed 's/\//-/g')
11+
id=${version//\//-}
12+
13+
if $MODULES; then
14+
set +x
15+
source $MODULESHOME/init/bash
16+
module load hpc-$HPC_COMPILER
17+
module try-load cmake
18+
module load gftl-shared
19+
module list
20+
set -x
21+
22+
prefix="${PREFIX:-"/opt/modules"}/$compiler/$name/$id"
23+
if [[ -d $prefix ]]; then
24+
[[ $OVERWRITE =~ [yYtT] ]] && ( echo "WARNING: $prefix EXISTS: OVERWRITING!"; $SUDO rm -rf $prefix; $SUDO mkdir $prefix ) \
25+
|| ( echo "WARNING: $prefix EXISTS, SKIPPING"; exit 1 )
26+
fi
27+
else
28+
prefix=${YAFYAML_ROOT:-"/usr/local"}
29+
fi
30+
31+
software=$name-$id
32+
cd ${HPC_STACK_ROOT}/${PKGDIR:-"pkg"}
33+
URL="https://github.com/$repo/$name.git"
34+
[[ -d $software ]] || git clone $URL $software
35+
[[ -d $software ]] && cd $software || ( echo "$software does not exist, ABORT!"; exit 1 )
36+
37+
git fetch --tags
38+
git checkout $version
39+
[[ ${DOWNLOAD_ONLY} =~ [yYtT] ]] && exit 0
40+
41+
[[ -d build ]] && $SUDO rm -rf build
42+
mkdir -p build && cd build
43+
cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH ..
44+
VERBOSE=$MAKE_VERBOSE make -j${NTHREADS:-4} install
45+
46+
# generate modulefile from template
47+
$MODULES && update_modules compiler $name $id
48+
echo $name $id $URL >> ${HPC_STACK_ROOT}/hpc-stack-contents.log
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
help([[
2+
]])
3+
4+
local pkgName = myModuleName()
5+
local pkgVersion = myModuleVersion()
6+
local pkgNameVer = myModuleFullName()
7+
8+
local hierA = hierarchyA(pkgNameVer,1)
9+
local compNameVer = hierA[1]
10+
local compNameVerD = compNameVer:gsub("/","-")
11+
12+
conflict(pkgName)
13+
14+
local opt = os.getenv("HPC_OPT") or os.getenv("OPT") or "/opt/modules"
15+
16+
local base = pathJoin(opt,compNameVerD,pkgName,pkgVersion)
17+
18+
setenv("GFTL_SHARED_ROOT", base)
19+
setenv("GFTL_ROOT", base)
20+
21+
whatis("Name: ".. pkgName)
22+
whatis("Version: " .. pkgVersion)
23+
whatis("Category: library")
24+
whatis("Description: gFTL-shared provides common gFTL containers of Fortran intrinsic types")
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
help([[
2+
]])
3+
4+
local pkgName = myModuleName()
5+
local pkgVersion = myModuleVersion()
6+
local pkgNameVer = myModuleFullName()
7+
8+
local hierA = hierarchyA(pkgNameVer,1)
9+
local compNameVer = hierA[1]
10+
local compNameVerD = compNameVer:gsub("/","-")
11+
12+
conflict(pkgName)
13+
14+
local opt = os.getenv("HPC_OPT") or os.getenv("OPT") or "/opt/modules"
15+
16+
local base = pathJoin(opt,compNameVerD,pkgName,pkgVersion)
17+
18+
setenv("YAFYAML_ROOT", base)
19+
20+
whatis("Name: ".. pkgName)
21+
whatis("Version: " .. pkgVersion)
22+
whatis("Category: library")
23+
whatis("Description: yet another Fortran (implementation of) YAML")
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
help([[
2+
]])
3+
4+
local pkgName = myModuleName()
5+
local pkgVersion = myModuleVersion()
6+
local pkgNameVer = myModuleFullName()
7+
8+
conflict(pkgName)
9+
10+
local opt = os.getenv("HPC_OPT") or os.getenv("OPT") or "/opt/modules"
11+
12+
local base = pathJoin(opt,"core",pkgName,pkgVersion)
13+
14+
setenv("CMAKEMODULES_ROOT", base)
15+
16+
whatis("Name: ".. pkgName)
17+
whatis("Version: " .. pkgVersion)
18+
whatis("Category: Software")
19+
whatis("Description: CMakeModules (A collection of CMake modules)")

0 commit comments

Comments
 (0)