diff options
| author | Alejandro Sior <aho@sior.be> | 2022-08-06 10:50:56 +0200 |
|---|---|---|
| committer | Alejandro Sior <aho@sior.be> | 2022-08-06 10:50:56 +0200 |
| commit | 83e7d98e5ac459d5d40b142dbd66ce63ef1aa983 (patch) | |
| tree | a8476aa37ce511c5f98ad8d502bea5597baa0bba /cook.py | |
| parent | 88d707bd8043b2257d2fc6498dc76defa0164793 (diff) | |
cook: rudimentary handling of libraries
Diffstat (limited to 'cook.py')
| -rwxr-xr-x | cook.py | 41 |
1 files changed, 33 insertions, 8 deletions
@@ -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) |
