summaryrefslogtreecommitdiff
path: root/cook.py
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2022-08-06 10:50:56 +0200
committerAlejandro Sior <aho@sior.be>2022-08-06 10:50:56 +0200
commit83e7d98e5ac459d5d40b142dbd66ce63ef1aa983 (patch)
treea8476aa37ce511c5f98ad8d502bea5597baa0bba /cook.py
parent88d707bd8043b2257d2fc6498dc76defa0164793 (diff)
cook: rudimentary handling of libraries
Diffstat (limited to 'cook.py')
-rwxr-xr-xcook.py41
1 files changed, 33 insertions, 8 deletions
diff --git a/cook.py b/cook.py
index 40aad8e..58da1d9 100755
--- a/cook.py
+++ b/cook.py
@@ -49,17 +49,19 @@ C_COMPILERS = {
}
C_LINKERS = {
- 'gcc': lambda: Processor(
+ 'gcc': lambda: CExe(
"ld-gcc",
find_program("gcc"),
- lambda o, i, ea: "-o %s %s %s" % (o, i, ea),
- lambda o, i, cmd: "LD %s" % (o)
+ mkargs=lambda o, i, ea: "-o %s %s %s" % (o, i, ea),
+ mklib=lambda l: "-l" + l,
+ desc=lambda o, i, cmd: "LD %s" % (o)
),
- 'clang': lambda: Processor(
+ 'clang': lambda: CExe(
"ld-clang",
find_program("clang"),
- lambda o, i, ea: "-o %s %s %s" % (o, i, ea),
- lambda o, i, cmd: "LD %s" % (o)
+ mkargs=lambda o, i, ea: "-o %s %s %s" % (o, i, ea),
+ mklib=lambda l: "-l" + l,
+ desc=lambda o, i, cmd: "LD %s" % (o)
)
}
@@ -224,8 +226,10 @@ class CTarget(Target):
def gen_makefile(self):
out = []
+
if self.header_depends != []:
out += ["-include %s\n" % hdep for hdep in self.header_depends]
+
out += super().gen_makefile()
return "".join(out)
@@ -250,8 +254,9 @@ class CC(Vec):
targets = []
for input in inputs:
- path = BUILD / self.mkout(input.path)
- hdep = BUILD / self.mkdep(input.path)
+ out = self.mkout(input.path)
+ path = BUILD / out
+ hdep = BUILD / self.mkdep(out)
targets.append(CTarget(path, self, input, header_depends = hdep, extra_args = extra_args))
@@ -268,6 +273,26 @@ class CC(Vec):
return out
+class CExe(Processor):
+ def __init__(self, name, exe, mkargs, mklib, desc=DEFDESC):
+ super().__init__(name, exe, mkargs, desc = desc)
+
+ self.mklib = mklib
+
+ def __call__(self, name, *args, libs = [], extra_args = []):
+ return self.gen(name, *args, libs = libs, extra_args = extra_args)
+
+ def gen(self, name, *args, libs, extra_args = []):
+ extra_args = flatten(extra_args)
+ libs = flatten(libs)
+
+ # Note: this is bad, perhaps take a "depends" also/instead
+ # XXX Handling of libraries is temporary
+ libs_args = [self.mklib(lib) for lib in libs]
+ extra_args += libs_args
+
+ return super().gen(name, *args, extra_args = extra_args)
+
def find_one(names):
for name in names:
program = find_program(name, required=False)