Skip to content

Revert from GitHub METIS/ParMETIS distributions to PETSc forks #781

Revert from GitHub METIS/ParMETIS distributions to PETSc forks

Revert from GitHub METIS/ParMETIS distributions to PETSc forks #781

name: Build and Test (Linux, Arm64)
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-and-test-linux-arm64:
strategy:
fail-fast: false
matrix:
include: # Only a single simple build test for now
- compiler: clang
mpi: mpich
math-libs: openblas
build-shared: static
with-64bit-int: int32
with-openmp: serial
with-solver: superlu
with-eigensolver: arpack
runs-on: palace_ubuntu-latest_16-core
steps:
- uses: actions/checkout@v3
with:
submodules: 'recursive'
- name: Hardware setup, build, and test
uses: uraimo/run-on-arch-action@v2
id: runcmd
with:
arch: aarch64
distro: ubuntu_latest
env: |
CMAKE_BUILD_TYPE: Debug # Speed up builds for run-on-arch
NUM_PROC_BUILD_MAX: '32'
NUM_PROC_TEST_MAX: '8'
run: |
# Install dependencies
apt-get update -q
apt-get install -y build-essential clang cmake curl gfortran git lld \
pkg-config python3 wget
# Install MPI
if [[ "${{ matrix.mpi }}" == 'openmpi' ]]; then
apt-get install -y openmpi-bin libopenmpi-dev
elif [[ "${{ matrix.mpi }}" == 'mpich' ]]; then
apt-get install -y mpich libmpich-dev
fi
# Install math libraries (OpenBLAS)
if [[ "${{ matrix.math-libs }}" == 'openblas' ]]; then
if [[ "${{ matrix.with-openmp }}" == 'openmp' ]]; then
apt-get install -y libopenblas-openmp-dev
else
apt-get install -y libopenblas-serial-dev
fi
fi
# Install math libraries (Arm Performance Libraries)
if [[ "${{ matrix.math-libs }}" == 'armpl' ]]; then
wget https://developer.arm.com/-/media/Files/downloads/hpc/arm-performance-libraries/22-0-2/Ubuntu20.04/arm-performance-libraries_22.0.2_Ubuntu-20.04_gcc-11.2.tar
tar -xf arm-performance-libraries* && rm -rf arm-performance-libraries*.tar
./arm-performance-libraries*/arm-performance-libraries*.sh -a -i /opt/arm
export ARMPL_DIR=/opt/arm/armpl_22.0.2_gcc-11.2
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+LD_LIBRARY_PATH:}$ARMPL_DIR/lib"
fi
# Configure environment for build
if [[ "${{ matrix.compiler }}" == 'clang' ]]; then
export CC=clang
export CXX=clang++
export FC=gfortran-11
export LDFLAGS='-fuse-ld=lld'
elif [[ "${{ matrix.compiler }}" == 'gcc' ]]; then
export CC=gcc-11
export CXX=g++-11
export FC=gfortran-11
fi
export NUM_PROC_BUILD=$(nproc 2> /dev/null || sysctl -n hw.ncpu)
if [[ "$NUM_PROC_BUILD" -gt "$NUM_PROC_BUILD_MAX" ]]; then
NUM_PROC_BUILD=$NUM_PROC_BUILD_MAX
fi
[[ "${{ matrix.build-shared }}" == 'shared' ]] && BUILD_SHARED='ON' || BUILD_SHARED='OFF'
[[ "${{ matrix.with-64bit-int }}" == 'int64' ]] && WITH_INT64='ON' || WITH_INT64='OFF'
[[ "${{ matrix.with-openmp }}" == 'openmp' ]] && WITH_OPENMP='ON' || WITH_OPENMP='OFF'
[[ "${{ matrix.with-solver }}" == 'superlu' ]] && WITH_SUPERLU='ON' || WITH_SUPERLU='OFF'
[[ "${{ matrix.with-solver }}" == 'strumpack' ]] && WITH_STRUMPACK='ON' || WITH_STRUMPACK='OFF'
[[ "${{ matrix.with-solver }}" == 'mumps' ]] && WITH_MUMPS='ON' || WITH_MUMPS='OFF'
[[ "${{ matrix.with-eigensolver }}" == 'slepc' ]] && WITH_SLEPC='ON' || WITH_SLEPC='OFF'
[[ "${{ matrix.with-eigensolver }}" == 'arpack' ]] && WITH_ARPACK='ON' || WITH_ARPACK='OFF'
# Build and install
mkdir palace-build && cd palace-build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/opt/palace \
-DBUILD_SHARED_LIBS=$BUILD_SHARED \
-DPALACE_WITH_64BIT_INT=$WITH_INT64 \
-DPALACE_WITH_OPENMP=$WITH_OPENMP \
-DPALACE_WITH_SUPERLU=$WITH_SUPERLU \
-DPALACE_WITH_STRUMPACK=$WITH_STRUMPACK \
-DPALACE_WITH_MUMPS=$WITH_MUMPS \
-DPALACE_WITH_SLEPC=$WITH_SLEPC \
-DPALACE_WITH_ARPACK=$WITH_ARPACK
make -j$NUM_PROC_BUILD
# XX TODO: Disable tests for now since Julia precompilation fails
# # Install Julia
# curl -fsSL https://install.julialang.org | sh -s -- -y
# export PATH=~/.juliaup/bin:$PATH