| # Copyright 2024 Google 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 running OTTF tests on sencha |
| |
| OTTF_FLASH_RELEASE := $(CHERIOT_OUT_RELEASE)/ottf_flash.tar |
| |
| # Bazel target for the test case to run; override this on the cmd line; e.g. |
| # m sencha-ottf OTTF_SMC=smc_tlul_mailbox_test_cheri |
| |
| OTTF_SEC := tlul_mailbox_test |
| OTTF_SMC := smc_tlul_mailbox_test_cheri |
| |
| # NB: the SEC fw image is named "matcha-tock-bundle.bin" to satisfy elfloader |
| __sencha_ottf_sec: | ${TMP_RELEASE} |
| cd $(SENCHA_SRC_DIR) && \ |
| bazel build //sw/device/tests:${OTTF_SEC} |
| cd $(SENCHA_SRC_DIR) && \ |
| find "bazel-matcha/" -wholename "*tests/${OTTF_SEC}_fpga_nexus.bin" \ |
| -exec cp -f '{}' "${TMP_RELEASE}"/ottf_sec.bin \; |
| |
| |
| # Helper to build the ELF image for the SMC and copy it to the tmp dir |
| # for constructing the tarball used during boot. |
| # NB: the SMC fw image is named "kernel" to satisfy elfloader |
| __sencha_ottf_smc: | ${TMP_RELEASE} |
| cd $(SENCHA_SRC_DIR) && \ |
| bazel build -s //sw/device/tests/smc:${OTTF_SMC} |
| cd $(SENCHA_SRC_DIR) && \ |
| find "bazel-bin/" -wholename "*smc/${OTTF_SMC}.elf" \ |
| -exec cp -f '{}' "${TMP_RELEASE}"/ottf_smc.elf \; |
| cd $(SENCHA_SRC_DIR) && \ |
| find "bazel-matcha/" -wholename "*smc/${OTTF_SMC}.elf" \ |
| -exec $(CACHE)/cheriot-tools/bin/llvm-objdump -glxsdrS --demangle '{}' \ |
| > $(TMP_RELEASE)/$(OTTF_SMC).dump \; |
| __sencha_ottf_smc-clean: |
| cd $(SENCHA_SRC_DIR) && bazel clean --expunge |
| |
| $(OTTF_FLASH_RELEASE): __sencha_ottf_sec __sencha_ottf_smc |
| tar -C $(TMP_RELEASE) -cvhf $@ ottf_sec.bin ottf_smc.elf |
| ottf_flash_release: $(OTTF_FLASH_RELEASE) |
| |
| SENCHA_OTTF_RESC := sim/config/sencha-ottf.resc |
| |
| # OTTF-specific scripts that side-load the SMC firmware. We |
| # construct them in make to avoid shell quoting/escape issues. |
| # The only part done in the shell uses OTTF_FLASH_RELEASE |
| # which is a dynamically calculated make variable. |
| OTTF_SCRIPT:= $$repl_file = @${SENCHA_REPL}; |
| OTTF_SCRIPT+= $$sc_bin =@$(TMP_RELEASE)/ottf_sec.bin; |
| OTTF_SCRIPT+= $$cheriot_elf = @${TMP_RELEASE}/ottf_smc.elf; |
| OTTF_SCRIPT+= i @${SENCHA_OTTF_RESC}; |
| OTTF_SCRIPT+= $(RENODE_PRESTART_CMDS) |
| |
| OTTF_CLI_SCRIPT:= $$repl_file = @${SENCHA_REPL}; |
| OTTF_CLI_SCRIPT+= $$sc_bin =@$(TMP_RELEASE)/ottf_sec.bin; |
| OTTF_CLI_SCRIPT+= $$cheriot_elf = @${TMP_RELEASE}/ottf_smc.elf; |
| OTTF_CLI_SCRIPT+= $$cli_port=4567; |
| OTTF_CLI_SCRIPT+= $$wait_for_cli=true; |
| OTTF_CLI_SCRIPT+= i @${SENCHA_OTTF_RESC}; |
| OTTF_CLI_SCRIPT+= $(RENODE_PRESTART_CMDS) |
| |
| # XXX $tar is not needed but the .resc loads it |
| sencha-ottf: renode cheriot_sim kelvin_sim multihart_boot_rom ottf_flash_release |
| $(RENODE_CMD) -e '$$tar=@${OTTF_FLASH_RELEASE}; ${OTTF_SCRIPT} start' |
| |
| sencha-ottf+cli: renode cheriot_sim kelvin_sim multihart_boot_rom ottf_flash_release |
| $(RENODE_CMD) -e '$$tar=@${OTTF_FLASH_RELEASE}; ${OTTF_CLI_SCRIPT} start' |
| |
| sencha-ottf-clean: |
| cd $(SENCHA_SRC_DIR) && bazel clean --expunge |
| rm -rf ${TMP_RELEASE} |