feat: multi-crate ELF building support #6083
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
name: PR | |
on: | |
push: | |
branches: [main, dev] | |
pull_request: | |
branches: | |
- "**" | |
paths: | |
- "crates/**" | |
- "examples/**" | |
- "Cargo.toml" | |
- ".github/workflows/**" | |
merge_group: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test-x86: | |
name: Test (x86-64) | |
runs-on: | |
[ | |
runs-on, | |
runner=64cpu-linux-x64, | |
spot=false, | |
"run-id=${{ github.run_id }}", | |
] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Run cargo check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
toolchain: 1.81.0 | |
args: --all-targets --all-features | |
- name: Run cargo test | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
toolchain: 1.81.0 | |
args: --release --features native-gnark | |
env: | |
RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native | |
RUST_BACKTRACE: 1 | |
SP1_DEV: 1 | |
test-arm: | |
name: Test (ARM) | |
runs-on: | |
[ | |
runs-on, | |
runner=64cpu-linux-arm64, | |
spot=false, | |
"run-id=${{ github.run_id }}", | |
] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Run cargo check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
toolchain: 1.81.0 | |
args: --all-targets --all-features | |
- name: Run cargo test | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
toolchain: 1.81.0 | |
args: --release --features native-gnark | |
env: | |
RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native | |
RUST_BACKTRACE: 1 | |
SP1_DEV: 1 | |
lint: | |
name: Formatting & Clippy | |
runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Run cargo fmt | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
env: | |
CARGO_INCREMENTAL: 1 | |
- name: Build test-artifacts | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: -p test-artifacts | |
env: | |
CARGO_INCREMENTAL: 1 | |
- name: Run cargo clippy | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --all-features --all-targets -- -D warnings -A incomplete-features | |
env: | |
CARGO_INCREMENTAL: 1 | |
examples: | |
name: Examples | |
runs-on: | |
[ | |
runs-on, | |
runner=64cpu-linux-x64, | |
spot=false, | |
"run-id=${{ github.run_id }}", | |
] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
cargo run -p sp1-cli -- prove install-toolchain | |
- name: Run cargo fmt | |
run: | | |
cd ./examples/ | |
cargo fmt --all -- --check | |
- name: Run cargo check | |
run: | | |
cd ./examples/ | |
cargo check --all-targets --all-features | |
- name: Run cargo clippy | |
run: | | |
cd ./examples/ | |
cargo clippy --all-targets --all-features -- -D warnings -A incomplete-features | |
cli: | |
name: CLI | |
runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Install SP1 CLI | |
run: | | |
cd crates/cli | |
cargo install --force --locked --path . | |
cd ~ | |
- name: Run cargo prove new | |
run: | | |
cargo prove new fibonacci --version dev --evm | |
- name: Build program and run script | |
run: | | |
cd fibonacci | |
cd program | |
cargo add sp1-zkvm --path $GITHUB_WORKSPACE/crates/zkvm/entrypoint | |
cargo prove build | |
cd ../script | |
cargo remove sp1-sdk | |
cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk | |
SP1_DEV=1 RUST_LOG=info cargo run --release -- --prove | |
performance: | |
name: Performance | |
runs-on: [runs-on, family=c7a.48xlarge, "run-id=${{ github.run_id }}"] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Run Evaluation | |
run: | | |
cd crates/eval | |
RUSTFLAGS='-C target-cpu=native' cargo run --release -- \ | |
--programs fibonacci,ssz-withdrawals,tendermint \ | |
--post-to-slack ${{ github.ref == 'refs/heads/dev' }} \ | |
--slack-channel-id "${{ secrets.SLACK_CHANNEL_ID }}" \ | |
--slack-token "${{ secrets.SLACK_TOKEN }}" \ | |
--post-to-github ${{ github.event_name == 'pull_request' }} \ | |
--github-token "${{ secrets.GITHUB_TOKEN }}" \ | |
--repo-owner "${{ github.repository_owner }}" \ | |
--repo-name "${{ github.event.repository.name }}" \ | |
--pr-number "${{ github.event.pull_request.number }}" \ | |
--branch-name "${{ github.head_ref || github.ref_name }}" \ | |
--commit-hash "${{ github.sha }}" \ | |
--author "${{ github.event.pull_request.user.login || github.actor }}" | |
low-memory: | |
name: Low Memory | |
strategy: | |
matrix: | |
mem_limit: [16, 32, 64] | |
runs-on: | |
[ | |
runs-on, | |
"ram=${{ matrix.mem_limit}}", | |
family=c7a, | |
image=ubuntu22-full-x64, | |
"run-id=${{ github.run_id }}", | |
] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: Install SP1 toolchain | |
run: | | |
curl -L https://sp1.succinct.xyz | bash | |
~/.sp1/bin/sp1up | |
~/.sp1/bin/cargo-prove prove --version | |
- name: Install SP1 CLI | |
run: | | |
cd crates/cli | |
cargo install --force --locked --path . | |
cd ~ | |
- name: Run tendermint script | |
run: | | |
cd examples/tendermint/program | |
cargo add sp1-zkvm --path $GITHUB_WORKSPACE/crates/zkvm/entrypoint | |
cargo prove build | |
cd ../script | |
cargo remove sp1-sdk | |
cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk | |
SP1_DEV=1 RUST_LOG=info cargo run --release | |
- name: Run cycle tracking script | |
run: | | |
cd examples/cycle-tracking/script | |
cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk | |
SP1_DEV=1 RUST_LOG=info cargo run --release | |
# toolchain-test: | |
# name: "Test toolchain installation (${{ matrix.name }})" | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# include: | |
# - name: "Ubuntu 24.04 (x86_64)" | |
# runner: "ubuntu-24.04" | |
# - name: "Ubuntu 22.04 (x86_64)" | |
# runner: "ubuntu-22.04" | |
# - name: "Ubuntu 20.04 (x86_64)" | |
# runner: "ubuntu-20.04" | |
# - name: "macOS Monterey (x86_64)" | |
# runner: "macos-12" | |
# - name: "macOS Ventura (x86_64)" | |
# runner: "macos-13" | |
# - name: "macOS Sonoma (ARM64)" | |
# runner: "macos-14" | |
# runs-on: "${{ matrix.runner }}" | |
# steps: | |
# - name: "Checkout source code" | |
# uses: "actions/checkout@v4" | |
# - name: "Install cargo-prove" | |
# run: | | |
# cargo install --locked --path ./crates/cli | |
# - name: "Install SP1 toolchain" | |
# run: | | |
# cargo prove install-toolchain --token ${{ secrets.GITHUB_TOKEN }} | |
# - name: "Create SP1 project from template" | |
# run: | | |
# cargo prove new hello | |
# - name: "Build SP1 project" | |
# run: | | |
# cd ./hello/program | |
# cargo prove build | |
# toolchain-test-ec2: | |
# name: "Test toolchain installation (${{ matrix.name }})" | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# include: | |
# # AMI from `us-east-1` | |
# - name: "Debian 12 (x86_64)" | |
# ec2-instance: "c5.2xlarge" | |
# ami: "ami-064519b8c76274859" | |
# volume: "/dev/xvda" | |
# - name: "Debian 12 (ARM64)" | |
# ec2-instance: "c6g.2xlarge" | |
# ami: "ami-0789039e34e739d67" | |
# volume: "/dev/xvda" | |
# uses: "./.github/workflows/toolchain-ec2.yml" | |
# with: | |
# image-id: "${{ matrix.ami }}" | |
# instance-type: "${{ matrix.ec2-instance }}" | |
# root-volume: "${{ matrix.volume }}" | |
# secrets: | |
# AWS_REGION: "${{ secrets.AWS_REGION }}" | |
# AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}" | |
# AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}" | |
# AWS_SUBNET_ID: "${{ secrets.AWS_SUBNET_ID }}" | |
# AWS_SG_ID: "${{ secrets.AWS_SG_ID }}" | |
# GH_PAT: "${{ secrets.GH_PAT }}" | |
typos: | |
name: Spell Check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Actions Repository | |
uses: actions/checkout@v4 | |
- name: Check all typos | |
uses: crate-ci/typos@master | |
with: | |
write_changes: true | |
- uses: getsentry/action-git-diff-suggestions@main | |
with: | |
message: typos | |
check-verifier-no-std: | |
name: Check Verifier `no_std` | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
strategy: | |
fail-fast: false | |
steps: | |
- name: Checkout Actions Repository | |
uses: actions/checkout@v4 | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: riscv32imac-unknown-none-elf | |
- name: Install target support | |
run: rustup target add riscv32imac-unknown-none-elf | |
- name: Check build | |
run: cargo check --target riscv32imac-unknown-none-elf --no-default-features -p sp1-verifier | |
lock-files: | |
name: "Check lock files" | |
runs-on: | |
[ | |
runs-on, | |
runner=64cpu-linux-x64, | |
spot=false, | |
hdd=150, | |
"run-id=${{ github.run_id }}", | |
] | |
env: | |
CARGO_NET_GIT_FETCH_WITH_CLI: "true" | |
steps: | |
- name: "Checkout sources" | |
uses: "actions/checkout@v4" | |
- name: Setup CI | |
uses: ./.github/actions/setup | |
- name: "Remove lock files" | |
run: | | |
find -name Cargo.lock -type f -exec rm {} \; | |
# We need cargo-prove to be installed in order to build test-artifacts | |
- name: Install SP1 toolchain | |
run: | | |
cargo run -p sp1-cli -- prove install-toolchain | |
- name: "Build SP1 without lock files" | |
run: | | |
cargo build --all --all-targets | |
- name: "Build examples without lock files" | |
run: | | |
cd examples | |
cargo build --all --all-targets |