Skip to content

Commit c52c492

Browse files
authored
Merge pull request #118 from Parallel-NetCDF/openmpi_action
github action: build openmpi from source
2 parents 72cd7a6 + a59ab71 commit c52c492

File tree

2 files changed

+95
-22
lines changed

2 files changed

+95
-22
lines changed

.github/workflows/mac_openmpi.yml

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ on:
2222
- 'docs/*'
2323
- 'test/test_installed/*'
2424

25+
env:
26+
OPENMPI_VERSION: 5.0.2
27+
2528
jobs:
2629
build:
2730
runs-on: macos-latest
@@ -30,13 +33,52 @@ jobs:
3033
- uses: actions/checkout@v3
3134
- name: Set up dependencies
3235
run: |
33-
brew install gcc automake autoconf libtool m4 open-mpi zlib
34-
echo "---- location of OpenMPI C compiler ----"
35-
which mpicc
36+
brew install gcc
37+
which gcc
38+
gcc --version
39+
ls -l /usr/local/bin/gfortran*
40+
version=12
41+
ln -fs /usr/local/bin/gfortran-${version} /usr/local/bin/gfortran
42+
ln -fs /usr/local/bin/gcc-${version} /usr/local/bin/gcc
43+
ln -fs /usr/local/bin/g++-${version} /usr/local/bin/g++
44+
# link lib dir for previous GCC versions to avoid missing .dylib issues
45+
for (( i=12; i>4; i-- ))
46+
do
47+
gcc_lib_path="/usr/local/opt/gcc/lib/gcc/$i"
48+
if [ -d $gcc_lib_path ]; then
49+
echo "found $gcc_lib_path"
50+
for (( j=$i; j>4; j-- ))
51+
do
52+
ln -fs /usr/local/opt/gcc/lib/gcc/$i /usr/local/opt/gcc/lib/gcc/$j
53+
done
54+
break
55+
fi
56+
done
57+
which gfortran
58+
gfortran --version
59+
brew install automake autoconf libtool m4
60+
- name: Build OPENMPI
61+
run: |
62+
cd ${GITHUB_WORKSPACE}
63+
rm -rf OPENMPI ; mkdir OPENMPI ; cd OPENMPI
64+
VER_MAJOR=${OPENMPI_VERSION%.*}
65+
wget -q https://download.open-mpi.org/release/open-mpi/v${VER_MAJOR}/openmpi-${OPENMPI_VERSION}.tar.gz
66+
gzip -dc openmpi-${OPENMPI_VERSION}.tar.gz | tar -xf -
67+
cd openmpi-${OPENMPI_VERSION}
68+
./configure --prefix=${GITHUB_WORKSPACE}/OPENMPI \
69+
--silent \
70+
--with-io-romio-flags="--with-file-system=ufs" \
71+
--with-pmix=internal \
72+
--with-libevent=internal \
73+
CC=gcc \
74+
FC=gfortran \
75+
FFLAGS=-fallow-argument-mismatch \
76+
FCFLAGS=-fallow-argument-mismatch
77+
make -s LIBTOOLFLAGS=--silent V=1 -j 8 install > qout 2>&1
78+
make -s -j 8 distclean >> qout 2>&1
3679
- name: Build PnetCDF
3780
run: |
3881
cd ${GITHUB_WORKSPACE}
39-
export TMPDIR=/tmp
4082
autoreconf -i
4183
mkdir -p pnetcdf_output
4284
./configure --enable-option-checking=fatal \
@@ -47,7 +89,8 @@ jobs:
4789
--enable-shared \
4890
--enable-thread-safe \
4991
--with-pthread \
50-
TESTMPIRUN="mpiexec --oversubscribe -n NP" \
92+
--with-mpi=${GITHUB_WORKSPACE}/OPENMPI \
93+
TESTMPIRUN="${GITHUB_WORKSPACE}/OPENMPI/bin/mpiexec --oversubscribe -n NP" \
5194
TESTOUTDIR=${GITHUB_WORKSPACE}/pnetcdf_output
5295
make -j 8 tests
5396
- name: Print config.log
@@ -57,7 +100,6 @@ jobs:
57100
- name: make check
58101
run: |
59102
cd ${GITHUB_WORKSPACE}
60-
export TMPDIR=/tmp
61103
make check
62104
- name: Print test log files
63105
if: ${{ always() }}
@@ -74,17 +116,16 @@ jobs:
74116
- name: make ptests
75117
run: |
76118
cd ${GITHUB_WORKSPACE}
77-
export TMPDIR=/tmp
78119
make ptests
79120
- name: make distcheck
80121
run: |
81122
cd ${GITHUB_WORKSPACE}
82-
export TMPDIR=/tmp
83-
make -j 8 distcheck DISTCHECK_CONFIGURE_FLAGS="--silent"
123+
make -j 8 distcheck DISTCHECK_CONFIGURE_FLAGS="--silent --with-mpi=${GITHUB_WORKSPACE}/OPENMPI"
84124
- name: Cleanup
85125
if: ${{ always() }}
86126
run: |
87127
cd ${GITHUB_WORKSPACE}
88128
make -s distclean
89-
rm -rf pnetcdf_output
129+
rm -rf ${GITHUB_WORKSPACE}/pnetcdf_output
130+
rm -rf ${GITHUB_WORKSPACE}/OPENMPI
90131

