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

load("@lowrisc_opentitan//rules:fusesoc.bzl", "fusesoc_build")
load("@lowrisc_opentitan//rules:splice.bzl", "bitstream_splice")
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")

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

# The readmem directives in the fusesoc-ized build tree will be in the subdir
# ${build_root}/src/lowrisc_prim_util_memload_0/rtl/prim_util_memload.svh,
# and ${build_root} will be a subdirectory called `build.fpga_nexus` inside of
# bazel-out/k8-{configname}/bin/hw/bitstream/vivado.
# Therefore, the relative path between prim_util_memload.svh and the project-root
# relative $(location ...) resolved labels is up 10 subdirectories.
_PREFIX = "../../../../../../../../../.."

_FPGA_NEXUS_TESTROM = "//sw/device/lib/testing/test_rom:test_rom_fpga_nexus_scr_vmem"

_FPGA_NEXUS_OTP_RMA = "//hw/top_matcha/data:otp_img_rma"

_FPGA_NEXUS_TESTROM_PATH = "{}/$(location {})".format(_PREFIX, _FPGA_NEXUS_TESTROM)

_FPGA_NEXUS_OTP_RMA_PATH = "{}/$(location {})".format(_PREFIX, _FPGA_NEXUS_OTP_RMA)

# Note: all of the targets are tagged with "manual" to prevent them from being
# matched by bazel wildcards like "//...".  In order to build the bitstream,
# you need to ask for it directly or by dependency via another rule, such as
# a functest.

fusesoc_build(
    name = "fpga_nexus",
    testonly = True,
    srcs = [
        "//hw:all_files",
        _FPGA_NEXUS_TESTROM,
        _FPGA_NEXUS_OTP_RMA,
    ],
    cores = ["//:cores"],
    data = ["@lowrisc_opentitan//hw/ip/otbn:all_files"],
    flags = [
        "--BootRomInitFile=" + _FPGA_NEXUS_TESTROM_PATH,
        "--OtpCtrlMemInitFile=" + _FPGA_NEXUS_OTP_RMA_PATH,
    ],
    output_groups = {
        "bitstream": ["synth-vivado/google_systems_chip_matcha_nexus_0.1.bit"],
        "rom_mmi": ["synth-vivado/rom.mmi"],
        "otp_mmi": ["synth-vivado/otp.mmi"],
        "logs": [
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/synth_1/runme.log",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/runme.log",
            "synth-vivado/vivado.log",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/synth_1/chip_matcha_nexus_utilization_synth.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_power_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_utilization_placed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_bus_skew_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_drc_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_io_placed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_timing_summary_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_control_sets_placed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_methodology_drc_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_drc_opted.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_clock_utilization_routed.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus_route_status.rpt",
            "synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/utilization_kelvin.rpt",
        ],
    },
    systems = ["google:systems:chip_matcha_nexus"],
    tags = ["manual"],
    target = "synth",
    use_system_fusesoc = True,
)

filegroup(
    name = "fpga_nexus_test_rom",
    testonly = True,
    srcs = [":fpga_nexus"],
    output_group = "bitstream",
    tags = ["manual"],
)

filegroup(
    name = "rom_mmi",
    testonly = True,
    srcs = [":fpga_nexus"],
    output_group = "rom_mmi",
    tags = ["manual"],
)

filegroup(
    name = "otp_mmi",
    testonly = True,
    srcs = [":fpga_nexus"],
    output_group = "otp_mmi",
    tags = ["manual"],
)

filegroup(
    name = "logs",
    testonly = True,
    srcs = [":fpga_nexus"],
    output_group = "logs",
    tags = ["manual"],
)

bitstream_splice(
    name = "fpga_nexus_mask_test_rom",
    testonly = True,
    src = ":fpga_nexus_test_rom",
    data = "//sw/device/lib/testing/test_rom:test_rom_fpga_nexus_scr_vmem",
    meminfo = ":rom_mmi",
    tags = ["manual"],
)

bitstream_splice(
    name = "fpga_nexus_mask_puppeteer_rom",
    testonly = True,
    src = ":fpga_nexus_test_rom",
    data = "//sw/device/lib/testing/test_rom:puppeteer_rom_fpga_nexus_scr_vmem",
    meminfo = ":rom_mmi",
    tags = ["manual"],
)

bitstream_splice(
    name = "fpga_nexus_mask_test_rom_no_otp",
    testonly = True,
    src = ":fpga_nexus_test_rom",
    data = "//sw/device/lib/testing/test_rom:test_rom_no_otp_fpga_nexus_scr_vmem",
    meminfo = ":rom_mmi",
    tags = ["manual"],
)

bitstream_splice(
    name = "fpga_nexus_mask_test_rom_no_otp_empty",
    testonly = True,
    src = ":fpga_nexus_mask_test_rom_no_otp",
    data = "//hw/top_matcha/data:otp_img_empty",
    meminfo = ":otp_mmi",
    tags = ["manual"],
)

pkg_tar(
    name = "fpga_nexus_smoketest",
    testonly = True,
    srcs = [
        ":fpga_nexus_mask_test_rom",
        ":fpga_nexus_mask_test_rom_no_otp_empty",
        ":logs",
        ":otp_mmi",
        ":rom_mmi",
        "//sw/device/examples/hello_world_multicore:hello_world_multicore_sc_embedded_fpga_nexus_bin",
    ],
    extension = "tar.gz",
    mode = "0755",
    strip_prefix = "/",
    tags = ["manual"],
)
