Skip to content

Commit b7b8aa7

Browse files
committed
[SOL] Split SBPF targets (#117)
1 parent 270bb9d commit b7b8aa7

File tree

17 files changed

+146
-43
lines changed

17 files changed

+146
-43
lines changed

Diff for: build.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ esac
2020
if [ "$1" == "--llvm" ]; then
2121
rm -f build/${HOST_TRIPLE}/llvm/llvm-finished-building;
2222
fi
23-
./x.py build --stage 1 --target ${HOST_TRIPLE},sbf-solana-solana
23+
./x.py build --stage 1 --target ${HOST_TRIPLE},sbf-solana-solana,sbpf-solana-solana,sbpfv1-solana-solana,sbpfv2-solana-solana,sbpfv3-solana-solana

Diff for: compiler/rustc_codegen_ssa/src/back/link.rs

-8
Original file line numberDiff line numberDiff line change
@@ -1987,14 +1987,6 @@ fn add_link_script(cmd: &mut dyn Linker, sess: &Session, tmpdir: &Path, crate_ty
19871987

19881988
let path = tmpdir.join(file_name);
19891989

1990-
let script = if sess.target.arch == "sbf" &&
1991-
sess.opts.cg.target_cpu.as_ref()
1992-
.unwrap_or(&sess.target.cpu.as_ref().to_string()) == "v3" {
1993-
&sess.target.sbf_v3_link_script.as_ref().unwrap()
1994-
} else {
1995-
script
1996-
};
1997-
19981990
if let Err(error) = fs::write(&path, script.as_ref()) {
19991991
sess.dcx().emit_fatal(errors::LinkScriptWriteFailure { path, error });
20001992
}

Diff for: compiler/rustc_target/src/spec/base/sbf_base.rs

+40-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::abi::Endian;
2-
use crate::spec::{Cc, cvs, LinkerFlavor, Lld, PanicStrategy, TargetOptions};
2+
use crate::spec::{Cc, cvs, LinkerFlavor, Lld, PanicStrategy, Target, TargetOptions};
33

44
const V0_LINKER_SCRIPT: &str = r"
55
PHDRS
@@ -81,12 +81,31 @@ PHDRS
8181
}
8282
";
8383

84-
pub fn opts() -> TargetOptions {
84+
pub fn opts(version: &'static str) -> TargetOptions {
8585
let pre_link_args = TargetOptions::link_args(
8686
LinkerFlavor::Gnu(Cc::No, Lld::No),
8787
&["--threads=1", "-z", "notext", "--Bdynamic"],
8888
);
8989

90+
let linker_script = if version == "v3" {
91+
V3_LINKER_SCRIPT
92+
} else {
93+
V0_LINKER_SCRIPT
94+
};
95+
let cpu = if version == "v0" {
96+
"generic"
97+
} else {
98+
version
99+
};
100+
101+
let features = if version == "v3" {
102+
"+static-syscalls"
103+
} else if version == "v0" {
104+
"+store-imm,+jmp-ext"
105+
} else {
106+
""
107+
};
108+
90109
TargetOptions {
91110
allow_asm: true,
92111
c_int_width: "64".into(),
@@ -99,8 +118,7 @@ pub fn opts() -> TargetOptions {
99118
env: "".into(),
100119
executables: true,
101120
families: cvs!["solana"],
102-
features: "+store-imm,+jmp-ext".into(),
103-
link_script: Some(V0_LINKER_SCRIPT.into()),
121+
link_script: Some(linker_script.into()),
104122
linker: Some("rust-lld".into()),
105123
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
106124
main_needs_argc_argv: false,
@@ -115,7 +133,24 @@ pub fn opts() -> TargetOptions {
115133
singlethread: true,
116134
vendor: "solana".into(),
117135
c_enum_min_bits: Some(32),
118-
sbf_v3_link_script: Some(V3_LINKER_SCRIPT.into()),
136+
cpu: cpu.into(),
137+
features: features.into(),
119138
.. Default::default()
120139
}
121140
}
141+
142+
pub fn sbf_target(version: &'static str) -> Target {
143+
Target {
144+
llvm_target: "sbf".into(),
145+
pointer_width: 64,
146+
arch: "sbf".into(),
147+
data_layout: "e-m:e-p:64:64-i64:64-n32:64-S128".into(),
148+
options: opts(version),
149+
metadata: crate::spec::TargetMetadata {
150+
description: None,
151+
tier: None,
152+
host_tools: None,
153+
std: None,
154+
},
155+
}
156+
}

Diff for: compiler/rustc_target/src/spec/mod.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -1908,6 +1908,11 @@ supported_targets! {
19081908
("bpfeb-unknown-none", bpfeb_unknown_none),
19091909
("bpfel-unknown-none", bpfel_unknown_none),
19101910
("sbf-solana-solana", sbf_solana_solana),
1911+
("sbpf-solana-solana", sbpf_solana_solana),
1912+
("sbpfv1-solana-solana", sbpfv1_solana_solana),
1913+
("sbpfv2-solana-solana", sbpfv2_solana_solana),
1914+
("sbpfv3-solana-solana", sbpfv3_solana_solana),
1915+
19111916

19121917
("armv6k-nintendo-3ds", armv6k_nintendo_3ds),
19131918

@@ -2493,9 +2498,6 @@ pub struct TargetOptions {
24932498

24942499
/// Whether the targets supports -Z small-data-threshold
24952500
small_data_threshold_support: SmallDataThresholdSupport,
2496-
2497-
/// SBFv3 linker script
2498-
pub sbf_v3_link_script: Option<StaticCow<str>>,
24992501
}
25002502

25012503
/// Add arguments for the given flavor and also for its "twin" flavors
@@ -2720,7 +2722,6 @@ impl Default for TargetOptions {
27202722
entry_abi: Conv::C,
27212723
supports_xray: false,
27222724
small_data_threshold_support: SmallDataThresholdSupport::DefaultForArch,
2723-
sbf_v3_link_script: None,
27242725
}
27252726
}
27262727
}
@@ -3459,7 +3460,6 @@ impl Target {
34593460
key!(entry_name);
34603461
key!(entry_abi, Conv)?;
34613462
key!(supports_xray, bool);
3462-
key!(sbf_v3_link_script, optional);
34633463

34643464
base.update_from_cli();
34653465

@@ -3736,7 +3736,6 @@ impl ToJson for Target {
37363736
target_option_val!(entry_name);
37373737
target_option_val!(entry_abi);
37383738
target_option_val!(supports_xray);
3739-
target_option_val!(sbf_v3_link_script);
37403739

37413740
// Serializing `-Clink-self-contained` needs a dynamic key to support the
37423741
// backwards-compatible variants.

Diff for: compiler/rustc_target/src/spec/targets/sbf_solana_solana.rs

+1-13
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,5 @@ use crate::spec::Target;
22
use crate::spec::base::sbf_base;
33

44
pub fn target() -> Target {
5-
Target {
6-
llvm_target: "sbf".into(),
7-
pointer_width: 64,
8-
arch: "sbf".into(),
9-
data_layout: "e-m:e-p:64:64-i64:64-n32:64-S128".into(),
10-
options: sbf_base::opts(),
11-
metadata: crate::spec::TargetMetadata {
12-
description: None,
13-
tier: None,
14-
host_tools: None,
15-
std: None,
16-
},
17-
}
5+
sbf_base::sbf_target("v0")
186
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::spec::Target;
2+
use crate::spec::base::sbf_base;
3+
4+
pub fn target() -> Target {
5+
sbf_base::sbf_target("v0")
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::spec::Target;
2+
use crate::spec::base::sbf_base;
3+
4+
pub fn target() -> Target {
5+
sbf_base::sbf_target("v1")
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::spec::Target;
2+
use crate::spec::base::sbf_base;
3+
4+
pub fn target() -> Target {
5+
sbf_base::sbf_target("v2")
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::spec::Target;
2+
use crate::spec::base::sbf_base;
3+
4+
pub fn target() -> Target {
5+
sbf_base::sbf_target("v3")
6+
}

Diff for: src/bootstrap/src/utils/cc_detect.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,11 @@ fn default_compiler(
229229
}
230230
}
231231

232-
"sbf-solana-solana" => {
232+
"sbf-solana-solana"
233+
| "sbpf-solana-solana"
234+
| "sbpfv1-solana-solana"
235+
| "sbpfv2-solana-solana"
236+
| "sbpfv3-solana-solana" => {
233237
Some(build.llvm_bin(target).join(compiler.clang()))
234238
}
235239

Diff for: src/ci/docker/host-x86_64/sbf-solana-solana-v1/Dockerfile renamed to src/ci/docker/host-x86_64/sbpf-solana-solana/Dockerfile

+2-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ ENV RUST_CONFIGURE_ARGS \
3737
--set rust.lld \
3838
--set llvm.clang
3939

40-
ENV SCRIPT CARGO_TARGET_SBF_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
41-
CARGO_TARGET_SBF_SOLANA_SOLANA_RUSTFLAGS=\"-C target_cpu=v1\" \
40+
ENV SCRIPT CARGO_TARGET_SBPF_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
4241
LLVM_HOME=/checkout/obj/build/x86_64-unknown-linux-gnu/llvm \
4342
PATH="${HOME}/.cargo/bin:${PATH}" \
44-
python3 /checkout/x.py --stage 1 test --host='' --target sbf-solana-solana \
43+
python3 /checkout/x.py --stage 1 test --host='' --target sbpf-solana-solana \
4544
library/core

Diff for: src/ci/docker/host-x86_64/sbf-solana-solana-v2/Dockerfile renamed to src/ci/docker/host-x86_64/sbpfv1-solana-solana/Dockerfile

+2-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ ENV RUST_CONFIGURE_ARGS \
3737
--set rust.lld \
3838
--set llvm.clang
3939

40-
ENV SCRIPT CARGO_TARGET_SBF_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
41-
CARGO_TARGET_SBF_SOLANA_SOLANA_RUSTFLAGS=\"-C target_cpu=v2\" \
40+
ENV SCRIPT CARGO_TARGET_SBPFV1_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
4241
LLVM_HOME=/checkout/obj/build/x86_64-unknown-linux-gnu/llvm \
4342
PATH="${HOME}/.cargo/bin:${PATH}" \
44-
python3 /checkout/x.py --stage 1 test --host='' --target sbf-solana-solana \
43+
python3 /checkout/x.py --stage 1 test --host='' --target sbpfv1-solana-solana \
4544
library/core

Diff for: src/ci/docker/host-x86_64/sbf-solana-solana-v3/Dockerfile renamed to src/ci/docker/host-x86_64/sbpfv2-solana-solana/Dockerfile

+2-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ ENV RUST_CONFIGURE_ARGS \
3737
--set rust.lld \
3838
--set llvm.clang
3939

40-
ENV SCRIPT CARGO_TARGET_SBF_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
41-
CARGO_TARGET_SBF_SOLANA_SOLANA_RUSTFLAGS=\"-C target_cpu=v3\" \
40+
ENV SCRIPT CARGO_TARGET_SBPFV2_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
4241
LLVM_HOME=/checkout/obj/build/x86_64-unknown-linux-gnu/llvm \
4342
PATH="${HOME}/.cargo/bin:${PATH}" \
44-
python3 /checkout/x.py --stage 1 test --host='' --target sbf-solana-solana \
43+
python3 /checkout/x.py --stage 1 test --host='' --target sbpfv2-solana-solana \
4544
library/core
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
FROM ubuntu:22.04
2+
3+
ARG DEBIAN_FRONTEND=noninteractive
4+
5+
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
6+
g++ \
7+
make \
8+
ninja-build \
9+
file \
10+
curl \
11+
ca-certificates \
12+
python3 \
13+
git \
14+
cmake \
15+
sudo \
16+
gdb \
17+
libssl-dev \
18+
pkg-config \
19+
xz-utils
20+
21+
ENV RUSTUP_INIT_SKIP_PATH_CHECK="yes"
22+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
23+
24+
RUN PATH="${HOME}/.cargo/bin:${PATH}" \
25+
cargo install --git https://github.com/anza-xyz/cargo-run-solana-tests.git \
26+
--rev c5df324a62a5e03d2ff5f9efbdbf5a4e4182325e \
27+
--bin cargo-run-solana-tests --root /usr/local
28+
29+
COPY scripts/sccache.sh /scripts/
30+
RUN sh /scripts/sccache.sh
31+
32+
# We are disabling CI LLVM since this builder is intentionally using a host
33+
# LLVM, rather than the typical src/llvm-project LLVM.
34+
ENV NO_DOWNLOAD_CI_LLVM 1
35+
36+
ENV RUST_CONFIGURE_ARGS \
37+
--set rust.lld \
38+
--set llvm.clang
39+
40+
ENV SCRIPT CARGO_TARGET_SBPFV3_SOLANA_SOLANA_RUNNER=\"cargo-run-solana-tests --heap-size 104857600\" \
41+
LLVM_HOME=/checkout/obj/build/x86_64-unknown-linux-gnu/llvm \
42+
PATH="${HOME}/.cargo/bin:${PATH}" \
43+
python3 /checkout/x.py --stage 1 test --host='' --target sbpfv3-solana-solana \
44+
library/core

Diff for: src/doc/rustc/src/platform-support.md

+4
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ target | std | host | notes
370370
[`riscv64-wrs-vxworks`](platform-support/vxworks.md) | ✓ | |
371371
[`s390x-unknown-linux-musl`](platform-support/s390x-unknown-linux-musl.md) | | | S390x Linux (kernel 3.2, musl 1.2.3)
372372
`sbf-solana-solana` | ✓ | | SBF
373+
`sbpf-solana-solana` | ✓ | | SBPF
374+
`sbpfv1-solana-solana` | ✓ | | SBPF v1
375+
`sbpfv2-solana-solana` | ✓ | | SBPF v2
376+
`sbpfv3-solana-solana` | ✓ | | SBPF v3
373377
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
374378
[`sparc-unknown-none-elf`](./platform-support/sparc-unknown-none-elf.md) | * | | Bare 32-bit SPARC V7+
375379
[`sparc64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/sparc64

Diff for: src/tools/build-manifest/src/main.rs

+4
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@ static TARGETS: &[&str] = &[
146146
"riscv64gc-unknown-linux-musl",
147147
"s390x-unknown-linux-gnu",
148148
"sbf-solana-solana",
149+
"sbpf-solana-solana",
150+
"sbpfv1-solana-solana",
151+
"sbpfv2-solana-solana",
152+
"sbpfv3-solana-solana",
149153
"sparc64-unknown-linux-gnu",
150154
"sparcv9-sun-solaris",
151155
"sparc-unknown-none-elf",

Diff for: tests/assembly/targets/targets-elf.rs

+12
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,18 @@
669669
//@ revisions: sbf_solana_solana
670670
//@ [sbf_solana_solana] compile-flags: --target sbf-solana-solana
671671
//@ [sbf_solana_solana] needs-llvm-components: sbf
672+
//@ revisions: sbpf_solana_solana
673+
//@ [sbpf_solana_solana] compile-flags: --target sbpf-solana-solana
674+
//@ [sbpf_solana_solana] needs-llvm-components: sbf
675+
//@ revisions: sbpfv1_solana_solana
676+
//@ [sbpfv1_solana_solana] compile-flags: --target sbpfv1-solana-solana
677+
//@ [sbpfv1_solana_solana] needs-llvm-components: sbf
678+
//@ revisions: sbpfv2_solana_solana
679+
//@ [sbpfv2_solana_solana] compile-flags: --target sbpfv2-solana-solana
680+
//@ [sbpfv2_solana_solana] needs-llvm-components: sbf
681+
//@ revisions: sbpfv3_solana_solana
682+
//@ [sbpfv3_solana_solana] compile-flags: --target sbpfv3-solana-solana
683+
//@ [sbpfv3_solana_solana] needs-llvm-components: sbf
672684

673685
// Sanity-check that each target can produce assembly code.
674686

0 commit comments

Comments
 (0)