.github/workflows/ubuntu_openmpi.yml

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ on:
1818
- 'docs/*'
1919
- 'test/test_installed/*'
2020

21+
env:
22+
OPENMPI_VERSION: 5.0.2
23+
2124
jobs:
2225
build:
2326
runs-on: ubuntu-latest
@@ -28,27 +31,55 @@ jobs:
2831
run: |
2932
sudo apt-get update
3033
sudo apt-get install automake autoconf libtool libtool-bin m4
31-
# zlib
32-
sudo apt-get install zlib1g-dev
33-
# mpi
34-
sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev
35-
echo "---- location of OpenMPI C compiler ----"
36-
which mpicc
34+
# install gfortran
35+
version=12
36+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
37+
sudo apt-get update
38+
sudo apt-get install -y gcc-${version} gfortran-${version}
39+
sudo update-alternatives \
40+
--install /usr/bin/gcc gcc /usr/bin/gcc-${version} 100 \
41+
--slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${version} \
42+
--slave /usr/bin/gcov gcov /usr/bin/gcov-${version}
43+
echo "---- gcc/gfortran version ------------------------------"
44+
which gcc
45+
which gfortran
46+
gcc --version
47+
gfortran --version
48+
- name: Build OPENMPI
49+
run: |
50+
cd ${GITHUB_WORKSPACE}
51+
echo "Install OPENMPI ${OPENMPI_VERSION} in ${GITHUB_WORKSPACE}/OPENMPI"
52+
rm -rf OPENMPI ; mkdir OPENMPI ; cd OPENMPI
53+
VER_MAJOR=${OPENMPI_VERSION%.*}
54+
wget -q https://download.open-mpi.org/release/open-mpi/v${VER_MAJOR}/openmpi-${OPENMPI_VERSION}.tar.gz
55+
gzip -dc openmpi-${OPENMPI_VERSION}.tar.gz | tar -xf -
56+
cd openmpi-${OPENMPI_VERSION}
57+
./configure --prefix=${GITHUB_WORKSPACE}/OPENMPI \
58+
--silent \
59+
--with-io-romio-flags="--with-file-system=ufs" \
60+
CC=gcc \
61+
FC=gfortran \
62+
FFLAGS=-fallow-argument-mismatch \
63+
FCFLAGS=-fallow-argument-mismatch
64+
make -s LIBTOOLFLAGS=--silent V=1 -j 4 install > qout 2>&1
65+
make -s -j 4 distclean >> qout 2>&1
3766
- name: Build PnetCDF
3867
run: |
3968
cd ${GITHUB_WORKSPACE}
4069
autoreconf -i
41-
mkdir -p /dev/shm/pnetcdf_output
42-
./configure --enable-option-checking=fatal \
70+
mkdir -p pnetcdf_output
71+
./configure --prefix=${GITHUB_WORKSPACE}/PnetCDF \
72+
--enable-option-checking=fatal \
4373
--enable-profiling \
4474
pnc_ac_debug=yes \
4575
--enable-burst_buffering \
4676
--enable-subfiling \
4777
--enable-shared \
4878
--enable-thread-safe \
4979
--with-pthread \
50-
TESTMPIRUN="mpiexec --oversubscribe -n NP" \
51-
TESTOUTDIR=/dev/shm/pnetcdf_output
80+
--with-mpi=${GITHUB_WORKSPACE}/OPENMPI \
81+
TESTMPIRUN="${GITHUB_WORKSPACE}/OPENMPI/bin/mpiexec --oversubscribe -n NP" \
82+
TESTOUTDIR=${GITHUB_WORKSPACE}/pnetcdf_output
5283
make -j 8 tests
5384
- name: Print config.log
5485
if: ${{ always() }}
@@ -77,11 +108,12 @@ jobs:
77108
- name: make distcheck
78109
run: |
79110
cd ${GITHUB_WORKSPACE}
80-
make -j 8 distcheck DISTCHECK_CONFIGURE_FLAGS="--silent TESTOUTDIR=/dev/shm/pnetcdf_output"
111+
make -j 8 distcheck DISTCHECK_CONFIGURE_FLAGS="--silent --with-mpi=${GITHUB_WORKSPACE}/OPENMPI"
81112
- name: Cleanup
82113
if: ${{ always() }}
83114
run: |
84115
cd ${GITHUB_WORKSPACE}
85116
make -s distclean
86-
rm -rf /dev/shm/pnetcdf_output
117+
rm -rf ${GITHUB_WORKSPACE}/pnetcdf_output
118+
rm -rf ${GITHUB_WORKSPACE}/OPENMPI
87119

0 commit comments

Comments
 (0)