Merge pull request #310 from GLVis/fixes-for-glvis-js #65
This file contains 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
# Copyright (c) 2010-2024, Lawrence Livermore National Security, LLC. Produced | |
# at the Lawrence Livermore National Laboratory. All Rights reserved. See files | |
# LICENSE and NOTICE for details. LLNL-CODE-443271. | |
# | |
# This file is part of the GLVis visualization tool and library. For more | |
# information and source code availability see https://glvis.org. | |
# | |
# GLVis is free software; you can redistribute it and/or modify it under the | |
# terms of the BSD-3 license. We welcome feedback and contributions, see file | |
# CONTRIBUTING.md for details. | |
# GLVis - an OpenGL visualization server based on the MFEM library | |
name: release | |
on: | |
push: | |
tags: | |
- v* | |
branches: | |
- master | |
workflow_dispatch: | |
env: | |
HYPRE_ARCHIVE: v2.19.0.tar.gz | |
HYPRE_TOP_DIR: hypre-2.19.0 | |
METIS_ARCHIVE: metis-4.0.3.tar.gz | |
METIS_TOP_DIR: metis-4.0.3 | |
MFEM_TOP_DIR: mfem | |
MFEM_BRANCH: master | |
jobs: | |
release-builds: | |
strategy: | |
matrix: | |
os: [macos-latest, windows-latest] | |
target: [opt] | |
mpi: [seq] | |
build-system: [cmake] | |
name: ${{ matrix.os }}-${{ matrix.build-system }}-${{ matrix.target }}-${{ matrix.mpi }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: get MPI (Linux) | |
if: matrix.os == 'ubuntu-latest' && matrix.mpi == 'par' | |
run: | | |
sudo apt-get update | |
sudo apt-get install mpich libmpich-dev | |
export MAKE_CXX_FLAG="MPICXX=mpic++" | |
# Keep the following section in case we need it again in the future, | |
# see: https://github.com/mfem/mfem/pull/3385#discussion_r1058013032 | |
# - name: Set up Homebrew | |
# if: matrix.os == 'macos-latest' && matrix.mpi == 'par' | |
# uses: Homebrew/actions/setup-homebrew@master | |
- name: get MPI (MacOS) | |
if: matrix.os == 'macos-latest' && matrix.mpi == 'par' | |
run: | | |
export HOMEBREW_NO_INSTALL_CLEANUP=1 | |
brew install openmpi | |
export MAKE_CXX_FLAG="MPICXX=mpic++" | |
# Get Hypre through cache, or build it. | |
# Install will only run on cache miss. | |
- name: cache hypre | |
if: matrix.mpi == 'par' | |
id: hypre-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.HYPRE_TOP_DIR }} | |
key: ${{ runner.os }}-build-${{ env.HYPRE_TOP_DIR }}-v2.2 | |
- name: build hypre | |
if: steps.hypre-cache.outputs.cache-hit != 'true' && matrix.mpi == 'par' | |
uses: mfem/github-actions/build-hypre@v2.4 | |
with: | |
archive: ${{ env.HYPRE_ARCHIVE }} | |
dir: ${{ env.HYPRE_TOP_DIR }} | |
build-system: make | |
# Get Metis through cache, or build it. | |
# Install will only run on cache miss. | |
- name: cache metis | |
if: matrix.mpi == 'par' | |
id: metis-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.METIS_TOP_DIR }} | |
key: ${{ runner.os }}-build-${{ env.METIS_TOP_DIR }}-v2.2 | |
- name: build metis | |
if: steps.metis-cache.outputs.cache-hit != 'true' && matrix.mpi == 'par' | |
uses: mfem/github-actions/build-metis@v2.4 | |
with: | |
archive: ${{ env.METIS_ARCHIVE }} | |
dir: ${{ env.METIS_TOP_DIR }} | |
# make generic links to libraries for MFEM install | |
# Those links are already created by build-mfem action, but not when the cache is used... | |
- name: configure links | |
if: matrix.mpi == 'par' | |
run: | | |
echo "Hypre symlink:" | |
ln -s $HYPRE_TOP_DIR hypre; | |
echo "Metis symlink:" | |
ln -s $METIS_TOP_DIR metis-4.0; | |
- name: MFEM ${{ env.MFEM_BRANCH }} commit | |
run: | | |
echo "MFEM_COMMIT=$(git ls-remote --heads https://github.com/mfem/mfem.git ${MFEM_BRANCH} | awk '{print $1;}')" >> $GITHUB_ENV | |
# Get MFEM through cache, or build it. | |
# Install will only run on cache miss. | |
- name: cache mfem | |
id: cache-mfem | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.MFEM_TOP_DIR }} | |
key: ${{ runner.os }}-build-${{ env.MFEM_TOP_DIR }}-${{ env.MFEM_COMMIT }}-${{ matrix.target }}-${{ matrix.build-system}}-v2.2 | |
# We are using the defaults of the MFEM action here, which is to use master | |
# branch. There is an implicit assumption here that mfem master hasn't | |
# changed since the 'MFEM master commit' step. | |
# Also, if we apply to MFEM build the same target as GLVis. This may be | |
# superfluous. | |
- name: build mfem | |
if: steps.cache-mfem.outputs.cache-hit != 'true' | |
uses: mfem/github-actions/build-mfem@v2.4 | |
with: | |
os: ${{ matrix.os }} | |
target: ${{ matrix.target }} | |
hypre-dir: ${{ env.HYPRE_TOP_DIR }} | |
metis-dir: ${{ env.METIS_TOP_DIR }} | |
mfem-dir: ${{ env.MFEM_TOP_DIR }} | |
mfem-branch: ${{ env.MFEM_BRANCH }} | |
build-system: ${{ matrix.build-system }} | |
mpi: ${{ matrix.mpi }} | |
# Install GLVis dependencies with package manager | |
- name: get deps (Linux) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
# We need to add a PPA for SDL 2.0.14 - fixes some initialization | |
# errors for X11 | |
sudo add-apt-repository -y ppa:savoury1/multimedia | |
sudo apt-get update | |
sudo apt-get install libfontconfig1-dev libfreetype6-dev libsdl2-dev libglew-dev libglm-dev libpng-dev | |
# - name: Set up Homebrew | |
# if: matrix.os == 'macos-latest' | |
# uses: Homebrew/actions/setup-homebrew@master | |
- name: get deps (MacOS) | |
if: matrix.os == 'macos-latest' | |
run: | | |
export HOMEBREW_NO_INSTALL_CLEANUP=1 | |
brew install fontconfig freetype sdl2 glew glm libpng | |
- name: cache deps (Windows) | |
id: cache-deps | |
uses: actions/cache@v4 | |
with: | |
path: vcpkg_cache | |
key: ${{ runner.os }}-vcpkg-v1 | |
- name: prepare binary cache location | |
if: steps.cache-deps.outputs.cache-hit != 'true' | |
run: | | |
mkdir -p vcpkg_cache | |
- name: checkout GLVis | |
uses: actions/checkout@v4 | |
with: | |
path: glvis | |
submodules: recursive | |
- name: build GLVis (cmake) | |
if: matrix.build-system == 'cmake' | |
env: | |
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg_cache | |
run: | | |
build_type="Release" | |
[[ ${{ matrix.os }} == "windows-latest" ]] \ | |
&& toolchain_file="${VCPKG_INSTALLATION_ROOT}\\scripts\\buildsystems\\vcpkg.cmake" | |
cd glvis && mkdir build && cd build | |
cmake \ | |
-D CMAKE_TOOLCHAIN_FILE:STRING=${toolchain_file} \ | |
-D CMAKE_BUILD_TYPE:STRING=${build_type} \ | |
-D ENABLE_TESTS:BOOL=TRUE \ | |
-D mfem_DIR:PATH=${GITHUB_WORKSPACE}/${MFEM_TOP_DIR}/build \ | |
-D GLVIS_BASELINE_SYS=${{ matrix.os }} \ | |
-D CMAKE_INSTALL_PREFIX=../install-${{ matrix.os }} \ | |
.. | |
cmake --build . --parallel 3 --config "${build_type}" | |
shell: bash | |
- name: package binary (Windows) | |
if: matrix.os == 'windows-latest' | |
env: | |
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }} | |
run: | | |
cd glvis/build | |
Copy-Item -Path "Release" -Destination "${Env:GLVIS_EXPORT_NAME}" -Recurse | |
- name: package binary (Mac) | |
if: matrix.os == 'macos-latest' | |
env: | |
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }} | |
run: | | |
cd glvis/build | |
make app | |
# Creates the actual relocatable bundle (copying system libraries) | |
sudo make install | |
# Fix permissions from running `make install` as root | |
cd ../install-${{ matrix.os }} | |
sudo chown -R ${USER} GLVis.app | |
# Go back to build directory | |
cd ../build | |
# Copy executable to a temporary directory | |
mkdir dmg_tmp | |
cp -a ../install-${{ matrix.os }}/GLVis.app dmg_tmp/GLVis.app | |
# Create DMG since actions/upload-artifact will clobber Unix permissions | |
hdiutil create -volname "GLVis macOS arm64" -srcfolder dmg_tmp -ov -format UDZO GLVis.dmg | |
mkdir ${GLVIS_EXPORT_NAME} | |
cp GLVis.dmg ${GLVIS_EXPORT_NAME} | |
- name: upload binary | |
uses: actions/upload-artifact@v4 | |
env: | |
GLVIS_EXPORT_NAME: glvis-${{ github.ref_name }}-${{ runner.os }}-${{ runner.arch }} | |
with: | |
name: ${{ env.GLVIS_EXPORT_NAME }} | |
path: glvis/build/${{ env.GLVIS_EXPORT_NAME }} |