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

load("@rules_python//python:defs.bzl", "py_library")
load("@ot_python_deps//:requirements.bzl", "requirement")

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

py_library(
    name = "topgen",
    srcs = [
        "__init__.py",
        "entropy_buffer_generator.py",
        "gen_top_docs.py",
        "strong_random.py",
        "validate.py",
    ],
    deps = [
        ":merge",
        requirement("tabulate"),
    ],
)

py_library(
    name = "c_test",
    srcs = ["c_test.py"],
    deps = [
        ":lib",
    ],
)

py_library(
    name = "gen_dv",
    srcs = [
        "gen_dv.py",
        "top.py",
    ],
    deps = [
        "//util/reggen:gen_dv",
        "//util/reggen:ip_block",
        "//util/reggen:params",
        "//util/reggen:window",
        requirement("mako"),
    ],
)

py_library(
    name = "lib",
    srcs = [
        "c.py",
        "intermodule.py",
        "lib.py",
        "resets.py",
    ],
    deps = [
        "//util/reggen:inter_signal",
        "//util/reggen:ip_block",
        "//util/reggen:validate",
        requirement("hjson"),
        requirement("mako"),
    ],
)

py_library(
    name = "merge",
    srcs = [
        "clocks.py",
        "merge.py",
    ],
    deps = [
        ":lib",
        "//util/reggen:params",
    ],
)

filegroup(
    name = "tpl_files",
    srcs = glob(["**/*.tpl"]),
)
