Feature/ Docker CI Workflow #195
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: vrtlmod CI - build, test, and benchmark | |
| on: | |
| push: | |
| paths-ignore: | |
| - doc/ | |
| - README* | |
| branches: | |
| - master | |
| tags: | |
| - v* | |
| pull_request: | |
| paths-ignore: | |
| - doc/ | |
| - README* | |
| branches: | |
| - master | |
| workflow_dispatch: {} | |
| jobs: | |
| requirements: | |
| strategy: | |
| matrix: | |
| os: | |
| - {name: "ubuntu", version: "latest"} | |
| - {name: "ubuntu", version: "22.04"} | |
| llvm: | |
| - {name: "src", src: "true", version: "13.0.1"} | |
| - {name: "pkg", src: "false", version: "15"} | |
| systemc_version: ['2.3.3'] | |
| verilator_version: ['4.228'] | |
| runs-on: ${{ matrix.os.name }}-${{ matrix.os.version }} | |
| container: ${{ matrix.os.name }}:${{ matrix.os.version }} | |
| name: reqs_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| steps: | |
| - name: Install git on container | |
| run: | | |
| apt update | |
| apt install -y git | |
| - name: Clone vRTLmod | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vrtlmod_src | |
| submodules: true | |
| - name: Load env vars from docker/.env | |
| run: | | |
| while IFS='=' read -r key value || [ -n "$key" ]; do | |
| [[ -z "$key" || "$key" == \#* ]] && continue | |
| key="$(echo "$key" | xargs)" | |
| value="$(echo "$value" | xargs)" | |
| value="${value%\"}" | |
| value="${value#\"}" | |
| echo "$key=$value" >> $GITHUB_ENV | |
| done < vrtlmod_src/docker/.env | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Cache LLVM | |
| id: cache-llvm | |
| uses: actions/cache@v4 | |
| with: | |
| path: /llvm_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| - name: Cache Verilator | |
| id: cache-verilator | |
| uses: actions/cache@v4 | |
| with: | |
| path: /verilator_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| - name: Cache SystemC | |
| id: cache-systemc | |
| uses: actions/cache@v4 | |
| with: | |
| path: /systemc_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| - name: Requirements (Linux) | |
| if: runner.os == 'Linux' | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_env | |
| - if: ${{ steps.cache-systemc.outputs.cache-hit != 'true' }} | |
| name: Requirements SystemC | |
| working-directory: ${{runner.workspace}} | |
| shell: bash | |
| run: | | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_systemc "${{runner.workspace}}/systemc_src" "${{runner.workspace}}/systemc_build" "/systemc_install" "${{ matrix.systemc_version }}" | |
| - if: ${{ steps.cache-verilator.outputs.cache-hit != 'true' }} | |
| name: Requirements Verilator | |
| working-directory: ${{runner.workspace}} | |
| shell: bash | |
| run: | | |
| . "./vrtlmod/vrtlmod_src/docker/setup_debian.sh" | |
| setup_verilator "${{runner.workspace}}/verilator_src" "${{runner.workspace}}/verilator_src" "/verilator_install" "${{ matrix.verilator_version }}" | |
| - name: Check (cached) Verilator | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: /verilator_install/bin/verilator --version | |
| - if: ${{ (matrix.llvm.src == 'true') && (steps.cache-llvm.outputs.cache-hit != 'true') }} | |
| name: Requirements LLVM+Clang | |
| working-directory: ${{runner.workspace}} | |
| shell: bash | |
| run: | | |
| export ENV_LLVM_FROM_SOURCE="ON" | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_llvm "${{runner.workspace}}/llvm_src" "${{runner.workspace}}/llvm_build" "/llvm_install" "${{ matrix.llvm.version }}" "$PWD/vrtlmod/vrtlmod_src/deps/llvm/patches" | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Check (cached) LLVM | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: /llvm_install/bin/clang --version | |
| build: | |
| strategy: | |
| matrix: | |
| os: | |
| - {name: "ubuntu", version: "latest"} | |
| - {name: "ubuntu", version: "22.04"} | |
| llvm: | |
| - {name: "src", src: "true", version: "13.0.1"} | |
| - {name: "pkg", src: "false", version: "15"} | |
| systemc_version: ['2.3.3'] | |
| verilator_version: ['4.228'] | |
| cmakegen: ["Release"] | |
| needs: requirements | |
| runs-on: ${{ matrix.os.name }}-${{ matrix.os.version }} | |
| container: ${{ matrix.os.name }}:${{ matrix.os.version }} | |
| name: build_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| steps: | |
| - name: Install git on container | |
| run: | | |
| apt update | |
| apt install -y git | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vrtlmod_src | |
| submodules: recursive | |
| - name: Load env vars from docker/.env | |
| run: | | |
| while IFS='=' read -r key value || [ -n "$key" ]; do | |
| [[ -z "$key" || "$key" == \#* ]] && continue | |
| key="$(echo "$key" | xargs)" | |
| value="$(echo "$value" | xargs)" | |
| value="${value%\"}" | |
| value="${value#\"}" | |
| echo "$key=$value" >> $GITHUB_ENV | |
| done < vrtlmod_src/docker/.env | |
| - name: Requirements (Linux) | |
| if: runner.os == 'Linux' | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| . ./vrtlmod/vrtlmod_src/docker/.env | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_env | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Cache LLVM | |
| id: cache-llvm | |
| uses: actions/cache@v4 | |
| with: | |
| path: /llvm_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| - if: ${{ matrix.llvm.src != 'true' }} | |
| name: Install LLVM build dependencies (system) | |
| run: | | |
| apt update | |
| apt remove -y llvm* clang* libllvm* libclang* | |
| apt install -y libzstd-dev llvm-${{ matrix.llvm.version }}-dev libclang-${{ matrix.llvm.version }}-dev clang-${{ matrix.llvm.version }} | |
| - name: Cache Verilator | |
| id: cache-verilator | |
| uses: actions/cache@v4 | |
| with: | |
| path: /verilator_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| - name: Cache SystemC | |
| id: cache-systemc | |
| uses: actions/cache@v4 | |
| with: | |
| path: /systemc_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| - name: Check (cached) Verilator | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: /verilator_install/bin/verilator --version | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Check (cached) Clang | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: /llvm_install/bin/clang --version | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Build vRTLmod (LLVM from source) | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| export VERILATOR_ROOT=/verilator_install | |
| export LLVM_DIR=/llvm_install | |
| export SYSTEMC_HOME=/systemc_install | |
| . ./vrtlmod/vrtlmod_src/docker/.env | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_vrtlmod "${GITHUB_WORKSPACE}/vrtlmod_src" "/vrtlmod_build" "/vrtlmod_install" | |
| - if: ${{ matrix.llvm.src != 'true' }} | |
| name: Build vRTLmod (LLVM system) | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| export VERILATOR_ROOT=/verilator_install | |
| export SYSTEMC_HOME=/systemc_install | |
| . ./vrtlmod/vrtlmod_src/docker/.env | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_vrtlmod "${GITHUB_WORKSPACE}/vrtlmod_src" "/vrtlmod_build" "/vrtlmod_install" | |
| - name: Run Tests | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| . ./vrtlmod/vrtlmod_src/docker/.env | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| test_vrtlmod "${GITHUB_WORKSPACE}/vrtlmod_src" "/vrtlmod_build" "/vrtlmod_install" | |
| - name: (CTest) Upload Artifacts on Failure | |
| uses: actions/upload-artifact@v5 | |
| if: ${{ failure() }} | |
| with: | |
| name: vrtlmod-failed-test-${{ matrix.os.name }}-${{ matrix.os.version }}.tar.gz | |
| path: /vrtlmod_build/Testing/ | |
| if-no-files-found: error | |
| retention-days: 15 | |
| - name: Upload Compiled System | |
| if: runner.os == 'Linux' | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: vrtlmod_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| path: /vrtlmod_install/ | |
| if-no-files-found: error | |
| benchmark: | |
| strategy: | |
| matrix: | |
| os: | |
| - {name: "ubuntu", version: "latest"} | |
| - {name: "ubuntu", version: "22.04"} | |
| llvm: | |
| - {name: "src", src: "true", version: "13.0.1"} | |
| - {name: "pkg", src: "false", version: "15"} | |
| systemc_version: ['2.3.3'] | |
| verilator_version: ['4.228'] | |
| cmakegen: ["Release"] | |
| duts: ["foo", "cv32e40p", "cv32e40s", "cva6"] | |
| continue-on-error: true | |
| needs: build | |
| runs-on: ${{ matrix.os.name }}-${{ matrix.os.version }} | |
| container: ${{ matrix.os.name }}:${{ matrix.os.version }} | |
| name: benchmark-${{ matrix.duts }}_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| steps: | |
| - name: Install git on container | |
| run: | | |
| apt update | |
| apt install -y git | |
| - name: Checkout vrtlmod | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vrtlmod_src | |
| - name: Load env vars from docker/.env | |
| run: | | |
| while IFS='=' read -r key value || [ -n "$key" ]; do | |
| [[ -z "$key" || "$key" == \#* ]] && continue | |
| key="$(echo "$key" | xargs)" | |
| value="$(echo "$value" | xargs)" | |
| value="${value%\"}" | |
| value="${value#\"}" | |
| echo "$key=$value" >> $GITHUB_ENV | |
| done < vrtlmod_src/docker/.env | |
| - name: Checkout vrtlmod-test | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vrtlmod-test_src | |
| repository: tum-ei-eda/vrtlmod-test | |
| ref: master | |
| submodules: recursive | |
| - name: Requirements (Linux) | |
| if: runner.os == 'Linux' | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| . ./vrtlmod/vrtlmod_src/docker/.env | |
| . ./vrtlmod/vrtlmod_src/docker/setup_debian.sh | |
| setup_env | |
| - name: Cache Verilator | |
| id: cache-verilator | |
| uses: actions/cache@v4 | |
| with: | |
| path: /verilator_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }} | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Cache LLVM | |
| id: cache-llvm | |
| uses: actions/cache@v4 | |
| with: | |
| path: /llvm_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| - if: ${{ matrix.llvm.src != 'true' }} | |
| name: Install LLVM build dependencies (system) | |
| run: | | |
| apt update | |
| apt remove -y llvm* clang* libllvm* libclang* | |
| apt install -y libzstd-dev llvm-${{ matrix.llvm.version }}-dev libclang-${{ matrix.llvm.version }}-dev clang-${{ matrix.llvm.version }} | |
| - name: Cache SystemC | |
| id: cache-systemc | |
| uses: actions/cache@v4 | |
| with: | |
| path: /systemc_install | |
| key: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| restore-keys: ${{ matrix.os.name }}-${{ matrix.os.version }}_systemc-${{ matrix.systemc_version }} | |
| - name: Check (cached) Verilator | |
| continue-on-error: false | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: /verilator_install/bin/verilator --version | |
| - name: Fetch Compiled System | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: vrtlmod_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| path: /vrtlmod_install/ | |
| - name: Check pre-compiled vrtlmod | |
| shell: bash | |
| run: | | |
| chmod +x /vrtlmod_install/bin/vrtlmod | |
| chmod +x /vrtlmod_install/cmake/vrtlmod-config.cmake | |
| /vrtlmod_install/bin/vrtlmod --version | |
| - name: Patch Submodule | |
| shell: bash | |
| run: | | |
| scc_dir="${GITHUB_WORKSPACE}/vrtlmod-test_src/third_party/scc/scc_src" | |
| _dir_="$PWD" | |
| ls -la ${scc_dir} | |
| cd ${scc_dir} | |
| ls -la . | |
| git apply "../../../patches/scc-gcc_gt_13.patch" | |
| git apply "../../../patches/scc-byteenabletransactions.patch" | |
| - if: ${{ matrix.llvm.src == 'true' }} | |
| name: Configure Benchmarks (LLVM source) | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| export VERILATOR_ROOT=/verilator_install | |
| export LLVM_DIR=/llvm_install | |
| export SYSTEMC_HOME=/systemc_install | |
| cmake -S ${GITHUB_WORKSPACE}/vrtlmod-test_src -B build -D VRTL_NAMES="${{matrix.duts}}" -D CMAKE_BUILD_TYPE=${{ matrix.cmakegen }} -D VRTLMOD_ROOT=/vrtlmod_install | |
| - if: ${{ matrix.llvm.src != 'true' }} | |
| name: Configure Benchmarks (LLVM system) | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| export VERILATOR_ROOT=/verilator_install | |
| export SYSTEMC_HOME=/systemc_install | |
| cmake -S ${GITHUB_WORKSPACE}/vrtlmod-test_src -B build -D VRTL_NAMES="${{matrix.duts}}" -D CMAKE_BUILD_TYPE=${{ matrix.cmakegen }} -D VRTLMOD_ROOT=/vrtlmod_install | |
| - name: Compile Benchmarks | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| cmake --build build --parallel $(nproc) | |
| - name: Run Benchmarks | |
| shell: bash | |
| working-directory: ${{runner.workspace}} | |
| run: | | |
| build/benchmark/V${{ matrix.duts }}-SC_TEST_VRTLMOD ${GITHUB_WORKSPACE}/vrtlmod-test_src/benchmark/${{matrix.duts}}/dhry.elf 5 10 > ${{matrix.duts}}-log.txt | |
| cat ${{matrix.duts}}-log.txt | |
| - name: Save Benchmark Results | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{matrix.duts}}_${{ matrix.os.name }}-${{ matrix.os.version }}_verilator-${{ matrix.verilator_version }}_llvm-${{ matrix.llvm.name }}-${{ matrix.llvm.version }} | |
| path: ${{runner.workspace}}/${{matrix.duts}}.log |