diff options
Diffstat (limited to 'cook.py')
| -rwxr-xr-x | cook.py | 37 |
1 files changed, 20 insertions, 17 deletions
@@ -20,7 +20,8 @@ def flatten(el): ROOT = Path.cwd() BUILD = Path("bld").resolve().relative_to(ROOT) -DEFDESC = lambda o, i, cmd: "%s" % (cmd) +DEFMKDESC = lambda o, i, cmd: "%s" % (cmd) +DEFMKOUT = lambda i: "%s" % (i) #self, name, exe, mkargs, mkout, mkinc, desc=DEFDESC @@ -33,7 +34,7 @@ C_COMPILERS = { mkinc=lambda i: "-I" + i, mkdep=lambda o: "%s.d" % (o), depstyle="gcc", - desc=lambda o, i, cmd: "CC %s" % (o), + mkdesc=lambda o, i, cmd: "CC %s" % (o), ), 'clang': lambda: CC( "clang", @@ -44,7 +45,7 @@ C_COMPILERS = { mkinc=lambda i: "-I" + i, mkdep=lambda o: "%s.d" % (o), depstyle="gcc", - desc=lambda o, i, cmd: "CC %s" % (o), + mkdesc=lambda o, i, cmd: "CC %s" % (o), ) } @@ -54,14 +55,14 @@ C_LINKERS = { find_program("gcc"), 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) + mkdesc=lambda o, i, cmd: "LD %s" % (o) ), 'clang': lambda: CExe( "ld-clang", find_program("clang"), 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) + mkdesc=lambda o, i, cmd: "LD %s" % (o) ) } @@ -134,7 +135,7 @@ class Target(File): out = "%s: %s\n" % (self.path, inputs) out += "\t@$(%s) %s\n" % (self.processor.name, self.processor.mkargs("$@", inputs, extra_args)) - out += "\t@echo '%s'" % (self.processor.desc("$@", inputs, extra_args)) + out += "\t@echo '%s'" % (self.processor.mkdesc("$@", inputs, extra_args)) return out @@ -165,7 +166,7 @@ class ProcessorMeta(type): class Processor(metaclass = ProcessorMeta): mdb = dict() - def __init__(self, name, exe, mkargs, desc=DEFDESC): + def __init__(self, name, exe, mkargs, mkout=DEFMKOUT, mkdesc=DEFMKDESC): # The name of the processor self.name = name @@ -175,15 +176,18 @@ class Processor(metaclass = ProcessorMeta): # The arguments that is used to launch the process self.mkargs = wrap_lambda(mkargs) + # The way to generate output path + self.mkout = wrap_lambda(mkout) + # The description - self.desc = wrap_lambda(desc) + self.mkdesc = wrap_lambda(mkdesc) def __call__(self, name, *args, extra_args = []): return self.gen(name, *args, extra_args = extra_args) def gen(self, name, *args, extra_args = []): inputs = File.resolve(args) - path = BUILD / Path.cwd().relative_to(ROOT) / name + path = BUILD / Path(".").resolve().relative_to(ROOT) / self.mkout(name) return Target(path, self, inputs, extra_args) @@ -196,13 +200,12 @@ class Processor(metaclass = ProcessorMeta): cmd = "%s %s" % (self.exe, self.mkargs("$out", "$in", "$extra")) out += " command = %s\n" % (cmd) - out += " description = %s\n" % (self.desc("$out", "$in", cmd)) + out += " description = %s\n" % (self.mkdesc("$out", "$in", cmd)) return out class Vec(Processor): - def __init__(self, name, exe, mkargs, mkout, desc=DEFDESC): - super().__init__(name, exe, mkargs, desc=desc) - self.mkout = wrap_lambda(mkout) + def __init__(self, name, exe, mkargs, mkout, mkdesc=DEFMKDESC): + super().__init__(name, exe, mkargs, mkout = mkout, mkdesc = mkdesc) def __call__(self, *args, extra_args = []): return self.gen(*args, extra_args = extra_args) @@ -234,8 +237,8 @@ class CTarget(Target): return "".join(out) class CC(Vec): - def __init__(self, name, exe, mkargs, mkout, mkinc, mkdep=None, depstyle=None, desc=DEFDESC): - super().__init__(name, exe, mkargs, mkout, desc=desc) + def __init__(self, name, exe, mkargs, mkout, mkinc, mkdep=None, depstyle=None, mkdesc=DEFMKDESC): + super().__init__(name, exe, mkargs, mkout, mkdesc=mkdesc) self.mkinc = mkinc self.mkdep = mkdep self.depstyle = depstyle @@ -274,8 +277,8 @@ class CC(Vec): return out class CExe(Processor): - def __init__(self, name, exe, mkargs, mklib, desc=DEFDESC): - super().__init__(name, exe, mkargs, desc = desc) + def __init__(self, name, exe, mkargs, mklib, mkdesc=DEFMKDESC): + super().__init__(name, exe, mkargs, mkdesc = mkdesc) self.mklib = mklib |
