Use PETSc version of METIS in Spack #3261
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Test (macOS) | |
| permissions: | |
| contents: read | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Filter to allow skipping the test if no relevant changes occurred. | |
| filter: | |
| runs-on: macos-latest | |
| outputs: | |
| test: ${{ steps.filter.outputs.test }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dorny/paths-filter@v4 | |
| id: filter | |
| with: | |
| filters: | | |
| test: | |
| - 'palace/**' | |
| - 'cmake/**' | |
| - 'extern/**' | |
| - 'examples/**' | |
| - 'test/examples/**' | |
| - 'test/unit/**' | |
| - '.github/workflows/build-and-test-macos.yml' | |
| build-and-test-macos: | |
| needs: filter | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: # Pairwise testing (from allpairspy) | |
| # Failing configurations currently disabled pending investigation | |
| # - compiler: gcc | |
| # mpi: mpich | |
| # math-libs: openblas | |
| # build-shared: shared | |
| # with-64bit-int: int64 | |
| # with-openmp: openmp | |
| # with-eigensolver: slepc | |
| # with-solver: superlu | |
| - compiler: clang | |
| mpi: openmpi | |
| math-libs: armpl | |
| build-shared: static | |
| with-64bit-int: int32 | |
| with-openmp: serial | |
| with-eigensolver: arpack | |
| with-solver: strumpack | |
| # - compiler: clang | |
| # mpi: mpich | |
| # math-libs: armpl | |
| # build-shared: shared | |
| # with-64bit-int: int32 | |
| # with-openmp: openmp | |
| # with-eigensolver: arpack | |
| # with-solver: mumps | |
| - compiler: gcc | |
| mpi: openmpi | |
| math-libs: openblas | |
| build-shared: static | |
| with-64bit-int: int64 | |
| with-openmp: serial | |
| with-eigensolver: slepc | |
| with-solver: mumps | |
| - compiler: gcc | |
| mpi: openmpi | |
| math-libs: armpl | |
| build-shared: shared | |
| with-64bit-int: int64 | |
| with-openmp: serial | |
| with-eigensolver: arpack | |
| with-solver: superlu | |
| - compiler: clang | |
| mpi: mpich | |
| math-libs: openblas | |
| build-shared: static | |
| with-64bit-int: int32 | |
| with-openmp: openmp | |
| with-eigensolver: slepc | |
| with-solver: strumpack | |
| - compiler: clang | |
| mpi: mpich | |
| math-libs: openblas | |
| build-shared: static | |
| with-64bit-int: int64 | |
| with-openmp: serial | |
| with-eigensolver: arpack | |
| with-solver: superlu | |
| # - compiler: gcc | |
| # mpi: openmpi | |
| # math-libs: armpl | |
| # build-shared: shared | |
| # with-64bit-int: int32 | |
| # with-openmp: openmp | |
| # with-eigensolver: slepc | |
| # with-solver: strumpack | |
| # - compiler: gcc | |
| # mpi: openmpi | |
| # math-libs: armpl | |
| # build-shared: shared | |
| # with-64bit-int: int32 | |
| # with-openmp: openmp | |
| # with-eigensolver: slepc | |
| # with-solver: superlu | |
| # - compiler: gcc | |
| # mpi: openmpi | |
| # math-libs: armpl | |
| # build-shared: shared | |
| # with-64bit-int: int64 | |
| # with-openmp: openmp | |
| # with-eigensolver: slepc | |
| # with-solver: strumpack | |
| runs-on: macos-latest-xlarge | |
| steps: | |
| - uses: actions/checkout@v6 | |
| if: needs.filter.outputs.test == 'true' | |
| with: | |
| submodules: 'recursive' | |
| - uses: julia-actions/setup-julia@v2 | |
| if: needs.filter.outputs.test == 'true' | |
| with: | |
| version: '1' | |
| - uses: julia-actions/cache@v3 | |
| if: needs.filter.outputs.test == 'true' | |
| - name: Configure Open MPI | |
| if: needs.filter.outputs.test == 'true' && matrix.mpi == 'openmpi' | |
| run: | | |
| brew install openmpi | |
| - name: Configure MPICH | |
| if: needs.filter.outputs.test == 'true' && matrix.mpi == 'mpich' | |
| run: | | |
| brew install mpich | |
| - name: Install math libraries (OpenBLAS) | |
| if: needs.filter.outputs.test == 'true' && matrix.math-libs == 'openblas' | |
| run: | | |
| brew install openblas | |
| - name: Install OpenMP | |
| if: needs.filter.outputs.test == 'true' && matrix.with-openmp == 'openmp' | |
| run: | | |
| brew install libomp | |
| echo "CPATH=/opt/homebrew/opt/libomp/include:$CPATH" >> $GITHUB_ENV | |
| echo "LIBRARY_PATH=/opt/homebrew/opt/libomp/lib:$LIBRARY_PATH" >> $GITHUB_ENV | |
| - name: Install math libraries (ARMPL) | |
| if: needs.filter.outputs.test == 'true' && matrix.math-libs == 'armpl' | |
| run: | | |
| wget -q https://developer.arm.com/-/cdn-downloads/permalink/Arm-Performance-Libraries/Version_24.10/arm-performance-libraries_24.10_macOS.tgz | |
| tar -zxvf arm-performance-libraries*.tgz && rm arm-performance-libraries*.tgz | |
| hdiutil attach armpl_24.10_flang-new_clang_19.dmg -nobrowse -quiet | |
| sudo /Volumes/armpl_24.10_flang-new_clang_19_installer/armpl* -y | |
| ls /opt/arm/ | |
| echo "ARMPL_DIR=/opt/arm/armpl_24.10_flang-new_clang_19" >> $GITHUB_ENV | |
| echo "DYLD_LIBRARY_PATH=/opt/arm/armpl_24.10_flang-new_clang_19/lib:${DYLD_LIBRARY_PATH:+${DYLD_LIBRARY_PATH}:}" >> $GITHUB_ENV | |
| hdiutil detach "/Volumes/armpl_24.10_flang-new_clang_19_installer" -quiet | |
| # We have to upgrade CMake because the bundled one has a bug with | |
| # FindMPI that prevents it from finding MPI when compiling with GNU | |
| # compilers. | |
| - name: Setup cmake | |
| if: needs.filter.outputs.test == 'true' | |
| uses: jwlawson/actions-setup-cmake@v2 | |
| with: | |
| cmake-version: '3.31.8' | |
| - name: Build Palace | |
| if: needs.filter.outputs.test == 'true' | |
| env: | |
| CMAKE_BUILD_TYPE: Release | |
| NUM_PROC_BUILD_MAX: '32' | |
| run: | | |
| # Configure environment | |
| if [[ "${{ matrix.compiler }}" == 'clang' ]]; then | |
| export CC=$(brew --prefix llvm@18)/bin/clang | |
| export CXX=$(brew --prefix llvm@18)/bin/clang++ | |
| export FC=gfortran-15 | |
| elif [[ "${{ matrix.compiler }}" == 'gcc' ]]; then | |
| export CC=gcc-15 | |
| export CXX=g++-15 | |
| export FC=gfortran-15 | |
| fi | |
| if [[ "${{ matrix.math-libs }}" == 'openblas' ]]; then | |
| export OPENBLAS_DIR=$(brew --prefix openblas) | |
| fi | |
| if [[ "${{ matrix.math-libs }}" == 'armpl' ]]; then | |
| export ARMPL_DIR=${ARMPL_DIR} | |
| export DYLD_LIBRARY_PATH=$ARMPL_DIR/lib:${DYLD_LIBRARY_PATH:-} | |
| 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 (with unit tests) | |
| mkdir palace-build && cd palace-build | |
| cmake .. \ | |
| -DCMAKE_INSTALL_PREFIX=$(pwd)/../palace-install \ | |
| -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 \ | |
| -DPALACE_MFEM_USE_EXCEPTIONS=ON | |
| make -j$NUM_PROC_BUILD palace-tests | |
| - name: Run unit tests | |
| if: needs.filter.outputs.test == 'true' | |
| timeout-minutes: 5 | |
| env: | |
| NUM_PROC_TEST_MAX: '2' | |
| run: | | |
| # Configure environment | |
| if [[ "${{ matrix.with-openmp }}" == 'openmp' ]]; then | |
| export OMP_NUM_THREADS=2 | |
| else | |
| export OMP_NUM_THREADS=1 | |
| fi | |
| export DYLD_LIBRARY_PATH="$(pwd)/palace-install/lib:$DYLD_LIBRARY_PATH" | |
| cd $(pwd)/palace-build/palace-build/test/unit | |
| # Run Serial tests | |
| ./palace-unit-tests --skip-benchmarks | |
| # Run Parallel tests | |
| mpirun -np $NUM_PROC_TEST_MAX ./palace-unit-tests --skip-benchmarks | |
| - name: Run regression tests for examples/ | |
| if: needs.filter.outputs.test == 'true' | |
| timeout-minutes: 40 | |
| env: | |
| NUM_PROC_TEST_MAX: '8' | |
| run: | | |
| # Configure environment | |
| export NUM_PROC_TEST=$(nproc 2> /dev/null || sysctl -n hw.ncpu) | |
| if [[ "$NUM_PROC_TEST" -gt "$NUM_PROC_TEST_MAX" ]]; then | |
| NUM_PROC_TEST=$NUM_PROC_TEST_MAX | |
| fi | |
| if [[ "${{ matrix.with-openmp }}" == 'openmp' ]]; then | |
| NUM_PROC_TEST=$(( NUM_PROC_TEST / 2 )) | |
| export OMP_NUM_THREADS=2 | |
| else | |
| export OMP_NUM_THREADS=1 | |
| fi | |
| export PATH=$(pwd)/palace-install/bin:$PATH | |
| # Run tests | |
| julia --project=test/examples -e 'using Pkg; Pkg.instantiate()' | |
| julia --project=test/examples --color=yes test/examples/runtests.jl |