Skip to content

Commit c64578c

Browse files
authored
rv64im: Add riscv64im-jolt-zkvm-elf target
2 parents 68c8a33 + 04c2cbc commit c64578c

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

.github/workflows/release.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
run: |
4242
./configure \
4343
--set change-id="ignore" \
44-
--target "${{ matrix.config.triple }},riscv32im-jolt-zkvm-elf,riscv64imac-jolt-zkvm-elf" \
44+
--target "${{ matrix.config.triple }},riscv32im-jolt-zkvm-elf,riscv64im-jolt-zkvm-elf,riscv64imac-jolt-zkvm-elf" \
4545
--tools "cargo,cargo-clippy,clippy,rustfmt" \
4646
--release-channel="${{ matrix.channel }}" \
4747
--set rust.lld \
@@ -55,6 +55,7 @@ jobs:
5555
run: |
5656
export GITHUB_ACTIONS=false
5757
export CARGO_TARGET_RISCV32IM_JOLT_ZKVM_ELF_RUSTFLAGS="-Cpasses=lower-atomic"
58+
export CARGO_TARGET_RISCV64IM_JOLT_ZKVM_ELF_RUSTFLAGS="-Cpasses=lower-atomic"
5859
./x.py build --stage 2
5960
working-directory: rust
6061

compiler/rustc_target/src/spec/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,6 +1985,7 @@ supported_targets! {
19851985
("riscv32gc-unknown-linux-gnu", riscv32gc_unknown_linux_gnu),
19861986
("riscv32gc-unknown-linux-musl", riscv32gc_unknown_linux_musl),
19871987
("riscv64imac-jolt-zkvm-elf", riscv64imac_jolt_zkvm_elf),
1988+
("riscv64im-jolt-zkvm-elf", riscv64im_jolt_zkvm_elf),
19881989
("riscv64imac-unknown-none-elf", riscv64imac_unknown_none_elf),
19891990
("riscv64gc-unknown-none-elf", riscv64gc_unknown_none_elf),
19901991
("riscv64gc-unknown-linux-gnu", riscv64gc_unknown_linux_gnu),
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use crate::spec::{
2+
Cc, CodeModel, LinkerFlavor, Lld, PanicStrategy, RelocModel, SanitizerSet, Target,
3+
TargetOptions,
4+
};
5+
6+
pub(crate) fn target() -> Target {
7+
Target {
8+
data_layout: "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128".into(),
9+
llvm_target: "riscv64".into(),
10+
metadata: crate::spec::TargetMetadata {
11+
description: Some("Jolt's Zero's zero-knowledge Virtual Machine (RV64IMC ISA)".into()),
12+
tier: Some(3),
13+
host_tools: Some(false),
14+
std: None,
15+
},
16+
pointer_width: 64,
17+
arch: "riscv64".into(),
18+
19+
options: TargetOptions {
20+
os: "zkvm".into(),
21+
vendor: "jolt".into(),
22+
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
23+
linker: Some("rust-lld".into()),
24+
cpu: "generic-rv64".into(),
25+
26+
// We claim to support atomics because our target is single threaded and non-preemptive,
27+
// which means that all instructions are atomic already.
28+
// We rely on llvm's "lower-atomics" pass to convert all atomic operations into the
29+
// plain instructions.
30+
max_atomic_width: Some(64),
31+
atomic_cas: true,
32+
33+
executables: true,
34+
features: "+m".into(),
35+
llvm_abiname: "lp64".into(),
36+
panic_strategy: PanicStrategy::Abort,
37+
relocation_model: RelocModel::Static,
38+
code_model: Some(CodeModel::Medium),
39+
emit_debug_gdb_scripts: false,
40+
eh_frame_header: false,
41+
supported_sanitizers: SanitizerSet::KERNELADDRESS | SanitizerSet::SHADOWCALLSTACK,
42+
singlethread: true,
43+
supports_stack_protector: false,
44+
..Default::default()
45+
},
46+
}
47+
}

src/bootstrap/src/core/sanity.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const STAGE0_MISSING_TARGETS: &[&str] = &[
3838
"loongarch32-unknown-none-softfloat",
3939
"riscv32im-jolt-zkvm-elf",
4040
"riscv64imac-jolt-zkvm-elf",
41+
"riscv64im-jolt-zkvm-elf",
4142
];
4243

4344
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM

src/tools/build-manifest/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ static TARGETS: &[&str] = &[
147147
"riscv32ima-unknown-none-elf",
148148
"riscv32imc-unknown-none-elf",
149149
"riscv64imac-jolt-zkvm-elf",
150+
"riscv64im-jolt-zkvm-elf",
150151
"riscv32imac-unknown-none-elf",
151152
"riscv32imafc-unknown-none-elf",
152153
"riscv32gc-unknown-linux-gnu",

0 commit comments

Comments
 (0)