# 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", "OPENTITAN_CPU", "sec_flash_binary")

sec_flash_binary(
    name = "hello_world",
    srcs = [
        "hello_world.c",
    ],
    copts = [
        "-nostdlib",
        "-ffreestanding",
        # Disable the date-time warning only for the hello world program.
        "-Wno-date-time",
    ],
    deps = [
        ":hello_world_lib",
    ],
)

cc_library(
    name = "hello_world_lib",
    target_compatible_with = [OPENTITAN_CPU],
    deps = [
        "//sw/device/lib/dif:pinmux",
        "//sw/device/lib/testing:pinmux_testutils",
        "//sw/device/lib/testing/test_framework:ottf_start",
        "@lowrisc_opentitan//sw/device/examples:demos",
        "@lowrisc_opentitan//sw/device/lib/base:mmio",
        "@lowrisc_opentitan//sw/device/lib/crt",
        "@lowrisc_opentitan//sw/device/lib/dif:gpio",
        "@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/test_framework:check",
        "@lowrisc_opentitan//sw/device/lib/testing/test_framework:ottf_test_config",
        "@lowrisc_opentitan//sw/device/silicon_creator/lib:manifest_def",
    ],
)

# Use shell test to run the interactive verilator test on UART and GPIO
sh_test(
    name = "verilator_hello_world_test",
    timeout = "long",
    srcs = [":run_verilator_hello_world.sh"],
    args = [
        "$(location //hw:matcha_verilator)",
        "$(location //sw/device/lib/testing/test_rom:test_rom_sim_verilator_scr_vmem)",
        "$(location :hello_world_sim_verilator_vmem)",
        "$(location //hw/top_matcha/data:otp_img_rma)",
    ],
    data = [
        ":hello_world_sim_verilator_vmem",
        ":hello_world_test_expected_gpio.txt",
        "//hw:matcha_verilator",
        "//hw/top_matcha/data:otp_img_rma",
        "//sw/device/lib/testing/test_rom:test_rom_sim_verilator_scr_vmem",
    ],
    tags = [
        "verilator",
    ],
    visibility = ["//sw/device/tests:sw_device_test_group"],
)

sh_test(
    name = "verilator_hello_world_gpio_test",
    timeout = "long",
    srcs = [":run_verilator_hello_world.sh"],
    args = [
        "$(location //hw:matcha_verilator)",
        "$(location //sw/device/lib/testing/test_rom:test_rom_sim_verilator_scr_vmem)",
        "$(location :hello_world_sim_verilator_vmem)",
        "$(location //hw/top_matcha/data:otp_img_rma)",
        "gpio_test",
    ],
    data = [
        ":hello_world_sim_verilator_vmem",
        "//hw:matcha_verilator",
        "//hw/top_matcha/data:otp_img_rma",
        "//sw/device/lib/testing/test_rom:test_rom_sim_verilator_scr_vmem",
    ],
    tags = [
        "verilator",
    ],
)
