|  | # Copyright lowRISC contributors. | 
|  | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | load("@ot_hack_bazelbuild_buildtools//buildifier:def.bzl", "buildifier", "buildifier_test") | 
|  | load("@lowrisc_lint//rules:rules.bzl", "licence_test") | 
|  | load("//rules:quality.bzl", "clang_format_check", "clang_format_test", "html_coverage_report") | 
|  | load("@rules_rust//rust:defs.bzl", "rustfmt_test") | 
|  |  | 
|  | package(default_visibility = ["//visibility:public"]) | 
|  |  | 
|  | licence_test( | 
|  | name = "license_check", | 
|  | exclude_patterns = [ | 
|  | # Exclude anything in vendored directories | 
|  | "third_party/**", | 
|  | "*/vendor/*/*", | 
|  | "util/lowrisc_misc-linters/*", | 
|  |  | 
|  | ## Hardware Exclusions | 
|  |  | 
|  | # DV Vendored test vectors | 
|  | "hw/dv/sv/test_vectors", | 
|  | # Vendored CRC model | 
|  | "hw/dv/dpi/usbdpi/usb_crc.c", | 
|  | # Vendored HMAC model | 
|  | "hw/ip/hmac/dv/cryptoc_dpi/*", | 
|  | # PRINCE C++ reference model from Sebastien Riou | 
|  | "hw/ip/prim/dv/prim_prince/crypto_dpi_prince/prince_ref.h", | 
|  | # PRESENT C reference model from Thomas Siebert | 
|  | "hw/ip/prim/dv/prim_present/crypto_dpi_present/boxes.inc", | 
|  | "hw/ip/prim/dv/prim_present/crypto_dpi_present/comline.inc", | 
|  | "hw/ip/prim/dv/prim_present/crypto_dpi_present/present.inc", | 
|  | "hw/ip/prim/dv/prim_present/crypto_dpi_present/verbose.inc", | 
|  | # PRESENT Python reference model | 
|  | "util/design/lib/Present.py", | 
|  | # Vendored FPGA information | 
|  | "hw/top_earlgrey/data/*.xdc", | 
|  | "util/fpga/bram_load.mmi", | 
|  | # Manually checked, files contain additional copyright header lines | 
|  | "hw/ip/usb_fs_nb_pe/rtl/*", | 
|  | "hw/ip/usbdev/rtl/usbdev_iomux.sv", | 
|  |  | 
|  | ## Software Exclusions | 
|  |  | 
|  | # Coremark Vendored Files | 
|  | "sw/device/benchmarks/coremark/top_earlgrey/*", | 
|  |  | 
|  | ## Other Exclusions | 
|  |  | 
|  | # Other Licences, | 
|  | "util/wavegen/LICENSE.wavedrom", | 
|  | # Site Assets | 
|  | "site/**/assets/scss/**", | 
|  | "site/landing/static/js/tiny-slider.js", | 
|  | # Code taken from Chromium, so covered by the BSD licence | 
|  | "sw/otbn/crypto/modexp.s", | 
|  | "sw/otbn/crypto/p256.s", | 
|  | "sw/otbn/crypto/rsa_verify.s", | 
|  | "sw/otbn/crypto/handwritten/rsa_verify_3072.s", | 
|  | "sw/otbn/crypto/sha512.s", | 
|  | # Mersenne Twister PRNG | 
|  | "sw/device/sca/lib/prng.c", | 
|  | # Alma testbench files | 
|  | "hw/ip/aes/pre_sca/alma/cpp/testbench.h", | 
|  | "hw/ip/aes/pre_sca/alma/cpp/verilator_tb_aes_sbox.cpp", | 
|  | "hw/ip/aes/pre_sca/alma/cpp/verilator_tb_aes_sub_bytes.cpp", | 
|  | "hw/ip/kmac/pre_sca/alma/cpp/verilator_tb_keccak_2share.cpp", | 
|  | ], | 
|  | licence = """ | 
|  | Copyright lowRISC contributors. | 
|  | Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | SPDX-License-Identifier: Apache-2.0 | 
|  | """, | 
|  | workspace = "//:WORKSPACE", | 
|  | ) | 
|  |  | 
|  | clang_format_exclude = [ | 
|  | # Vendored source code dirs | 
|  | "./**/vendor/**", | 
|  | # Rust cargo build dirs | 
|  | "./**/target/**", | 
|  | # Directories used exclusively to store build artifacts are still copied into. | 
|  | "./build-out/**", | 
|  | "./build-bin/**", | 
|  | # fusesoc build dir | 
|  | "./build/**", | 
|  | ] | 
|  |  | 
|  | clang_format_test( | 
|  | name = "clang_format_check", | 
|  | exclude_patterns = clang_format_exclude, | 
|  | mode = "diff", | 
|  | workspace = "//:WORKSPACE", | 
|  | ) | 
|  |  | 
|  | clang_format_check( | 
|  | name = "clang_format_fix", | 
|  | exclude_patterns = clang_format_exclude, | 
|  | mode = "fix", | 
|  | ) | 
|  |  | 
|  | buildifier_exclude = [ | 
|  | "./WORKSPACE",  # Prevent Buildifier from inserting unnecessary newlines. | 
|  | "./**/vendor/**", | 
|  | "./build/**", | 
|  | "./third_party/rust/crates/crates.bzl",  # Autogenerated by cargo-raze | 
|  | ] | 
|  |  | 
|  | buildifier( | 
|  | name = "buildifier_fix", | 
|  | exclude_patterns = buildifier_exclude, | 
|  | ) | 
|  |  | 
|  | buildifier_test( | 
|  | name = "buildifier_check", | 
|  | diff_command = "diff -u", | 
|  | exclude_patterns = buildifier_exclude, | 
|  | mode = "diff", | 
|  | no_sandbox = True, | 
|  | verbose = True, | 
|  | workspace = "//:WORKSPACE", | 
|  | ) | 
|  |  | 
|  | # TODO(cfrantz): Find a way to keep this list of rust targets synchronized | 
|  | # with the full set of rust targets in the codebase. | 
|  | # | 
|  | # $ bazel query 'kind("rust_(binary|library|test)", //...)' | grep -v bindgen | 
|  | RUST_TARGETS = [ | 
|  | "//sw/device/lib/ujson/rust:roundtrip_test", | 
|  | "//sw/host/cryptotest:cryptotest_parser", | 
|  | "//sw/host/cryptotest:cryptotest_parser_test", | 
|  | "//sw/host/opentitanlib:opentitanlib", | 
|  | "//sw/host/opentitanlib:opentitanlib_test", | 
|  | "//sw/host/opentitansession:opentitansession", | 
|  | "//sw/host/opentitantool:opentitantool", | 
|  | "//sw/host/tests/chip/gpio:gpio", | 
|  | "//sw/host/tests/chip/power_virus:power_virus", | 
|  | "//sw/host/tests/rom/e2e_bootstrap_disabled:e2e_bootstrap_disabled", | 
|  | "//sw/host/tests/rom/e2e_bootstrap_entry:e2e_bootstrap_entry", | 
|  | "//sw/host/tests/rom/e2e_chip_specific_startup:e2e_chip_specific_startup", | 
|  | "//sw/host/tests/rom/sw_strap_value:sw_strap_value", | 
|  | "//sw/host/tests/chip/spi_passthru:spi_passthru", | 
|  | ] | 
|  |  | 
|  | rustfmt_test( | 
|  | name = "rustfmt_check", | 
|  | targets = RUST_TARGETS, | 
|  | ) | 
|  |  | 
|  | html_coverage_report( | 
|  | name = "html_coverage_report", | 
|  | ) |