# 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 building cheriot-rtos functional tests to run on sencha

SENCHA_TEST_DIR := $(OUT)/cheriot/sencha/test-suite
SENCHA_TEST := $(SENCHA_TEST_DIR)/release/cheriot/cheriot/release/test-suite

TEST_FLASH_RELEASE=$(CHERIOT_OUT_RELEASE)/test_flash.tar

# XXX symlink cheriot fw to "kernel" to satisfy elfloader
$(TEST_FLASH_RELEASE): $(MATCHA_BUNDLE_RELEASE) $(SENCHA_TEST) | $(TMP_RELEASE)
	cp -f $(MATCHA_BUNDLE_RELEASE) $(TMP_RELEASE)/matcha-tock-bundle
	${C_PREFIX}strip $(TMP_RELEASE)/matcha-tock-bundle
	${C_PREFIX}objcopy -O binary -g $(TMP_RELEASE)/matcha-tock-bundle $(TMP_RELEASE)/matcha-tock-bundle.bin
	ln -sf $(SENCHA_TEST) $(TMP_RELEASE)/kernel
	tar -C $(TMP_RELEASE) -cvhf $@ matcha-tock-bundle.bin kernel
test_flash_release: sencha-test $(TEST_FLASH_RELEASE)

## Runs the cheriot-rtos testbench in renode on sencha
sencha-testbench: test_flash_release
	${MAKE} \
		__SENCHA_TAR="@${TEST_FLASH_RELEASE}" \
		__SENCHA_CHERIOT_ELF="@${TMP_RELEASE}/kernel" \
		__sencha-simulate

## Version of the `sencha-testbench` target that also enables the simulator command
## line interface on port 4567. To access the simulator use something like
## telnet localhost 4567. Note renode will block until the cli is connected.
sencha-testbench+cli: test_flash_release
	${MAKE} \
		__SENCHA_TAR="@${TEST_FLASH_RELEASE}" \
		__SENCHA_CHERIOT_ELF="@${TMP_RELEASE}/kernel" \
		__sencha-simulate+cli

## Generates the cheriot-rtos test-suite firmware
sencha-test:
	${MAKE} \
		CHERIOT_BOARD=sencha \
		CHERIOT_OUT_DIR=${SENCHA_TEST_DIR} \
		CHERIOT_FIRMWARE_SRC_DIR=${CHERIOT_SRC_DIR}/tests \
		CHERIOT_FIRMWARE_RELEASE=$(SENCHA_TEST) \
		$(SENCHA_TEST)

## Cleans all build artifacts for the cheriot-rtos test suite built for sencha
sencha-test-clean:
	rm -rf ${SENCHA_TEST_DIR} ${TMP_RELEASE}

.PHONY:: sencha-testbench sencha-testbench+cli
.PHONY:: test_flash_release
.PHONY:: sencha-test sencha-test-clean
