# Copyright 2023 Google LLC.
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

load("//rules:matcha.bzl", "NEXUS_CORE_TARGETS", "OPENTITAN_CPU", "opentitan_rom_binary")
load("@lowrisc_opentitan//rules:autogen.bzl", "autogen_chip_info")
load("@lowrisc_opentitan//rules:linker.bzl", "ld_library")

package(default_visibility = ["//visibility:public"])

autogen_chip_info(
    name = "chip_info",
    version = "//util:matcha_version_file",
)

ld_library(
    name = "linker_script",
    script = "test_rom.ld",
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha_memory",
        "@lowrisc_opentitan//sw/device:info_sections",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:static_critical_sections",
    ],
)

opentitan_rom_binary(
    name = "test_rom",
    deps = [
        ":linker_script",
        ":test_rom_otp_lib",
    ],
)

opentitan_rom_binary(
    name = "test_rom_no_otp",
    srcs = [
        "test_rom.c",
        "test_rom_start.S",
    ],
    defines = ["OTP_IS_RAM"],
    deps = [
        ":linker_script",
        ":test_rom_lib",
        "@lowrisc_opentitan//sw/device/lib/crt",
        "//sw/device/silicon_creator/rom:bootstrap_no_otp",
    ],
)

cc_library(
    name = "test_rom_otp_lib",
    srcs = [
        "test_rom.c",
        "test_rom_start.S",
    ],
    deps = [
        ":test_rom_lib",
        "@lowrisc_opentitan//sw/device/lib/crt",
        "//sw/device/silicon_creator/rom:bootstrap",
    ],
)

cc_library(
    name = "test_rom_lib",
    srcs = [
    ],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        ":chip_info",
        "//hw/top_matcha:ast_regs",
        "//hw/top_matcha:clkmgr_regs",
        "//hw/top_matcha/sw:top_matcha",
        "//hw/top_matcha/ip/flash_ctrl/data/autogen:flash_ctrl_regs",
        "//hw/top_matcha/ip/sensor_ctrl/data:sensor_ctrl_regs",
        "//sw/device/lib:spi_flash",
        "//sw/device/lib/dif:pinmux",
        "//sw/device/lib/testing:pinmux_testutils",
        "@lowrisc_opentitan//hw/ip/csrng/data:csrng_regs",
        "@lowrisc_opentitan//hw/ip/edn/data:edn_regs",
        "@lowrisc_opentitan//hw/ip/entropy_src/data:entropy_src_regs",
        "@lowrisc_opentitan//hw/ip/otp_ctrl/data:otp_ctrl_regs",
        "@lowrisc_opentitan//hw/ip/sram_ctrl/data:sram_ctrl_regs",
        "@lowrisc_opentitan//sw/device/lib/arch:device",
        "@lowrisc_opentitan//sw/device/lib/base:abs_mmio",
        "@lowrisc_opentitan//sw/device/lib/base:bitfield",
        "@lowrisc_opentitan//sw/device/lib/base:mmio",
        "@lowrisc_opentitan//sw/device/lib/dif:clkmgr",
        "@lowrisc_opentitan//sw/device/lib/dif:flash_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:gpio",
        "@lowrisc_opentitan//sw/device/lib/dif:hmac",
        "@lowrisc_opentitan//sw/device/lib/dif:rstmgr",
        "@lowrisc_opentitan//sw/device/lib/dif:rv_core_ibex",
        "@lowrisc_opentitan//sw/device/lib/dif:spi_device",
        "@lowrisc_opentitan//sw/device/lib/dif:uart",
        "@lowrisc_opentitan//sw/device/lib/runtime:hart",
        "@lowrisc_opentitan//sw/device/lib/runtime:log",
        "@lowrisc_opentitan//sw/device/lib/runtime:print",
        "@lowrisc_opentitan//sw/device/lib/testing:flash_ctrl_testutils",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:check",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:status",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib:manifest",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:sec_mmio",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:static_critical_boot_measurements",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:static_critical_epmp_state",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:static_critical_sec_mmio",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/drivers:flash_ctrl",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/drivers:retention_sram",
    ],
)

ld_library(
    name = "puppeteer_linker_script",
    script = "puppeteer_rom.ld",
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha_memory",
    ],
)

# Only build for nexus FPGA.
opentitan_rom_binary(
    name = "puppeteer_rom",
    per_device_deps = {
        "fpga_nexus": [NEXUS_CORE_TARGETS.get("secure_core")],
    },
    deps = [
        ":puppeteer_linker_script",
        ":puppeteer_rom_lib",
    ],
)

cc_library(
    name = "puppeteer_rom_lib",
    srcs = [
        "puppeteer.cc",
        "puppeteer_rom.cc",
        "test_rom_start.S",
    ],
    hdrs = [
        "puppeteer.h",
    ],
    copts = [
        "-nostdlib",
        "-DPUPPETEER_ROM",
        "-Wno-unused-result",
    ],
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//hw/top_matcha:ast_regs",
        "//hw/top_matcha:clkmgr_regs",
        "//hw/top_matcha:pinmux_regs",
        "//hw/top_matcha/sw:top_matcha",
        "//hw/top_matcha/ip/sensor_ctrl/data:sensor_ctrl_regs",
        "//sw/device/lib/testing/test_rom/puppeteer_utils",
        "@lowrisc_opentitan//hw/ip/csrng/data:csrng_regs",
        "@lowrisc_opentitan//hw/ip/edn/data:edn_regs",
        "@lowrisc_opentitan//hw/ip/entropy_src/data:entropy_src_regs",
        "@lowrisc_opentitan//hw/ip/sram_ctrl/data:sram_ctrl_regs",
        "@lowrisc_opentitan//sw/device/lib/base:memory",
        "@lowrisc_opentitan//sw/device/lib/base:multibits",
        "@lowrisc_opentitan//sw/device/lib/crt",
        "@lowrisc_opentitan//sw/device/lib/dif:flash_ctrl",
        "@lowrisc_opentitan//sw/device/lib/dif:spi_host",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib:manifest",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/drivers:flash_ctrl",
    ],
)

# Only build for CHERIoT targets. Requires that bazel be invoked with
# --config=cheriot-baremetal --copt=-D_CHERIOT_BAREMETAL_=1
# so that all dependencies use those options.
opentitan_rom_binary(
    name = "test_rom_no_otp_cheri",
    visibility = ["//visibility:private"],
    # NB: fpga_nexus is used for renode sims
    per_device_deps = {
        "fpga_nexus": [NEXUS_CORE_TARGETS.get("secure_core")],
    },
    srcs = [
        "test_rom_cheri.c",
        "test_rom_start_cheri.S",
        # XXX move to opentitan/sw/device/lib/crt?
        "crt_cheri.S",
    ],
    defines = ["OTP_IS_RAM"],
    deps = [
        ":linker_script_cheri",
        ":baremetal_lib",
        ":test_rom_lib",
        "//sw/device/silicon_creator/rom:bootstrap_no_otp",
    ],
    tags = [
        "cheri",
    ],
)

cc_library(
    name = "baremetal_lib",
    hdrs = [
        "cheriot-baremetal.h",
    ],
)

ld_library(
    name = "linker_script_cheri",
    visibility = ["//visibility:private"],
    script = "test_rom_cheri.ld",
    deps = [
        "//hw/top_matcha/sw/autogen:top_matcha_memory_cheri",
        "@lowrisc_opentitan//sw/device:info_sections",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib/base:static_critical_sections",
    ],
    tags = [
        "cheri",
    ],
)
