From 3222d0cc85926576a38a47e77b44e75286ef4e3d Mon Sep 17 00:00:00 2001 From: Jordan Henderson Date: Wed, 30 Oct 2024 11:53:07 -0500 Subject: [PATCH] Add callable workflows for building OpenMPI and MPICH from source --- .github/workflows/build_mpich_source.yml | 82 +++++++++++++++++++ .github/workflows/build_openmpi_source.yml | 75 +++++++++++++++++ .github/workflows/test_build_mpich_source.yml | 14 ++++ .../workflows/test_build_openmpi_source.yml | 14 ++++ 4 files changed, 185 insertions(+) create mode 100644 .github/workflows/build_mpich_source.yml create mode 100644 .github/workflows/build_openmpi_source.yml create mode 100644 .github/workflows/test_build_mpich_source.yml create mode 100644 .github/workflows/test_build_openmpi_source.yml diff --git a/.github/workflows/build_mpich_source.yml b/.github/workflows/build_mpich_source.yml new file mode 100644 index 00000000000..25b715693fc --- /dev/null +++ b/.github/workflows/build_mpich_source.yml @@ -0,0 +1,82 @@ +# Build MPICH from source using the latest commit on the +# 'main' branch and cache the results. The result is installed +# to (or restored to) '${{ runner.workspace }}/mpich'. + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + build_mode: + description: "production vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + ubuntu_gcc_build_and_test: + name: "Build MPICH ${{ inputs.build_mode }} (GCC)" + + runs-on: ubuntu-latest + + steps: + - name: Install Linux dependencies + run: | + sudo apt-get update + sudo apt-get install build-essential libtool libtool-bin + + - name: Get MPICH source + uses: actions/checkout@v4.1.7 + with: + repository: 'pmodels/mpich' + path: 'mpich' + submodules: recursive + + - name: Get MPICH commit hash + shell: bash + id: get-sha + run: | + cd $GITHUB_WORKSPACE/mpich + export MPICH_SHA=$(git rev-parse HEAD) + echo "MPICH_SHA=$MPICH_SHA" >> $GITHUB_ENV + echo "sha=$MPICH_SHA" >> $GITHUB_OUTPUT + # Output SHA for debugging + echo "MPICH_SHA=$MPICH_SHA" + + - name: Cache MPICH (GCC) installation + id: cache-mpich-ubuntu-gcc + uses: actions/cache@v4 + with: + path: ${{ runner.workspace }}/mpich + key: ${{ runner.os }}-${{ runner.arch }}-gcc-mpich-${{ steps.get-sha.outputs.sha }}-${{ inputs.build_mode }} + + # Enable threads=multiple for testing with Subfiling and + # VOL connectors that require MPI_THREAD_MULTIPLE + - name: Install MPICH (GCC) (Production) + if: ${{ steps.cache-mpich-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode != 'debug') }} + run: | + cd $GITHUB_WORKSPACE/mpich + ./autogen.sh + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/mpich \ + --enable-threads=multiple + make -j2 + make install + + # Enable threads=multiple for testing with Subfiling and + # VOL connectors that require MPI_THREAD_MULTIPLE + - name: Install MPICH (GCC) (Debug) + if: ${{ steps.cache-mpich-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode == 'debug') }} + run: | + cd $GITHUB_WORKSPACE/mpich + ./autogen.sh + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/mpich \ + --enable-g=most \ + --enable-debuginfo \ + --enable-threads=multiple + make -j2 + make install diff --git a/.github/workflows/build_openmpi_source.yml b/.github/workflows/build_openmpi_source.yml new file mode 100644 index 00000000000..a617153cc4f --- /dev/null +++ b/.github/workflows/build_openmpi_source.yml @@ -0,0 +1,75 @@ +# Build OpenMPI from source using the latest commit on the +# 'main' branch and cache the results. The result is installed +# to (or restored to) '${{ runner.workspace }}/openmpi'. + +# Triggers the workflow on a call from another workflow +on: + workflow_call: + inputs: + build_mode: + description: "production vs. debug build" + required: true + type: string + +permissions: + contents: read + +jobs: + ubuntu_gcc_build_and_test: + name: "Build OpenMPI ${{ inputs.build_mode }} (GCC)" + + runs-on: ubuntu-latest + + steps: + - name: Install Linux dependencies + run: | + sudo apt-get update + sudo apt-get install build-essential libtool libtool-bin + + - name: Get OpenMPI source + uses: actions/checkout@v4.1.7 + with: + repository: 'open-mpi/ompi' + path: 'ompi' + submodules: recursive + + - name: Get OpenMPI commit hash + shell: bash + id: get-sha + run: | + cd $GITHUB_WORKSPACE/ompi + export OPENMPI_SHA=$(git rev-parse HEAD) + echo "OPENMPI_SHA=$OPENMPI_SHA" >> $GITHUB_ENV + echo "sha=$OPENMPI_SHA" >> $GITHUB_OUTPUT + # Output SHA for debugging + echo "OPENMPI_SHA=$OPENMPI_SHA" + + - name: Cache OpenMPI (GCC) installation + id: cache-openmpi-ubuntu-gcc + uses: actions/cache@v4 + with: + path: ${{ runner.workspace }}/openmpi + key: ${{ runner.os }}-${{ runner.arch }}-gcc-openmpi-${{ steps.get-sha.outputs.sha }}-${{ inputs.build_mode }} + + - name: Install OpenMPI (GCC) (Production) + if: ${{ steps.cache-openmpi-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode != 'debug') }} + run: | + cd $GITHUB_WORKSPACE/ompi + ./autogen.pl + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/openmpi + make -j2 + make install + + - name: Install OpenMPI (GCC) (Debug) + if: ${{ steps.cache-openmpi-ubuntu-gcc.cache-hit != 'true' && (inputs.build_mode == 'debug') }} + run: | + cd $GITHUB_WORKSPACE/ompi + ./autogen.pl + ./configure \ + CC=gcc \ + --prefix=${{ runner.workspace }}/openmpi \ + --enable-debug + make -j2 + make install diff --git a/.github/workflows/test_build_mpich_source.yml b/.github/workflows/test_build_mpich_source.yml new file mode 100644 index 00000000000..bde4e26c1d5 --- /dev/null +++ b/.github/workflows/test_build_mpich_source.yml @@ -0,0 +1,14 @@ +name: Test building MPICH from source + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + debug: + name: "MPICH debug" + uses: ./.github/workflows/build_mpich_source.yml + with: + build_mode: "debug" \ No newline at end of file diff --git a/.github/workflows/test_build_openmpi_source.yml b/.github/workflows/test_build_openmpi_source.yml new file mode 100644 index 00000000000..60b65f56853 --- /dev/null +++ b/.github/workflows/test_build_openmpi_source.yml @@ -0,0 +1,14 @@ +name: Test building OpenMPI from source + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + debug: + name: "OpenMPI debug" + uses: ./.github/workflows/build_openmpi_source.yml + with: + build_mode: "debug" \ No newline at end of file