blob: 93278422f338ff49e4477f66c2f6a05bb015fc0c [file] [log] [blame]
def _javacc_bootstrap(ctx):
outs = []
java_outs = []
jj_outs = []
for out_basename in ctx.attr.outs:
out = ctx.actions.declare_file(ctx.attr.name + "/" + out_basename)
outs.append(out)
if out_basename.endswith(".java"):
java_outs.append(out)
if out_basename.endswith(".jj"):
jj_outs.append(out)
ctx.actions.run(
outputs = outs,
inputs = ctx.files.src,
executable = ctx.executable.javacc,
arguments = [
"-OUTPUT_DIRECTORY:" + outs[0].dirname,
ctx.file.src.path,
],
mnemonic = "JavaccBootstrap",
)
return [
DefaultInfo(files = depset(outs)),
OutputGroupInfo(
jj_files = depset(jj_outs),
java_files = depset(java_outs),
),
]
javacc_bootstrap = rule(
implementation = _javacc_bootstrap,
attrs = {
"javacc": attr.label(
executable = True,
cfg = "exec",
),
"src": attr.label(
allow_single_file = True,
),
"outs": attr.string_list(),
},
)