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

load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier")
load("//rules:quality.bzl", "clang_format_check", "html_coverage_report")
load("@lowrisc_lint//rules:rules.bzl", "licence_check")

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

unbuildify = [
    "./WORKSPACE",  # Prevent Buildifier from inserting unnecessary newlines.
    "./**/vendor/**",
    "./util/lowrisc_misc-linters/**",
    "./build/**",
]

buildifier(
    name = "buildifier_fix",
    exclude_patterns = unbuildify,
)

buildifier(
    name = "buildifier_check",
    diff_command = "diff -u",
    exclude_patterns = unbuildify,
    mode = "diff",
)

licence_check(
    name = "license_check",
    exclude_patterns = [".style.yapf"],
    licence = """
    Copyright lowRISC contributors.
    Licensed under the Apache License, Version 2.0, see LICENSE for details.
    SPDX-License-Identifier: Apache-2.0
    """,
)

clang_format_check(
    name = "clang_format_check",
    exclude_patterns = [
        # Vendored source code dirs
        "./**/vendor/**",
        # Rust cargo build dirs
        "./**/target/**",
        # Meson build dirs
        "./build-out/**",
        "./build-bin/**",
        # fusesoc build dir
        "./build/**",
    ],
    mode = "diff",
)

clang_format_check(
    name = "clang_format_fix",
    exclude_patterns = [
        # Vendored source code dirs
        "./**/vendor/**",
        # Rust cargo build dirs
        "./**/target/**",
        # Meson build dirs
        "./build-out/**",
        "./build-bin/**",
        # fusesoc build dir
        "./build/**",
    ],
    mode = "fix",
)

html_coverage_report(
    name = "html_coverage_report",
)

filegroup(
    name = "cores",
    srcs = [
        "check_tool_requirements.core",
        "topgen.core",
        "topgen-reg-only.core",
    ],
)

exports_files(["python-requirements.txt"])
