Files
fluxengine/scripts/build.py

84 lines
1.8 KiB
Python

from build.ab import Rule, simplerule, Targets, TargetsMap
from build.c import cxxprogram, HostToolchain
encoders = {}
@Rule
def protoencode_single(self, name, srcs: Targets, proto, symbol):
if proto not in encoders:
r = cxxprogram(
name="protoencode_" + proto,
srcs=["scripts/protoencode.cc"],
cflags=["-DPROTO=" + proto],
deps=[
"lib/config+proto_lib",
"lib/fluxsource+proto_lib",
"lib/fluxsink+proto_lib",
"tests+test_proto_lib",
"+protobuf_lib",
"+fmt_lib",
],
)
encoders[proto] = r
else:
r = encoders[proto]
r.materialise()
simplerule(
replaces=self,
ins=srcs,
outs=[f"={name}.cc"],
deps=[r],
commands=["{deps[0]} {ins} {outs} " + symbol],
label="PROTOENCODE",
)
@Rule
def protoencode(self, name, proto, srcs: TargetsMap, symbol):
encoded = [
protoencode_single(
name=f"{k}_cc",
srcs=[v],
proto=proto,
symbol=f"{symbol}_{k}_pb",
)
for k, v in srcs.items()
]
simplerule(
replaces=self,
ins=encoded,
outs=[f"={name}.cc"],
commands=["cat {ins} > {outs}"],
label="CONCAT",
)
cxxprogram(
name="mkdoc",
srcs=["./mkdoc.cc"],
deps=[
"src/formats",
"lib/config+proto_lib",
"lib/fluxsource+proto_lib",
"lib/fluxsink+proto_lib",
"+fmt_lib",
"+protobuf_lib",
],
)
cxxprogram(
name="mkdocindex",
srcs=["./mkdocindex.cc"],
deps=[
"src/formats",
"lib/config+proto_lib",
"lib/fluxsource+proto_lib",
"lib/fluxsink+proto_lib",
"+fmt_lib",
"+protobuf_lib",
],
)