blob: a5722c22de37c853b173a6a8344fa63d93dcd7cc [file] [log] [blame]
# Copyright 2023 Google LLC
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
load("@bazel_skylib//rules:common_settings.bzl", "string_list_flag")
load("@lowrisc_opentitan//rules:fusesoc.bzl", "fusesoc_build")
load("//rules:targets.bzl", "get_targets")
package(default_visibility = ["//visibility:public"])
# This configuration exposes fusesoc's "make_options" to enable parallel
# compilation of the verilated model.
string_list_flag(
name = "make_options",
build_setting_default = [
"-j",
"$(nproc)",
],
)
TARGETS = get_targets()
[fusesoc_build(
name = "{}_verilator_real".format(target),
srcs = [
":all_files",
"//hw/top_{}:all_files".format(target),
"//hw/top_{}/dv/verilator:all_files".format(target),
],
cores = [
"//:cores",
"//hw/ip:BUILD",
"//hw/top_{}:BUILD".format(target),
],
data = ["@lowrisc_opentitan//hw/ip/otbn:all_files"],
make_options = ":make_options",
output_groups = {
"binary": ["sim-verilator/V{}_sim_tb".format(target)],
},
systems = ["lowrisc:dv:chip_{}_verilator_sim".format(target)],
tags = [
"manual",
"verilator",
],
target = "sim",
) for target in TARGETS]
[filegroup(
name = "{}_verilator_bin".format(target),
srcs = [":{}_verilator_real".format(target)],
output_group = "binary",
) for target in TARGETS]
# This is used in CI steps that do not want to run Verilator tests, and thus
# do not want to accidentally build the Verilator model. This causes the
# //hw:verilator target to not emit any files, which will break any tests that
# actually rely on this; builds will succeed, tests will fail.
config_setting(
name = "disable_verilator_build",
values = {"define": "DISABLE_VERILATOR_BUILD=true"},
)
genrule(
name = "verilator_stub",
outs = ["Vfake_sim_tb"],
cmd = """
script=$@
echo '#!/bin/bash' > $$script
echo 'echo "ERROR: sim_verilator tests cannot be run when --define DISABLE_VERILATOR_BUILD=true is set!"' >> $$script
echo 'echo "This indicates an error in your Bazel invokation"' >> $$script
echo 'exit 1' >> $$script
chmod +x $@
""",
)
[alias(
name = "{}_verilator".format(target),
actual = select({
":disable_verilator_build": ":verilator_stub",
"//conditions:default": ":{}_verilator_bin".format(target),
}),
tags = ["verilator"],
visibility = ["//visibility:public"],
) for target in TARGETS]
filegroup(
name = "all_files",
srcs = glob(["**"]) + [
"//hw/ip:all_files",
"@lowrisc_opentitan//hw/dv:all_files",
] + select({
"//rules:airgapped_env": [
"@fastvdma_core//:all_files",
"@kelvin_core//:all_files",
],
"//conditions:default": [
"//hw/ip/dma/chisel:fastvdma_core",
"@kelvin_hw//hdl/chisel:kelvin_core",
],
}),
)