Skip to content

[tb,ffi] Implement Rust FFI and testbench integration #11844

[tb,ffi] Implement Rust FFI and testbench integration

[tb,ffi] Implement Rust FFI and testbench integration #11844

Workflow file for this run

name: Test
on:
push:
pull_request:
branches: [main]
# Ensures that only the latest commit of a PR can execute the actions.
# Useful for cancelling job when a sequence of commits are quickly added.
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
validate-playground-config:
name: Validate playground config
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust stable
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Build calyx dev
run: cargo build
- name: Check calyx build
run: ./target/debug/calyx --version
- name: validate playground config
run: node web/validate-data.js
# Get the hash of the Dockerfile
hash:
name: Get Docker Hash
runs-on: ubuntu-latest
outputs:
hash: ${{ steps.hash.outputs.hash }}
exists: ${{ steps.exists.outputs.exists }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
repository: calyxir/calyx
ref: ${{ github.sha }}
fetch-depth: 0
- name: Get hash
id: hash
run: git log -s -n 1 --pretty=format:"%H" -- Dockerfile | echo "hash=$(cat)" >> "$GITHUB_OUTPUT"
- name: Check if image exists
id: exists
run: (docker buildx imagetools inspect ghcr.io/calyxir/calyx:${{ steps.hash.outputs.hash }} &> /dev/null && echo "exists=true" || echo "exists=false") >> "$GITHUB_OUTPUT"
# Build a docker image for this commit if needed
docker:
name: Build and push docker image
needs: hash
if: ${{ needs.hash.outputs.exists == 'false' }}
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
steps:
- name: Login to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: ghcr.io/calyxir/calyx
tags: |
type=raw,value=${{ needs.hash.outputs.hash }},enable=true
type=raw,value=latest,enable={{is_default_branch}}
flavor: latest=false
- uses: depot/setup-action@v1
- uses: depot/build-push-action@v1
with:
project: zmf9xmg5nl
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
interpreter:
name: Test Interpreter
needs: [docker, hash]
if: always() && !failure() && !cancelled()
runs-on: ubuntu-latest
permissions:
packages: read
container: ghcr.io/calyxir/calyx:${{ needs.hash.outputs.hash }}
steps:
- name: Copy fud configuration
run: |
mkdir -p $HOME/.config
cp -r /root/.config/* $HOME/.config
- name: Checkout commit that triggered run
working-directory: /home/calyx
run: |
git init
git remote add origin https://github.com/${{ github.repository }}.git
git fetch --all
git fetch origin $GITHUB_REF
git checkout -f $GITHUB_SHA
git clean -fd
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --all --all-features --manifest-path /home/calyx/interp/Cargo.toml
- name: Set location of cider binary
run: |
fud c stages.interpreter.exec /home/calyx/target/debug/cider
- name: Runt tests
working-directory: /home/calyx/interp/tests
run: |
# Run the remaining tests
runt -x '(numeric types correctness and parsing)' -d -o fail
- name: Source code tests
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path /home/calyx/interp/Cargo.toml
- name: Source code doc tests
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path /home/calyx/interp/Cargo.toml --doc
compiler:
name: Test Compiler
needs: [docker, hash]
if: always() && !failure() && !cancelled()
runs-on: ubuntu-latest
permissions:
packages: read
container: ghcr.io/calyxir/calyx:${{ needs.hash.outputs.hash }}
steps:
- name: Copy fud configuration
run: |
mkdir -p $HOME/.config
cp -r /root/.config/* $HOME/.config
- name: Checkout commit that triggered run
working-directory: /home/calyx
run: |
git init
git remote add origin https://github.com/${{ github.repository }}.git
git fetch --all
git fetch origin $GITHUB_REF
git checkout -f $GITHUB_SHA
git clean -fd
- name: Install calyx-py, MrXL, and queues
working-directory: /home/calyx
run: |
cd calyx-py
FLIT_ROOT_INSTALL=1 flit install --symlink
cd -
cd frontends/mrxl
FLIT_ROOT_INSTALL=1 flit install --symlink
cd -
cd frontends/queues
FLIT_ROOT_INSTALL=1 flit install --symlink
- name: Generate queue .data and .expect files
working-directory: /home/calyx
run: ./frontends/queues/test_data_gen/gen_test_data.sh
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --workspace --manifest-path /home/calyx/Cargo.toml
# - name: Source code doc tests
# uses: actions-rs/cargo@v1
# with:
# command: test
# args: --manifest-path /home/calyx/calyx/Cargo.toml --doc lib
# Run these sequentially because they might fail intermittently
- name: Cocotb tests
working-directory: /home/calyx
run: |
runt -i 'cocotb' -d -o fail -j 1 --max-futures 1
- name: Runt tests
working-directory: /home/calyx
run: |
runt -x 'cocotb|profiler' -d -o fail -j 1 --max-futures 5
- name: Run Python Tests
working-directory: /home/calyx
run: pytest calyx-py/test/numeric_types.py
evaluation:
name: Polybench Integration
needs: [docker, hash]
if: always() && !failure() && !cancelled()
runs-on: ubuntu-latest
permissions:
packages: read
container: ghcr.io/calyxir/calyx:${{ needs.hash.outputs.hash }}
steps:
- name: Copy and clean up fud configuration
run: |
mkdir -p $HOME/.config
cp -r /root/.config/* $HOME/.config
- name: Checkout commit that triggered run
working-directory: /home/calyx
run: |
git init
git remote add origin https://github.com/${{ github.repository }}.git
git fetch --all
git fetch origin $GITHUB_REF
git checkout -f $GITHUB_SHA
git clean -fd
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --manifest-path /home/calyx/Cargo.toml
- name: Checkout calyx-evaluation
working-directory: /home
run: |
git clone https://github.com/cucapra/calyx-evaluation.git calyx-evaluation
- name: Run benchmarks
working-directory: /home/calyx-evaluation/benchmarks
run: |
unset JAVA_TOOL_OPTIONS
# Run the main benchmarks
runt -i Correctness -d
# Run the unrolled benchmarks
runt -i Unrolled -d
# Run the interpreter benchmarks
# runt -i Interpreter -d