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

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

filegroup(
    name = "all_files",
    srcs = glob(["**"]) + [
        "//hw/ip/otbn/data:all_files",
    ],
)

genrule(
    name = "otbn_simple_smoke_test_obj",
    srcs = [
        "dv/smoke/smoke_test.s",
    ],
    outs = [
        "otbn_simple_smoke_test.o",
    ],
    cmd = """
    export RV32_TOOL_AS=$(location @lowrisc_rv32imcb_files//:bin/riscv32-unknown-elf-as)
    $(location //hw/ip/otbn/util:otbn_as) -o $@ $<
    """,
    tools = [
        "//hw/ip/otbn/util:otbn_as",
        "@lowrisc_rv32imcb_files//:bin/riscv32-unknown-elf-as",
    ],
)

genrule(
    name = "otbn_simple_smoke_test_elf",
    srcs = [
        ":otbn_simple_smoke_test.o",
    ],
    outs = [
        "otbn_simple_smoke_test.elf",
    ],
    cmd = """
    export RV32_TOOL_LD=$(location @lowrisc_rv32imcb_files//:bin/riscv32-unknown-elf-ld)
    $(location //hw/ip/otbn/util:otbn_ld) -o $@ $<
    """,
    tools = [
        "//hw/ip/otbn/util:otbn_ld",
        "@lowrisc_rv32imcb_files//:bin/riscv32-unknown-elf-ld",
    ],
)
