# 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("//rules:kelvin_v2.bzl", "kelvin_v2_binary")
load("//rules:utils.bzl", "template_rule")

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

template_rule(
    kelvin_v2_binary,
    {
        "rvv_add": {
            "srcs": ["rvv_add.S"],
        },
        "rvv_load": {
            "srcs": ["rvv_load.S"],
        },
        "vstart_store": {
            "srcs": ["vstart_store.S"],
        },
        "vcsr_test": {
            "srcs": ["vcsr_test.cc"],
        },
        "vill_test": {
            "srcs": ["vill_test.cc"],
        },
        "viota_test": {
            "srcs": ["viota_test.cc"],
        },
        "vfirst_test": {
            "srcs": ["vfirst_test.cc"],
        },
        "vcpop_exception_test": {
            "srcs": ["vcpop_exception_test.cc"],
        },
        "vcpop_test": {
            "srcs": ["vcpop_test.cc"],
        },
        "vcompress_test": {
            "srcs": ["vcompress_test.cc"],
        },
        "vmsbf_test": {
            "srcs": ["vmsbf_test.cc"],
        },
        "vmsof_test": {
            "srcs": ["vmsof_test.cc"],
        },
        "vmsif_test": {
            "srcs": ["vmsif_test.cc"],
        },
    },
)

filegroup(
    name = "rvv_assem_tests",
    srcs = [
        "rvv_add.elf",
        "rvv_load.elf",
        "vstart_store.elf",
        "vcsr_test.elf",
        "vill_test.elf",
        "viota_test.elf",
        "vfirst_test.elf",
        "vcpop_exception_test.elf",
        "vcpop_test.elf",
        "vcompress_test.elf",
        "vmsbf_test.elf",
        "vmsof_test.elf",
        "vmsif_test.elf",
    ],
)