#!/bin/bash
#
# 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.

# Firmware image to build & load at boot.
ifeq ($(CHERIOT_FIRMWARE),)
$(error "CHERIOT_FIRMWARE not set. Did build/platforms/${PLATFORM}/setup.sh get sourced?")
endif
CHERIOT_FIRMWARE_SRC_DIR	:= ${ROOTDIR}/hw/matcha/sw/device/cheriot/${CHERIOT_FIRMWARE}

# Optional xmake config options, typically useful for enabling debugging
# otherwise compiled out.
#CHERIOT_DEBUG_CONFIG_OPTIONS=--debug-scheduler=true --debug-allocator=true
#CHERIOT_RELEASE_CONFIG_OPTIONS=--debug-scheduler=true --debug-allocator=true

# Platform-specific requirements handled by "m prereqs"
PLATFORM_PYTHON_DEPS=\
    ${ROOTDIR}/hw/opentitan-upstream/python-requirements.txt
PLATFORM_APT_DEPS=\
    ${ROOTDIR}/hw/opentitan-upstream/apt-requirements.txt

# Put host tool targets first.
include $(ROOTDIR)/build/platforms/nexus/renode.mk
include $(ROOTDIR)/build/platforms/sencha/cheriot.mk
include $(ROOTDIR)/build/platforms/sencha/riscv_toolchain.mk
include $(ROOTDIR)/build/platforms/sencha/sencha_hw.mk

include $(ROOTDIR)/build/platforms/nexus/iree.mk
include $(ROOTDIR)/build/platforms/nexus/kelvin.mk
include $(ROOTDIR)/build/platforms/nexus/opentitan_sw.mk
include $(ROOTDIR)/build/platforms/nexus/opentitan_hw.mk
include $(ROOTDIR)/build/platforms/nexus/matcha_hw.mk
include $(ROOTDIR)/build/platforms/nexus/tock.mk

# Put simulation targets at the end
include $(ROOTDIR)/build/platforms/sencha/sim.mk

# Driver include files auto-generated from opentitan definitions.

ifeq ($(OPENTITAN_SOURCE),)
$(error "OPENTITAN_SOURCE not set. Did build/platforms/sencha/setup.sh get sourced?")
endif

ifeq ($(OPENTITAN_GEN_DIR),)
$(error "OPENTITAN_GEN_DIR not set. Did build/platforms/sencha/setup.sh get sourced?")
endif

$(OPENTITAN_GEN_DIR):
	mkdir -p $(OPENTITAN_GEN_DIR)

# Matcha hw config #defines generated from RTL

I2S_HEADER=$(OPENTITAN_GEN_DIR)/i2s_regs.h
ML_TOP_HEADER=$(OPENTITAN_GEN_DIR)/ml_top_regs.h
TLUL_MAILBOX_HEADER=$(OPENTITAN_GEN_DIR)/tlul_mailbox_regs.h
UART_HEADER=$(OPENTITAN_GEN_DIR)/uart_regs.h

$(I2S_HEADER): $(REGTOOL) $(I2S_HJSON) | $(OPENTITAN_GEN_DIR)
	$(REGTOOL) -D -o $@ $(I2S_HJSON)
$(ML_TOP_HEADER): $(REGTOOL) $(ML_TOP_HJSON) | $(OPENTITAN_GEN_DIR)
	$(REGTOOL) -D -o $@ $(ML_TOP_HJSON)
$(TLUL_MAILBOX_HEADER): $(REGTOOL) $(MBOX_HJSON) | $(OPENTITAN_GEN_DIR)
	$(REGTOOL) -D -o $@ $(MBOX_HJSON)
$(UART_HEADER): $(REGTOOL) $(UART_HJSON) | $(OPENTITAN_GEN_DIR)
	$(REGTOOL) -D -o $@ $(UART_HJSON)

TOP_MATCHA_DIR=${CHERIOT_OUT_DIR}/top_matcha
TOP_MATCHA_MEMORY_HEADER=$(TOP_MATCHA_DIR)/sw/autogen/top_matcha_memory.h
TOP_MATCHA_IRQ_HEADER=$(TOP_MATCHA_DIR)/sw/autogen/top_matcha_smc_irq.h
# NB: could depend on the templates instead
TOPGEN_MATCHA=${ROOTDIR}/hw/matcha/util/topgen_matcha.py

${TOP_MATCHA_DIR}:
	mkdir -p $(TOP_MATCHA_DIR)

# NB: no way to generate just the files we need
$(TOP_MATCHA_IRQ_HEADER): $(TOPGEN_MATCHA) ${TOP_MATCHA_DIR} $(TOP_MATCHA_HJSON)
	PYTHONPATH=${OPENTITAN_SOURCE}/util/ ${TOPGEN_MATCHA} -t ${TOP_MATCHA_HJSON} -o ${TOP_MATCHA_DIR}/ --top-only
$(TOP_MATCHA_MEMORY_HEADER): $(TOPGEN_MATCHA) ${TOP_MATCHA_DIR} $(TOP_MATCHA_HJSON)
	PYTHONPATH=${OPENTITAN_SOURCE}/util/ ${TOPGEN_MATCHA} -t ${TOP_MATCHA_HJSON} -o ${TOP_MATCHA_DIR}/ --top-only

# Targets to install the symlink to opentitan headers for each build

cheriot-build-debug-prepare:: | $(CHERIOT_OUT_DEBUG)
	ln -sf $(CHERIOT_OUT_DIR)/opentitan-gen $(CHERIOT_OUT_DEBUG)/

cheriot-build-release-prepare:: | $(CHERIOT_OUT_RELEASE)
	ln -sf $(CHERIOT_OUT_DIR)/opentitan-gen $(CHERIOT_OUT_RELEASE)/

CHERIOT_GEN_HEADERS=\
    $(I2S_HEADER) \
    $(ML_TOP_HEADER) \
    $(TLUL_MAILBOX_HEADER) \
    $(UART_HEADER) \
    $(TOP_MATCHA_IRQ_HEADER) \
    $(TOP_MATCHA_MEMORY_HEADER)

cheriot-gen-headers:: $(CHERIOT_GEN_HEADERS)

cheriot-clean-headers::
	rm -f $(CHERIOT_GEN_HEADERS)

# Point to the clang++ target to make sure the binary is installed.
$(CACHE)/cheriot-tools/bin/clang++: | $(CACHE)
	./scripts/install-toolchain.sh cheriot

## Installs the LLVM compiler for CHERIoT
#
# Requires network access. This fetches the toolchain from the GCP archive and
# extracts it locally to the cache/.
install_cheriot: $(CACHE)/cheriot-tools/bin/clang++

# NB: install the prebuilt CHERIoT toolchain. Note this means it
# is necessary to do something like:
# $ set-platform sencha
# $ m tools
# to get a working build environment.
tools:: install_cheriot

.PHONY:: install_cheriot
