Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 56 additions & 156 deletions .github/workflows/develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,202 +6,102 @@ on:

jobs:

linux-x86-deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# https://github.com/EmbarkStudios/cargo-deny-action
- uses: EmbarkStudios/cargo-deny-action@v2
with:
arguments: --all-features
command: check advisories licenses sources bans

linux-x86-ci-generated:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run ci-generated
run: make ci-generated

linux-x86-ci:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]

runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Run ci
run: rustup component add clippy rustfmt && make ci

linux-native-ci-asm:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]

runs-on: ${{ matrix.os }}
linux-arm64:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Run ci-asm
run: make ci-asm

linux-native-ci-asm-chaos:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]
- name: Build
run: cargo test --features=asm --release

runs-on: ${{ matrix.os }}
linux-x64:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Run ci-asm-chaos
run: make ci-asm-chaos
- name: Build
run: cargo test --features=asm --release

linux-native-test-suite:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]

runs-on: ${{ matrix.os }}
macos-arm64:
runs-on: macos-15
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Install dependencies
run: |
sudo apt install -y git \
build-essential \
autoconf \
automake \
autotools-dev \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
gawk \
libtool \
patchutils \
libexpat-dev \
zlib1g-dev
- name: Run test suite
run: |
git clone https://github.com/nervosnetwork/ckb-vm-contrib --recursive
cd ckb-vm-contrib
git checkout 51ece04
cd ..
ln -snf ../.. ckb-vm-contrib/ckb-vm-test-suite/ckb-vm
docker run --rm -v `pwd`:/code nervos/ckb-riscv-gnu-toolchain:bionic-20210804 cp -r /riscv /code/riscv
cd ckb-vm-contrib/ckb-vm-test-suite
RISCV=`pwd`/../../riscv ./test.sh
- name: Build
run: cargo test --features=asm --release

linux-native-test-spawn:
strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]

runs-on: ${{ matrix.os }}
macos-x64:
runs-on: macos-15-intel
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Run spawn tests in release
run: cargo test test_spawn --release --features=asm -- --nocapture
- name: Build
run: cargo test --features=asm --release

linux-arm-ci-asm:
runs-on: ubuntu-latest
qemu-arm64:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- name: Install dependencies
- name: Setup
run: |
sudo apt-get update -y
sudo apt install -y build-essential \
autoconf \
automake \
autotools-dev \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
gawk \
libtool \
patchutils \
libexpat-dev \
zlib1g-dev \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
sudo apt install -y gcc-aarch64-linux-gnu \
qemu-user-static
rustup target add aarch64-unknown-linux-gnu
- name: Run ci-asm
- name: Build
run: |
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc &&
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-args=-L -C link-args=/usr/lib/gcc-cross/aarch64-linux-gnu/11" &&
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64-static -L /usr/aarch64-linux-gnu" &&
cargo test --features=asm --target aarch64-unknown-linux-gnu
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-args=-L -C link-args=/usr/lib/gcc-cross/aarch64-linux-gnu/13"
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER="qemu-aarch64-static -L /usr/aarch64-linux-gnu"
cargo test --features=asm --release --target aarch64-unknown-linux-gnu

linux-arm-test-suite:
runs-on: ubuntu-latest
qemu-riscv64:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt update -y
sudo apt install -y build-essential \
autoconf \
automake \
autotools-dev \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
gawk \
libtool \
patchutils \
libexpat-dev \
zlib1g-dev
rustup target add aarch64-unknown-linux-gnu
- name: Build test suite
- name: Setup
run: |
git clone https://github.com/nervosnetwork/ckb-vm-contrib --recursive
cd ckb-vm-contrib
git checkout 51ece04
cd ..
ln -snf ../.. ckb-vm-contrib/ckb-vm-test-suite/ckb-vm
docker run --rm -v `pwd`:/code nervos/ckb-riscv-gnu-toolchain:bionic-20210804 cp -r /riscv /code/riscv
cd ckb-vm-contrib/ckb-vm-test-suite
RISCV=`pwd`/../../riscv ./test.sh --build-only
- name: Run test suite
sudo apt-get update -y
sudo apt install -y gcc-riscv64-linux-gnu \
qemu-user-static
rustup target add riscv64gc-unknown-linux-gnu
- name: Build
run: |
sudo apt install -y qemu-system binfmt-support qemu-user-static
sudo apt install -y gcc-multilib
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu clang
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
cargo build --release --target=aarch64-unknown-linux-gnu --example=ckb_vm_runner --features=asm --config target.aarch64-unknown-linux-gnu.linker=\"aarch64-linux-gnu-gcc\"
docker run --rm -v `pwd`:/code -t --platform linux/arm64 arm64v8/rust bash -c "RISCV=/dummy /code/ckb-vm-contrib/ckb-vm-test-suite/test.sh --prebuilt-prefix aarch64-unknown-linux-gnu"

macos-x86-ci-asm:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Run ci-asm
run: make ci-asm
export CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc
export CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_RUSTFLAGS="-C link-args=-L -C link-args=/usr/lib/gcc-cross/riscv64-linux-gnu/13"
export CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_RUNNER="qemu-riscv64-static -L /usr/riscv64-linux-gnu"
cargo test --features=asm --release --target riscv64gc-unknown-linux-gnu

