sencha: refactor cheriot-testbench and add cheriot-examples - refactor cheriot-testbench support into cheriot-tests.mk - add cheriot-examples.mk that builds the cheriot-rtos examples; there are no targets (yet) to run the firmware images but one can use the sim_cheriot_renode shell function Bypass-Presubmit-Reason: no sencha CI tests Change-Id: Idea8d5b2b4b2be1a0926ebb4447b06eb0d6259ad
diff --git a/platforms/sencha/cheriot-examples.mk b/platforms/sencha/cheriot-examples.mk new file mode 100644 index 0000000..4317b16 --- /dev/null +++ b/platforms/sencha/cheriot-examples.mk
@@ -0,0 +1,72 @@ +# Copyright 2024 Googl4 LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Support for building examples from cheriot-rtos + +EXAMPLES_DIR := $(OUT)/cheriot/examples + +# XXX too fragile +# Common logic for building an example +__cheriot-example: + ${MAKE} \ + CHERIOT_BOARD=sail \ + CHERIOT_OUT_DIR="${OUT}/cheriot/examples/${EXAMPLE}" \ + CHERIOT_FIRMWARE_SRC_DIR=${CHERIOT_SRC_DIR}/examples/*.${EXAMPLE} \ + CHERIOT_FIRMWARE_RELEASE=$(EXAMPLES_DIR)/${EXAMPLE}/release/cheriot/cheriot/release/$(EXAMPLE) \ + $(EXAMPLES_DIR)/${EXAMPLE}/release/cheriot/cheriot/release/$(EXAMPLE) + +cheriot-example-hello-world: + ${MAKE} EXAMPLE=hello_world __cheriot-example +cheriot-example-hello-compartment: + ${MAKE} EXAMPLE=hello_compartment __cheriot-example +cheriot-example-hello-safe-compartment: + ${MAKE} EXAMPLE=hello_safe_compartment __cheriot-example +cheriot-example-temporal_safety: + ${MAKE} EXAMPLE=temporal_safety __cheriot-example +cheriot-example-sealing: + ${MAKE} EXAMPLE=sealing __cheriot-example +cheriot-example-producer-consumer: + ${MAKE} EXAMPLE=producer-consumer __cheriot-example +cheriot-example-error_handling: + ${MAKE} EXAMPLE=error_handling __cheriot-example +cheriot-example-memory_safety: + ${MAKE} EXAMPLE=memory_safety __cheriot-example +cheriot-example-javascript: + ${MAKE} EXAMPLE=javascript __cheriot-example + +## Builds firmware for all cheriot-rtos examples +cheriot-examples: cheriot-example-hello-world \ + cheriot-example-hello-compartment \ + cheriot-example-hello-safe-compartment \ + cheriot-example-temporal_safety \ + cheriot-example-sealing \ + cheriot-example-producer-consumer \ + cheriot-example-error_handling \ + cheriot-example-memory_safety \ + cheriot-example-javascript + +## Cleans all build artifacts for cheriot-rtos examples +cheriot-examples-clean: + rm -rf ${EXAMPLES_DIR} + +.PHONY:: cheriot-examples +.PHONY:: cheriot-example-hello-world +.PHONY:: cheriot-example-hello-compartment +.PHONY:: cheriot-example-hello-safe-compartment +.PHONY:: cheriot-example-temporal_safety +.PHONY:: cheriot-example-sealing +.PHONY:: cheriot-example-producer-consumer +.PHONY:: cheriot-example-error_handling +.PHONY:: cheriot-example-memory_safety +.PHONY:: cheriot-example-javascript
diff --git a/platforms/sencha/cheriot-tests.mk b/platforms/sencha/cheriot-tests.mk new file mode 100644 index 0000000..309e1a7 --- /dev/null +++ b/platforms/sencha/cheriot-tests.mk
@@ -0,0 +1,37 @@ +# Copyright 2024 Googl4 LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Support for building cheriot-rtos functional tests + +CHERIOT_TEST_DIR := $(OUT)/cheriot/test-suite +CHERIOT_TEST := $(CHERIOT_TEST_DIR)/release/cheriot/cheriot/release/test-suite + +## Runs the cheriot-rtos testbench in renode +cheriot-testbench: renode cheriot_sim cheriot-test + $(RENODE_CMD) -e "i @${CHERIOT_RESC_RELEASE}; start" + +## Generates the cheriot-rtos test-suite firmware +cheriot-test: + ${MAKE} \ + CHERIOT_BOARD=sail \ + CHERIOT_OUT_DIR="${OUT}/cheriot/test-suite" \ + CHERIOT_FIRMWARE_SRC_DIR=${CHERIOT_SRC_DIR}/tests \ + CHERIOT_FIRMWARE_RELEASE=$(CHERIOT_TEST) \ + $(CHERIOT_TEST) + +## Cleans all build artifacts for the cheriot-rtos test suite +cheriot-tests-clean: + rm -rf ${CHERIOT_TEST_DIR} + +.PHONY:: cheriot-test cheriot-test-clean
diff --git a/platforms/sencha/cheriot.mk b/platforms/sencha/cheriot.mk index 150fd32..8481826 100644 --- a/platforms/sencha/cheriot.mk +++ b/platforms/sencha/cheriot.mk
@@ -37,8 +37,6 @@ #CHERIOT_FIRMWARE_DEBUG := $(CHERIOT_OUT_DEBUG)/cheriot/cheriot/debug/${CHERIOT_FIRMWARE}-firmware CHERIOT_FIRMWARE_RELEASE := $(CHERIOT_OUT_RELEASE)/cheriot/cheriot/release/${CHERIOT_FIRMWARE}-firmware -CHERIOT_TEST := $(CHERIOT_OUT_RELEASE)/cheriot/cheriot/release/test-suite - # TODO: add CHERIOT_FIRMWARE_SRC_DIR (not currently defined in time to use here) CHERIOT_SOURCES := $(shell find $(CHERIOT_SRC_DIR) \(\ -name \*.rs -or \ @@ -91,7 +89,7 @@ ## Cleans all CHERIoT build artifacts for the current platform # TODO(sleffler): cheriot-clean-headers once they are per-platform -cheriot-clean: +cheriot-clean: cheriot-tests-clean cheriot-examples-clean rm -rf $(CHERIOT_OUT_DIR) $(CHERIOT_OUT_DEBUG): @@ -137,20 +135,14 @@ ## Generates CHERIoT build artifacts setup for release cheriot-bundle-release: $(CHERIOT_FIRMWARE_RELEASE) -## Generates CHERIoT provided test-suite binary -cheriot-test: - ${MAKE} \ - CHERIOT_BOARD=sail \ - CHERIOT_FIRMWARE_SRC_DIR=${CHERIOT_SRC_DIR}/tests \ - CHERIOT_FIRMWARE_RELEASE=$(CHERIOT_TEST) \ - ${CHERIOT_TEST} - ## Generates both debug & release CHERIoT build artifacts cheriot: cheriot-bundle-debug cheriot-bundle-release +include $(ROOTDIR)/build/platforms/sencha/cheriot-examples.mk +include $(ROOTDIR)/build/platforms/sencha/cheriot-tests.mk + .PHONY:: cheriot cheriot_check cheriot-clean .PHONY:: cheriot-bundle-debug cheriot-bundle-release -.PHONY:: cheriot-test .PHONY:: cheriot-builtins-debug cheriot-builtins-release .PHONY:: cheriot-gen-headers cheriot-clean-headers .PHONY:: cheriot-build-debug-prepare cheriot-build-release-prepare
diff --git a/platforms/sencha/sim.mk b/platforms/sencha/sim.mk index 018e442..539ad53 100644 --- a/platforms/sencha/sim.mk +++ b/platforms/sencha/sim.mk
@@ -62,12 +62,6 @@ SENCHA_REPL=sim/config/platforms/sencha.repl -## Run the testbench in standalone cheriot -cheriot-testbench: renode cheriot_sim $(CHERIOT_TEST) - $(RENODE_CMD) -e "\ - i @${CHERIOT_RESC_RELEASE}; \ - start" - ## Launches an end-to-end build of the system and starts Renode # # This top-level target triggers the `matcha_tock_release`, `cheriot`, `renode`,