# Copyright 2024 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(
    "@kelvin_hw//rules:chisel.bzl",
    "chisel_cc_library",
    "chisel_library",
    "chisel_test",
)

chisel_library(
    name = "library",
    srcs = [
        "Library.scala",
    ],
    visibility = ["//visibility:public"],
)

chisel_library(
    name = "common",
    srcs = [
        "Fifo.scala",
        "FifoIxO.scala",
        "FifoX.scala",
        "FifoXe.scala",
        "IDiv.scala",
        "KelvinArbiter.scala",
        "MathUtil.scala",
        "Slice.scala",
    ],
    visibility = ["//visibility:public"],
    exports = [
        ":library",
    ],
    deps = [
        ":library",
        "@chipsalliance_rocket_chip//:asyncqueue",
    ],
)

chisel_library(
    name = "aligner",
    srcs = [
        "Aligner.scala"
    ],
    resources = [
        "//hdl/verilog/rvv/design:Aligner.sv",
    ],
    visibility = ["//visibility:public"],
)

chisel_test(
    name = "aligner_test",
    srcs = [
        "AlignerTest.scala",
    ],
    deps = [
        ":aligner",
    ],
)

chisel_library(
    name = "scatter_gather",
    srcs = [
        "ScatterGather.scala",
    ],
    visibility = ["//visibility:public"],
)

chisel_library(
    name = "fp",
    srcs = [
        "Fp.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":library",
    ],
)

chisel_library(
    name = "fp_test_utils",
    srcs = [
        "FpTestUtils.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":fp",
    ],
)

chisel_library(
    name = "instruction_buffer",
    srcs = [
        "InstructionBuffer.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":library",
        ":circular_buffer_multi",
    ],
)

chisel_library(
    name = "circular_buffer_multi",
    srcs = [
        "CircularBufferMulti.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":library",
    ],
)

chisel_library(
    name = "sv_generation_utils",
    srcs = [
        "SvGenerationUtils.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [],
)

chisel_test(
    name = "common_test",
    srcs = [
        "KelvinArbiterTest.scala",
    ],
    deps = [
        ":common",
    ],
)

chisel_test(
    name = "fp_test",
    srcs = [
        "FpTest.scala",
    ],
    deps = [
        ":fp",
        ":fp_test_utils",
    ],
)

chisel_test(
    name = "instruction_buffer_test",
    srcs = [
        "InstructionBufferTest.scala",
    ],
    deps = [
        ":instruction_buffer",
    ],
)

chisel_test(
    name = "circular_buffer_multi_test",
    srcs = [
        "CircularBufferMultiTest.scala",
    ],
    deps = [
        ":circular_buffer_multi",
    ],
)

chisel_test(
    name = "library_test",
    srcs = [
        "LibraryTest.scala",
    ],
    deps = [
        ":library",
    ],
)

chisel_test(
    name = "scatter_gather_test",
    srcs = [
        "ScatterGatherTest.scala",
    ],
    deps = [
        ":scatter_gather",
    ],
    size = "large",
)

chisel_library(
    name = "fma",
    srcs = [
        "Fma.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":common",
        ":fp",
    ],
)

chisel_test(
    name = "fma_test",
    srcs = [
        "FmaTest.scala",
    ],
    deps = [
        ":fma",
        ":fp",
    ],
)

chisel_test(
    name = "sv_generation_utils_test",
    srcs = [
        "SvGenerationUtilsTest.scala",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":sv_generation_utils",
    ],
)

chisel_library(
    name = "testing",
    srcs = [
        "TestingUtils.scala",
    ],
    visibility = ["//visibility:public"],
)

chisel_test(
    name = "async_queue_smoke_test",
    srcs = ["AsyncQueueSmokeTest.scala"],
    deps = [
        ":common",
        "@chipsalliance_rocket_chip//:asyncqueue",
    ],
)
