Skip to content

Commit

Permalink
add ci to test
Browse files Browse the repository at this point in the history
  • Loading branch information
indirection42 committed May 23, 2024
1 parent dc57274 commit 3bd98d3
Show file tree
Hide file tree
Showing 6 changed files with 281 additions and 182 deletions.
81 changes: 81 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Build

on:
push:
branches: ["master", "fix-*"]
pull_request:
branches: ["master"]

env:
CARGO_TERM_COLOR: always

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
components: rust-src, rustfmt, clippy

- uses: Swatinem/rust-cache@v2

- name: Check format
run: cargo fmt --all -- --check

- name: Make dummpy poc-guest.polkavm file
run: mkdir -p output; touch output/poc-guest.polkavm

- name: Cargo clippy
run: SKIP_WASM_BUILD= cargo clippy -- -D warnings

- name: Check no-std
run: make check-wasm

- name: Check std
run: SKIP_WASM_BUILD= cargo check

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
components: rustfmt, clippy

- uses: Swatinem/rust-cache@v2
with:
workspaces: poc/guest -> poc/guest/target
cache-all-crates: true

- name: Install toolchain targeting RV32E
run: |
curl -sL https://github.com/paritytech/rustc-rv32e-toolchain/releases/download/v1.1.0/rust-rve-nightly-2024-01-05-x86_64-unknown-linux-gnu.tar.zst -o rv32e.tar.zst
tar --zstd -xf rv32e.tar.zst
mv rve-nightly ~/.rustup/toolchains/
- name: Cargo clippy
run: cd poc/guest; cargo clippy -- -D warnings

- name: Install polkatool
run: make polkatool

- name: Generate poc-guest.polkavm
run: make poc-guest

- name: build host
run: make poc-host
24 changes: 19 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,31 @@ poc-guest:
mkdir -p output
polkatool link --run-only-if-newer -s poc/guest/target/riscv32ema-unknown-none-elf/release/poc-guest -o output/poc-guest.polkavm

tools:
cargo install --git https://github.com/koute/polkavm --force polkatool
cargo install --git https://github.com/paritytech/polkadot-sdk --tag polkadot-v1.9.0 --force staging-chain-spec-builder
tools: polkatool chain-spec-builder

check:
cargo check --no-default-features --target=wasm32-unknown-unknown -p poc-executor
polkatool:
cargo install --git https://github.com/koute/polkavm polkatool

chain-spec-builder:
cargo install --git https://github.com/paritytech/polkadot-sdk --tag polkadot-v1.9.0 staging-chain-spec-builder

fmt:
cargo fmt --all

check-wasm:
cargo check --no-default-features --target=wasm32-unknown-unknown -p poc-executor -p poc-runtime

check: check-wasm
SKIP_WASM_BUILD= cargo check
cd poc/guest; cargo check

clippy:
SKIP_WASM_BUILD= cargo clippy -- -D warnings
cd poc/guest; cargo clippy

chainspec:
cargo build -p poc-runtime --release
mkdir -p output
cp target/release/wbuild/poc-runtime/poc_runtime.compact.compressed.wasm output
chain-spec-builder -c output/chainspec.json create -n poc-runtime -i poc-runtime -r ./output/poc_runtime.compact.compressed.wasm -s default
cat output/chainspec.json | jq '.properties = {}' > output/chainspec.json.tmp
Expand Down
6 changes: 3 additions & 3 deletions poc/executor/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

extern crate alloc;

pub use polkavm::{Config, Engine, Linker, Module, ProgramBlob};
pub use alloc::vec::Vec;
pub use polkavm::{Config, Engine, Linker, Module, ProgramBlob};

pub trait XcqExecutorContext {
fn register_host_functions<T>(&mut self, linker: &mut Linker<T>);
Expand Down Expand Up @@ -53,12 +53,12 @@ impl<Ctx: XcqExecutorContext> XcqExecutor<Ctx> {
}

pub fn execute(&mut self, raw_blob: &[u8], input: &[u8]) -> Result<Vec<u8>, XcqExecutorError> {
let blob = ProgramBlob::parse(&raw_blob[..])?;
let blob = ProgramBlob::parse(raw_blob)?;
let module = Module::from_blob(&self.engine, &Default::default(), &blob)?;
let instance_pre = self.linker.instantiate_pre(&module)?;
let instance = instance_pre.instantiate()?;

let input_ptr = if input.len() > 0 {
let input_ptr = if !input.is_empty() {
let ptr = instance
.sbrk(input.len() as u32)?
.expect("sbrk must be able to allocate memoery here");
Expand Down
16 changes: 9 additions & 7 deletions poc/host/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
use polkavm::{Config, Linker, Caller};
use polkavm::{Caller, Config, Linker};

struct HostFunctions;

impl poc_executor::XcqExecutorContext for HostFunctions {
fn register_host_functions<T>(&mut self, linker: &mut Linker<T>) {
linker.func_wrap("host_call", move |caller: Caller<_>, ptr: u32| -> u32 {
let mut data = [0u8];
let data = caller.read_memory_into_slice(ptr, &mut data).unwrap();
println!("host_call: {:?}", data);
return (data[0] + 1) as u32;
}).unwrap();
linker
.func_wrap("host_call", move |caller: Caller<_>, ptr: u32| -> u32 {
let mut data = [0u8];
let data = caller.read_memory_into_slice(ptr, &mut data).unwrap();
println!("host_call: {:?}", data);
(data[0] + 1) as u32
})
.unwrap();
}
}

Expand Down
Loading

0 comments on commit 3bd98d3

Please sign in to comment.