Update ab.

This commit is contained in:
David Given
2024-10-02 19:46:50 +02:00
parent f48d1c5196
commit a777470cda
3 changed files with 29 additions and 16 deletions

View File

@@ -11,6 +11,7 @@ CFLAGS ?= -g -Og
LDFLAGS ?= -g LDFLAGS ?= -g
PKG_CONFIG ?= pkg-config PKG_CONFIG ?= pkg-config
ECHO ?= echo ECHO ?= echo
CP ?= cp
TARGETS ?= +all TARGETS ?= +all
ifdef VERBOSE ifdef VERBOSE

View File

@@ -472,7 +472,7 @@ def simplerule(
name=self.name, name=self.name,
ins=ins + deps, ins=ins + deps,
outs=outs, outs=outs,
label=self.templateexpand("{label} {name}"), label=self.templateexpand("{label} {name}") if label else None,
cmds=cs, cmds=cs,
) )
@@ -497,8 +497,8 @@ def export(self, name=None, items: TargetsMap = {}, deps: Targets = []):
cwd=self.cwd, cwd=self.cwd,
ins=[srcs[0]], ins=[srcs[0]],
outs=[destf], outs=[destf],
commands=["cp %s %s" % (srcs[0], destf)], commands=["$(CP) %s %s" % (srcs[0], destf)],
label="CP", label="",
) )
subrule.materialise() subrule.materialise()

View File

@@ -95,7 +95,9 @@ def cxxfile(
def findsources(name, srcs, deps, cflags, toolchain, filerule, cwd): def findsources(name, srcs, deps, cflags, toolchain, filerule, cwd):
headers = filenamesmatchingof(srcs, "*.h") headers = filenamesmatchingof(srcs, "*.h")
cflags = cflags + ["-I" + dirname(h) for h in headers] cflags = cflags + ["-I" + dirname(h) for h in headers]
deps = deps + headers
for d in deps:
headers += d.args.get("cheaders", [d])
objs = [] objs = []
for s in flatten(srcs): for s in flatten(srcs):
@@ -103,7 +105,7 @@ def findsources(name, srcs, deps, cflags, toolchain, filerule, cwd):
filerule( filerule(
name=join(name, f.removeprefix("$(OBJ)/")), name=join(name, f.removeprefix("$(OBJ)/")),
srcs=[f], srcs=[f],
deps=deps, deps=headers,
cflags=cflags, cflags=cflags,
toolchain=toolchain, toolchain=toolchain,
cwd=cwd, cwd=cwd,
@@ -129,8 +131,16 @@ def cheaders(
caller_cflags=[], caller_cflags=[],
deps: Targets = None, deps: Targets = None,
): ):
hdr_deps = []
for d in deps:
hdr_deps += d.args.get("cheaders", [d])
hdr_caller_cflags = collectattrs(
targets=hdr_deps, name="caller_cflags", initial=caller_cflags
)
cs = [] cs = []
ins = list(hdrs.values()) ins = hdrs.values()
outs = [] outs = []
i = 0 i = 0
for dest, src in hdrs.items(): for dest, src in hdrs.items():
@@ -139,7 +149,7 @@ def cheaders(
len(s) == 1 len(s) == 1
), "the target of a header must return exactly one file" ), "the target of a header must return exactly one file"
cs += ["cp {ins[" + str(i) + "]} {outs[" + str(i) + "]}"] cs += ["$(CP) {ins[" + str(i) + "]} {outs[" + str(i) + "]}"]
outs += ["=" + dest] outs += ["=" + dest]
i = i + 1 i = i + 1
@@ -148,9 +158,9 @@ def cheaders(
ins=ins, ins=ins,
outs=outs, outs=outs,
commands=cs, commands=cs,
deps=deps, deps=hdr_deps,
label="CHEADERS", label="CHEADERS",
args={"caller_cflags": caller_cflags + ["-I" + self.dir]}, args={"caller_cflags": hdr_caller_cflags + ["-I" + self.dir]},
) )
@@ -174,7 +184,7 @@ def libraryimpl(
cheaders( cheaders(
replaces=self, replaces=self,
hdrs=hdrs, hdrs=hdrs,
deps=targetswithtraitsof(deps, "cheaders"), deps=deps,
caller_cflags=caller_cflags, caller_cflags=caller_cflags,
) )
return return
@@ -182,7 +192,7 @@ def libraryimpl(
hr = cheaders( hr = cheaders(
name=self.localname + "_hdrs", name=self.localname + "_hdrs",
hdrs=hdrs, hdrs=hdrs,
deps=targetswithtraitsof(deps, "cheaders"), deps=deps,
caller_cflags=caller_cflags, caller_cflags=caller_cflags,
) )
hr.materialise() hr.materialise()
@@ -191,7 +201,7 @@ def libraryimpl(
objs = findsources( objs = findsources(
self.localname, self.localname,
srcs, srcs,
targetswithtraitsof(deps, "cheaders"), deps,
cflags, cflags,
toolchain, toolchain,
kind, kind,
@@ -205,13 +215,15 @@ def libraryimpl(
label=label, label=label,
commands=commands, commands=commands,
args={ args={
"caller_cflags": collectattrs(
targets=deps + ([hr] if hr else []), name="caller_cflags"
),
"caller_ldflags": collectattrs( "caller_ldflags": collectattrs(
targets=deps, name="caller_ldflags", initial=caller_ldflags targets=deps, name="caller_ldflags", initial=caller_ldflags
), ),
}, }
| (
{"cheaders": [hr], "caller_cflags": hr.args["caller_cflags"]}
if hr
else {}
),
traits={"cheaders"}, traits={"cheaders"},
) )
self.outs = self.outs + (hr.outs if hr else []) self.outs = self.outs + (hr.outs if hr else [])