/rules_verilator

Bazel build rules for Verilator

Primary LanguageStarlarkApache License 2.0Apache-2.0

Bazel build rules for Verilator

Bazel Tests

Overview

Add the following to your WORKSPACE file

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Verilator
http_archive(
    name = "rules_verilator",
    # See release page for latest urls + sha
)

load(
    "@rules_verilator//verilator:repositories.bzl",
    "rules_verilator_dependencies",
    "rules_verilator_toolchains"
)
rules_verilator_dependencies()
rules_verilator_toolchains()

# Register toolchain dependencies
load("@rules_m4//m4:m4.bzl", "m4_register_toolchains")
m4_register_toolchains()

load("@rules_flex//flex:flex.bzl", "flex_register_toolchains")
flex_register_toolchains()

load("@rules_bison//bison:bison.bzl", "bison_register_toolchains")
bison_register_toolchains()

Supported Bazel Versions

These rules are under active development and the minimum supported Bazel version may change. Currently, the master branch requires Bazel >= 5.2.0.

Build rules

load("@rules_verilator//verilator:defs.bzl", "verilator_cc_library")

verilator_cc_library(
    name = "alu",
    mtop = "alu", # defaults to name if not specified
    srcs = ["alu.sv"],
)

cc_binary(
    name = "alu_bin",
    srcs = ["alu.cpp"],
    deps = [":alu"],
)

The details of a verilog module (sources, top name, etc.) can also be specified by a verilog_module which can be reused in other rules.

load("@rules_verilog//verilog:defs.bzl", "verilog_module")

load("@rules_verilator//verilator:defs.bzl", "verilator_cc_library")

verilog_module(
    name = "alu_module",
    top = "alu",
    srcs = ["alu.sv"],
)

verilator_cc_library(
    name = "alu",
    module = ":alu_module",
)

See test/alu/BUILD for working examples.

License

Released under Apache 2.0.