Ich verwende Bazel für den Aufbau von Bare-Metal-Programmen. Ich würde gerne die von bazel generierten Unit Tests auf qemu ausführen. diejenigen, die durch die Schaffung meine eigene Regel in einem‘.bzl'-Datei auszuführen, aber es scheint, dass die Ergebnisse sind obligatorisch auf allen RegelaktionenBazel: Führen Sie einen Befehl ohne eine Ausgabe
qemu-system-* -some_args -kernel bazel-bin/whatever/generated.elf
Ich habe versucht. Beachten Sie, dass ich abhängig von der Zielarchitektur verschiedene qemu-Befehle mit unterschiedlichen Argumenten aufrufen muss. Ich würde diese gerne an die Regel weitergeben.
Gibt es eine Möglichkeit, einen Shell-Befehl ohne Ausgaben aufzurufen?
Vielen Dank im Voraus!
Wenn nötig, ist es das, was ich bisher (noch ich bin nicht sicher, welche Teile korrekt sind als bazel in der Analysephase beendet):
# run_tests.bzl
===============
def _impl(ctx):
qemu = ctx.attr.qemu
machine = ctx.attr.machine
cpu = ctx.attr.cpu
target = ctx.attr.target
# The command may only access files declared in inputs.
ctx.actions.run_shell(
arguments = [qemu, machine, cpu, target],
command="$1 -M $2 -cpu $3 -nographic -monitor null -serial null -semihosting -kernel $4")
run_tests = rule(
implementation=_impl,
attrs = {"qemu" : attr.string(),
"machine" : attr.string(),
"cpu" : attr.string(),
"target" : attr.string(),},
executable = True
)
Und meine BUILD-Datei:
# BUILD
=======
load("//make:run_tests.bzl", "run_tests")
run_tests(
name = "portos",
qemu = "qemu-system-arm",
machine = "realview-pbx-a9",
cpu = "cortex-a9",
target = ":test_portos.elf"
)
cc_binary(
name = "test_portos.elf",
srcs = glob(["*.cc"]),
deps = ["//src:portos",
"@unity//:unity"],
copts = ["-Isrc",
"-Iexternal/unity/src",
"-Iexternal/unity/extras/fixture/src"]
)
Danke, das war genau das was ich gesucht habe. –