windows-x86-ci-asm:
runs-on: windows-latest
windows-x64:
runs-on: windows-2025
steps:
- uses: actions/checkout@v3
- name: Install dependencies
- name: Setup
shell: pwsh
# https://github.com/ScoopInstaller/Install#for-admin
run: |
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
scoop install mingw
- name: Run ci-asm
- name: Build
shell: pwsh
run: |
make ci-asm
run: cargo test --features=asm --release

linux-fuzz:
runs-on: ubuntu-latest
misc:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- name: Build fuzz
# https://github.com/EmbarkStudios/cargo-deny-action
- uses: EmbarkStudios/cargo-deny-action@v2
with:
arguments: --all-features
command: check advisories licenses sources bans
- name: Run ci-generated
run: make ci-generated
- name: Run clippy
run: |
rustup component add clippy
make clippy
- name: Run fuzz
run: |
sudo apt install device-tree-compiler
cargo install cargo-fuzz
Expand Down
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ scroll = "0.10"
serde = { version = "1.0", features = ["derive"] }
ckb-vm-definitions = { path = "definitions", version = "=0.24.0" }
derive_more = { version = "1", features = ["full"] }
rand = "0.7.3"

[build-dependencies]
cc = "1.0"
Expand Down
12 changes: 11 additions & 1 deletion build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,18 @@ fn main() {
let target_family = env::var("CARGO_CFG_TARGET_FAMILY").unwrap_or_default();
let target_arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
let target_env = env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
let target = env::var("TARGET").unwrap_or_default();
let is_windows = target_family == "windows";
let is_msvc = is_windows && (target_env == "msvc");
let is_unix = target_family == "unix";
let is_x86_64 = target_arch == "x86_64";
let is_aarch64 = target_arch == "aarch64";
let is_riscv64 = target_arch == "riscv64";
let x64_asm = is_x86_64 && (is_windows || is_unix);
let aarch64_asm = is_aarch64 && is_unix;
let can_enable_asm = x64_asm || aarch64_asm;
// toolchain on sp1 has empty target_family
let riscv64_asm = is_riscv64 && (is_unix || target_family.is_empty());
let can_enable_asm = x64_asm || aarch64_asm || riscv64_asm;

if cfg!(feature = "asm") && (!can_enable_asm) {
panic!(
Expand All @@ -28,6 +32,7 @@ fn main() {
if cfg!(any(feature = "asm", feature = "detect-asm")) && can_enable_asm {
println!("cargo:rerun-if-changed=src/machine/asm/execute_x64.S");
println!("cargo:rerun-if-changed=src/machine/asm/execute_aarch64.S");
println!("cargo:rerun-if-changed=src/machine/asm/execute_riscv64.S");
println!("cargo:rerun-if-changed=src/machine/asm/cdefinitions_generated.h");

let mut build = cc::Build::new();
Expand All @@ -44,6 +49,11 @@ fn main() {
}
} else if aarch64_asm {
build.file("src/machine/asm/execute_aarch64.S");
} else if riscv64_asm {
if target.contains("zkvm") || target.contains("succinct") {
build.compiler("riscv64-linux-gnu-gcc");
}
build.file("src/machine/asm/execute_riscv64.S");
}

build.include("src/machine/asm").compile("asm");
Expand Down
14 changes: 12 additions & 2 deletions definitions/src/generate_asm_constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use std::mem::{size_of, zeroed};
macro_rules! print_inst_label {
($name:ident, $real_name:ident, $code:expr) => {
println!(
"\t.long\t.CKB_VM_ASM_LABEL_OP_{} - .CKB_VM_ASM_LABEL_TABLE",
"\t.long\t.CKB_VM_ASM_LABEL_OP_{} - .CKB_VM_X64_EXECUTE",
stringify!($real_name)
);
};
Expand Down Expand Up @@ -222,16 +222,26 @@ fn main() {

println!("#ifdef CKB_VM_ASM_GENERATE_LABEL_TABLES");
println!("#ifdef __APPLE__");
println!(".section __DATA,__const");
println!(".p2align 3");
println!(".global _ckb_vm_asm_labels");
println!("_ckb_vm_asm_labels:");
println!("#elif __riscv");
println!(".section .rodata");
println!(".p2align 3");
println!(".global ckb_vm_asm_labels");
println!("ckb_vm_asm_labels:");
println!("#else");
println!(".section .rodata");
println!(".p2align 3");
println!(".global ckb_vm_asm_labels");
println!("ckb_vm_asm_labels:");
println!("#endif");
println!(".CKB_VM_ASM_LABEL_TABLE:");
for _ in 0..0x10 {
println!("\t.long\t.exit_slowpath - .CKB_VM_ASM_LABEL_TABLE");
println!("\t.long\t.exit_slowpath - .CKB_VM_X64_EXECUTE");
}
for_each_inst!(print_inst_label);
println!("#endif /* CKB_VM_ASM_GENERATE_LABEL_TABLES */");
println!(".text");
}
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ pub mod error;
pub mod instructions;
pub mod machine;
pub mod memory;
pub mod rng;
pub mod snapshot;
pub mod snapshot2;
pub mod syscalls;
Expand Down
Loading