build: add shared guest program build

This commit is contained in:
Ricardo Guilherme Schmidt
2026-07-02 18:16:40 +02:00
committed by r4bbit
parent 0a120bd42c
commit a26debd592
11 changed files with 201 additions and 7 deletions
+44
View File
@@ -0,0 +1,44 @@
# syntax=docker/dockerfile:1.7
ARG RISC0_DOCKER_CONTAINER_TAG=r0.1.88.0
FROM risczero/risc0-guest-builder:${RISC0_DOCKER_CONTAINER_TAG} AS build
ARG RISC0_BUILD_CACHE_ID=lez-programs-risc0-guests
WORKDIR /src
COPY . .
ENV CARGO_TARGET_DIR=/src/target/risc0-guests
ENV RISC0_FEATURE_bigint2=""
ENV CC_riscv32im_risc0_zkvm_elf=/root/.risc0/cpp/bin/riscv32-unknown-elf-gcc
ENV CFLAGS_riscv32im_risc0_zkvm_elf="-march=rv32im -nostdlib"
RUN --mount=type=cache,id=${RISC0_BUILD_CACHE_ID}-cargo-git,sharing=locked,target=/root/.cargo/git \
--mount=type=cache,id=${RISC0_BUILD_CACHE_ID}-cargo-registry,sharing=locked,target=/root/.cargo/registry \
--mount=type=cache,id=${RISC0_BUILD_CACHE_ID}-target,sharing=locked,target=/src/target/risc0-guests <<'EOF'
set -eu
target_triple="riscv32im-risc0-zkvm-elf"
programs="amm ata stablecoin token twap_oracle"
unit_separator="$(printf '\037')"
guest_rustflags="-C${unit_separator}passes=lower-atomic${unit_separator}-C${unit_separator}link-arg=-Ttext=0x00200800${unit_separator}-C${unit_separator}link-arg=--fatal-warnings${unit_separator}-C${unit_separator}panic=abort${unit_separator}--cfg${unit_separator}getrandom_backend=\"custom\""
export CARGO_ENCODED_RUSTFLAGS="${guest_rustflags}"
for program in ${programs}; do
manifest="programs/${program}/methods/guest/Cargo.toml"
echo "==> Building ${program}"
cargo +risc0 build --release --locked --target "${target_triple}" --manifest-path "${manifest}"
done
mkdir -p /guest-output
unset CARGO_ENCODED_RUSTFLAGS
cargo +risc0 build --locked -p risc0-packager
packager="${CARGO_TARGET_DIR}/debug/risc0-packager"
for program in ${programs}; do
elf="${CARGO_TARGET_DIR}/${target_triple}/release/${program}"
"${packager}" "${elf}" "/guest-output/${program}.bin"
done
EOF
FROM scratch AS export
COPY --from=build /guest-output /
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
risc0_tag="${RISC0_DOCKER_CONTAINER_TAG:-r0.1.88.0}"
cache_id="${RISC0_BUILD_CACHE_ID:-lez-programs-risc0-guests}"
network_mode="${RISC0_DOCKER_BUILD_NETWORK:-}"
staging_dir="$(mktemp -d)"
cleanup() {
rm -rf "${staging_dir}"
}
trap cleanup EXIT
network_args=()
if [[ -n "${network_mode}" ]]; then
network_args=(--network "${network_mode}")
fi
DOCKER_BUILDKIT=1 docker build ${network_args[@]+"${network_args[@]}"} \
--build-arg "RISC0_DOCKER_CONTAINER_TAG=${risc0_tag}" \
--build-arg "RISC0_BUILD_CACHE_ID=${cache_id}" \
--output="${staging_dir}" \
-f "${repo_root}/scripts/build-guests.Dockerfile" \
"${repo_root}"
out_dir="${repo_root}/target/guest"
rm -rf "${out_dir}"
mkdir -p "${out_dir}"
for program in amm ata stablecoin token twap_oracle; do
rm -rf "${repo_root}/programs/${program}/methods/guest/target"
install -m 0644 "${staging_dir}/${program}.bin" "${out_dir}/${program}.bin"
done