Add cheriot-baremetal toolchain support
This adds support for the cheriot-baremetal ABI intended for code
that runs before the CHERIoT loader. This can be selected using
--config=cheriot-baremetal on the cmd line.
Change-Id: I86a1c4b9b68292cba2708b3c4e50e456c35b87ff
diff --git a/.bazelrc b/.bazelrc
index bf3b43b..daac0b0 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -28,6 +28,7 @@
build:kelvin --platforms=//platforms/riscv32:kelvin
build:sparrow --platforms=@matcha//platforms/riscv32:sparrow
build:cheriot --platforms=@matcha//platforms/cheri/riscv32:cheriot
+build:cheriot-baremetal --platforms=@matcha//platforms/cheri/riscv32:cheriot-baremetal
# Support airgapped build environment
build:airgapped_env --//rules:build_env='airgapped'
diff --git a/constraints/extension/BUILD.bazel b/constraints/extension/BUILD.bazel
index f92a5c9..63ba63b 100644
--- a/constraints/extension/BUILD.bazel
+++ b/constraints/extension/BUILD.bazel
@@ -6,3 +6,7 @@
name = "cheri",
constraint_setting = ":extension",
)
+constraint_value(
+ name = "cheri-baremetal",
+ constraint_setting = ":extension",
+)
diff --git a/platforms/cheri/riscv32/BUILD.bazel b/platforms/cheri/riscv32/BUILD.bazel
index 0a72252..14ca641 100644
--- a/platforms/cheri/riscv32/BUILD.bazel
+++ b/platforms/cheri/riscv32/BUILD.bazel
@@ -7,3 +7,10 @@
"//constraints/extension:cheri",
],
)
+platform(
+ name = "cheriot-baremetal",
+ constraint_values = [
+ "@platforms//cpu:riscv32",
+ "//constraints/extension:cheri-baremetal",
+ ],
+)
diff --git a/platforms/cheri/riscv32/devices.bzl b/platforms/cheri/riscv32/devices.bzl
index a0670c2..31a928f 100644
--- a/platforms/cheri/riscv32/devices.bzl
+++ b/platforms/cheri/riscv32/devices.bzl
@@ -25,4 +25,27 @@
),
},
),
+ device_config(
+ name = "cheriot-baremetal",
+ architecture = "rv32imcxcheri",
+ feature_set = "//platforms/cheri/riscv32/features:rv32imcxcheri",
+ constraints = [
+ "@platforms//cpu:riscv32",
+ "//constraints/extension:cheri-baremetal",
+ ],
+ substitutions = {
+ "ARCHITECTURE": "rv32imcxcheri",
+ "ABI": "cheriot-baremetal",
+ "CMODEL": "medany",
+ "ENDIAN": "little",
+ "TARGET": "riscv32-unknown-elf",
+ "[STACK_PROTECTOR]": "",
+ "[SYSTEM_LIBRARY_PATHS]": listify_flags(
+ "-L{}",
+ [
+ "external/cheriot-llvm/baremetal/baremetal-riscv32-purecap/riscv32-unknown-elf/lib/",
+ ],
+ ),
+ },
+ ),
]