| name: Fortran | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - '.github/workflows/fortran.yml' | |
| - 'enzyme/Enzyme/**' | |
| - 'enzyme/Fortran/**' | |
| - 'enzyme/includes/**' | |
| - 'enzyme/test/**' | |
| - 'enzyme/tools/**' | |
| - 'enzyme/benchmarks/**' | |
| - 'enzyme/cmake/**' | |
| - 'enzyme/CMakeLists.txt' | |
| - 'enzyme/CMakePresets.json' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/fortran.yml' | |
| - 'enzyme/Enzyme/**' | |
| - 'enzyme/Fortran/**' | |
| - 'enzyme/includes/**' | |
| - 'enzyme/test/**' | |
| - 'enzyme/tools/**' | |
| - 'enzyme/benchmarks/**' | |
| - 'enzyme/cmake/**' | |
| - 'enzyme/CMakeLists.txt' | |
| - 'enzyme/CMakePresets.json' | |
| merge_group: | |
| concurrency: | |
| # Skip intermediate builds: always. | |
| # Cancel intermediate builds: only if it is a pull request build. | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} | |
| jobs: | |
| build-and-test-fortran-flang: | |
| name: Fortran ${{matrix.build}} ${{matrix.os}} ${{matrix.compiler}} ${{matrix.llvm}} | |
| runs-on: ${{matrix.os}} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Release, Debug] | |
| os: [ubuntu-26.04] | |
| compiler: [flang] | |
| llvm: [21, 22, 23] | |
| mpi: [2021.7.1] | |
| timeout-minutes: 60 | |
| steps: | |
| - name: add llvm with clang and flang | |
| run: | | |
| set -eo pipefail | |
| wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/llvm-snapshot.gpg | |
| sudo apt-add-repository "deb http://apt.llvm.org/`lsb_release -c | cut -f2`/ llvm-toolchain-`lsb_release -c | cut -f2`-${{ matrix.llvm }} main" | |
| sudo apt-get update && sudo apt-get install -y cmake gcc g++ llvm-${{ matrix.llvm }}-dev libomp-${{ matrix.llvm }}-dev ninja-build pip clang-${{ matrix.llvm }} flang-${{ matrix.llvm }} | |
| sudo python3 -m pip install lit | |
| - name: Checkout Enzyme repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| persist-credentials: false | |
| - name: install openmpi | |
| run: | | |
| git clone https://github.com/spack/spack.git | |
| . spack/share/spack/setup-env.sh | |
| spack compiler find | |
| spack install openmpi ^llvm | |
| - name: generate build system | |
| run: | | |
| . spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| rm -rf build && mkdir build && cd build | |
| cmake ../enzyme -GNinja -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DLLVM_DIR=/usr/lib/llvm-${{ matrix.llvm }}/lib/cmake/llvm -DLLVM_EXTERNAL_LIT=`which lit` -DENZYME_FORTRAN=ON -DENZYME_FLANG=ON -DCMAKE_Fortran_COMPILER=${{ matrix.compiler }}-${{ matrix.llvm }} | |
| - name: build enzyme | |
| working-directory: 'build' | |
| run: | | |
| . ../spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| ninja LLVMEnzyme-${{ matrix.llvm }} FlangEnzyme-${{ matrix.llvm }} | |
| - name: run Fortran tests | |
| working-directory: 'build' | |
| run: | | |
| . ../spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| ninja check-enzyme-fortran | |
| build-and-test-fortran-ifx: | |
| name: Fortran ${{matrix.build}} ${{matrix.os}} ${{matrix.compiler}} ${{matrix.versions.ifx}} llvm ${{matrix.versions.llvm}} | |
| runs-on: ${{matrix.os}} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Release, Debug] | |
| os: [ubuntu-22.04] | |
| compiler: [ifx] | |
| mpi: [2021.7.1] | |
| versions: | |
| - llvm: 15 | |
| ifx: 2023.0.0 | |
| - llvm: 17 | |
| ifx: 2023.2.4 | |
| timeout-minutes: 60 | |
| steps: | |
| - name: add llvm without clang and flang | |
| run: | | |
| set -eo pipefail | |
| wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/llvm-snapshot.gpg | |
| sudo apt-add-repository "deb http://apt.llvm.org/`lsb_release -c | cut -f2`/ llvm-toolchain-`lsb_release -c | cut -f2`-${{ matrix.versions.llvm }} main" | |
| sudo apt-get update && sudo apt-get install -y cmake gcc g++ llvm-${{ matrix.versions.llvm }}-dev ninja-build pip | |
| sudo python3 -m pip install --upgrade pip lit | |
| - name: add intel tools | |
| run: | | |
| set -eo pipefail | |
| wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/intel-oneapi.gpg GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list | |
| sudo apt-get update && sudo apt-get install -y intel-oneapi-compiler-fortran-${{ matrix.versions.ifx }} intel-oneapi-mpi-${{ matrix.mpi }} intel-oneapi-mpi-devel-${{ matrix.mpi }} | |
| source /opt/intel/oneapi/setvars.sh | |
| printenv >> $GITHUB_ENV | |
| - name: Checkout Enzyme repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| persist-credentials: false | |
| - name: install openmpi | |
| run: | | |
| git clone https://github.com/spack/spack.git | |
| . spack/share/spack/setup-env.sh | |
| spack compiler find | |
| spack install openmpi ^intel-oneapi-compilers | |
| - name: generate build system | |
| run: | | |
| . spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| rm -rf build && mkdir build && cd build | |
| cmake ../enzyme -GNinja -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DLLVM_DIR=/usr/lib/llvm-${{ matrix.versions.llvm }}/lib/cmake/llvm -DLLVM_EXTERNAL_LIT=`which lit` -DENZYME_FORTRAN=ON -DCMAKE_Fortran_COMPILER=${{ matrix.compiler }} | |
| - name: build enzyme | |
| working-directory: 'build' | |
| run: | | |
| . ../spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| ninja LLVMEnzyme-${{ matrix.versions.llvm }} | |
| - name: run Fortran tests | |
| working-directory: 'build' | |
| run: | | |
| . ../spack/share/spack/setup-env.sh | |
| spack load openmpi | |
| ninja check-enzyme-fortran |