# Copyright 2025 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
#
#     http://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.

load("@bazel_skylib//rules:common_settings.bzl", "string_list_flag")
load("@lowrisc_opentitan_gh//rules:fusesoc.bzl", "fusesoc_build")
load("//rules:kelvin_v2.bzl", "kelvin_v2_binary")
load("//rules:utils.bzl", "cc_embed_data")

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

_CLOCK_FREQUENCY_MHZ = "80"
_NEXUS_CLOCK_FREQUENCY_MHZ = "80"

filegroup(
    name = "rtl_files",
    srcs = glob(["**/*.sv"]) + glob(["**/*.core"]) + [
        "//fpga/ip/spi_dpi_master:rtl_files",
        "//fpga/ip/kelvin_tlul:rtl_files",
        "//fpga/ip/kelvin_chisel_subsystem:rtl_files",
        "//fpga/ip/sram:rtl_files",
        "//fpga/rtl:rtl_files",
    ],
)

string_list_flag(
    name = "verilator_options",
    build_setting_default = [
        "-Wno-ALWCOMBORDER",
        "-Wno-WIDTHEXPAND",
        "-Wno-WIDTHTRUNC",
        "-Wno-UNUSEDSIGNAL",
        "-Wno-UNUSEDPARAM",
        "-Wno-VARHIDDEN",
        # TODO: The MULTIDRIVEN warnings are caused by the `prim_arbiter_fixed`
        # module and the `tlul_fifo_sync` module. We should investigate these
        # modules and fix the underlying issues.
        # "-Wno-MULTIDRIVEN",
        "-Wno-UNOPTTHREADS",
        "-Wno-GENUNNAMED",
        "-Wno-DECLFILENAME",
        "-Wno-ASCRANGE",
        "-DRVFI",
        "-DUSE_GENERIC",
    ],
)

string_list_flag(
    name = "make_options",
    build_setting_default = [
        "-j16",
    ],
)

cc_embed_data(
    name = "add_uint32_m1_bin_header",
    srcs = [":add_uint32_m1_bin"],
    var_name = "add_uint32_m1_bin",
)

kelvin_v2_binary(
    name = "add_uint32_m1",
    srcs = ["sw/add_uint32_m1.cc"],
    copts = ["-DCLOCK_FREQUENCY_MHZ=" + _CLOCK_FREQUENCY_MHZ],
)

filegroup(
    name = "add_uint32_m1_bin",
    srcs = [":add_uint32_m1"],
    output_group = "bin_file",
)

KELVIN_SOC_CORES = [
    "//fpga/ip/kelvin_chisel_subsystem:kelvin_chisel_subsystem.core",
    ":kelvin_soc.core",
    ":kelvin_soc_pkg.core",
    ":racl_pkg.core",
    "@lowrisc_opentitan_gh//hw:check_tool_requirements.core",
]

KELVIN_SOC_SRCS = [
    ":rtl_files",
    "@lowrisc_opentitan_gh//hw/dv/sv:dv_macros",
    "@lowrisc_opentitan_gh//hw/dv:verilator_files",
    "@lowrisc_opentitan_gh//hw:check_tool_requirements.py",
    "@lowrisc_opentitan_gh//hw:lint/tools/verilator/common.vlt",
    "@lowrisc_opentitan_gh//hw:lint/tools/verilator/comportable.vlt",
    "@lowrisc_opentitan_gh//hw:rtl_files",
    "@lowrisc_opentitan_gh//hw:tool_requirements.py",
    "@lowrisc_opentitan_gh//hw:vendor/lint/pulp_riscv_dbg.vlt",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/debug_rom/debug_rom.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/debug_rom/debug_rom_one_scratch.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dm_csrs.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dm_mem.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dm_pkg.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dm_sba.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dm_top.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dmi_cdc.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dmi_jtag.sv",
    "@lowrisc_opentitan_gh//hw:vendor/pulp_riscv_dbg/src/dmi_jtag_tap.sv",
    "@lowrisc_opentitan_gh//hw:verilator_files",
    "main.cc",
]

fusesoc_build(
    name = "build_chip_verilator",
    srcs = KELVIN_SOC_SRCS + [
        "//fpga/ip/spi_dpi_master:dpi_files",
        "@lowrisc_opentitan_gh//hw:dpi_files",
    ],
    cores = KELVIN_SOC_CORES + [
        ":chip_verilator.core",
        "//fpga/ip/spi_dpi_master:spi_dpi_master.core",
        "@lowrisc_opentitan_gh//hw/dv:dpi/uartdpi/uartdpi.core",
        "@lowrisc_opentitan_gh//hw/dv:dpi/uartdpi/uartdpi_sv.core",
    ],
    flags = [
        "--ClockFrequencyMhz=" + _CLOCK_FREQUENCY_MHZ,
    ],
    make_options = ":make_options",
    output_groups = {
        "binary": ["com.google.kelvin_fpga_chip_verilator_0.1/sim-verilator/Vchip_verilator"],
    },
    systems = ["com.google.kelvin:fpga:chip_verilator:0.1"],
    target = "sim",
    verilator_options = ":verilator_options",
    tags = ["manual"],
)

_PREFIX = "../../../../../../../../.."

fusesoc_build(
    name = "build_chip_nexus_bitstream",
    srcs = KELVIN_SOC_SRCS + [
        "pins.xdc",
        "vivado_setup_hooks.tcl",
    ],
    cores = KELVIN_SOC_CORES + [":chip_nexus.core"],
    flags = [
        "--ClockFrequencyMhz=" + _NEXUS_CLOCK_FREQUENCY_MHZ,
    ],
    output_groups = {
        "bitstream": ["com.google.kelvin_fpga_chip_nexus_0.1/synth-vivado/com.google.kelvin_fpga_chip_nexus_0.1.runs/impl_1/chip_nexus.bit"],
        "logs": ["com.google.kelvin_fpga_chip_nexus_0.1/synth-vivado/com.google.kelvin_fpga_chip_nexus_0.1.runs/"],
    },
    systems = ["com.google.kelvin:fpga:chip_nexus:0.1"],
    target = "synth",
    tags = ["manual"],
)

filegroup(
    name = "chip_verilator_binary",
    srcs = [":build_chip_verilator"],
    output_group = "binary",
    tags = ["manual"],
)

genrule(
    name = "copy_chip_verilator_binary",
    srcs = [":chip_verilator_binary"],
    outs = ["Vchip_verilator"],
    cmd = "cp $< $@",
    tags = ["manual"],
)
