Sto cercando di aggiungere un generatore di codice alla build di bazel scrivendo una regola per eseguire il generatore, ma sono bloccato ad aggiungere il file di intestazione generato come dipendenza del percorso di inclusione alla libreria in cui sto provando costruire.Generatore di file di intestazione Bazel
La regola si presenta così:
def _impl(ctx):
output = ctx.outputs.out
input = ctx.attr.defs
md_dir = list(ctx.attr.md_dir.files)[0]
print("generating", output.path)
ctx.action(
outputs=[output],
progress_message="Generating %s" % md_dir,
command="python codegen.py -md_dir %s %s -o %s" % (md_dir.path, input, output.path)
)
code_generate = rule(
implementation=_impl,
attrs={
"defs": attr.string(),
"md_dir": attr.label(allow_files=True, single_file=True),
"out": attr.output()
},
)
e il file BUILD in questo modo:
load("/common/code_generate", "code_generate")
code_generate(
name="generate_header_defs",
defs="common/header_definition_file",
md_dir="header_defs",
out="gen_header.h",
)
cc_library(
name="lnt",
hdrs=glob(["*.h"]),
srcs=["source.c":gen_header.h"],
visibility=["//visibility:public"],
deps=["@dep1//:x", "@dep2//:y", "@dep3//:z"],
)
il codice funziona generazione e scrive il codice per Bazel-out/local-FastBuild/bin /common/gen_header.h ma la riga di comando gcc non aggiunge il percorso di inclusione al file di intestazione generato ciò che porta a errore: gen_header.h: Nessun file o directory