diff options
| author | Alejandro Sior <aho@sior.be> | 2022-08-06 09:38:43 +0200 |
|---|---|---|
| committer | Alejandro Sior <aho@sior.be> | 2022-08-06 09:38:43 +0200 |
| commit | 654a2d9e06fb68878455cd24b4efb57fe4909c86 (patch) | |
| tree | 5935b9f32b1fb0a6eb7e654ea36767285c5bd8a8 /cook.py | |
| parent | a97136978520d8a8f1b113eed9567459440ebae4 (diff) | |
cook: rename classes
Diffstat (limited to 'cook.py')
| -rwxr-xr-x | cook.py | 98 |
1 files changed, 37 insertions, 61 deletions
@@ -49,13 +49,13 @@ C_COMPILERS = { } C_LINKERS = { - 'gcc': lambda: Machine( + 'gcc': lambda: Processor( "ld-gcc", find_program("gcc"), lambda o, i, ea: "-o %s %s %s" % (o, i, ea), lambda o, i, cmd: "LD %s" % (o) ), - 'clang': lambda: Machine( + 'clang': lambda: Processor( "ld-clang", find_program("clang"), lambda o, i, ea: "-o %s %s %s" % (o, i, ea), @@ -113,12 +113,12 @@ class File(metaclass = FileMeta): def resolve(*args): return [File(file) for file in flatten(args)] -class Process(File): - def __init__(self, path, machine, inputs, extra_args = []): +class Target(File): + def __init__(self, path, processor, inputs, extra_args = []): super().__init__(path) # The generator that created this process - self.machine = machine + self.processor = processor # The inputs self.inputs = inputs @@ -127,15 +127,15 @@ class Process(File): self.extra_args = extra_args def gen_makefile(self): - return self.machine.gen_proc_makefile(self) + return self.processor.gen_target_makefile(self) def gen_ninja(self): - return self.machine.gen_proc_ninja(self) + return self.processor.gen_target_ninja(self) -class MachineMeta(type): +class ProcessorMeta(type): def __call__(cls, name, *rest, **krest): # If already a file, return it - if issubclass(type(name), Machine): + if issubclass(type(name), Processor): return name if name in cls.mdb: @@ -146,11 +146,11 @@ class MachineMeta(type): cls.mdb[name] = obj return obj -class Machine(metaclass = MachineMeta): +class Processor(metaclass = ProcessorMeta): mdb = dict() def __init__(self, name, exe, mkargs, desc=DEFDESC): - # The name of the machine + # The name of the processor self.name = name # Executable used in the process @@ -169,13 +169,13 @@ class Machine(metaclass = MachineMeta): inputs = File.resolve(args) path = BUILD / Path.cwd().relative_to(ROOT) / name - return Process(path, self, inputs, extra_args) + return Target(path, self, inputs, extra_args) - def gen_proc_makefile(self, proc): - inputs = " ".join([str(x) for x in proc.inputs]) - extra_args = " ".join([x for x in proc.extra_args]) + def gen_target_makefile(self, target): + inputs = " ".join([str(x) for x in target.inputs]) + extra_args = " ".join([x for x in target.extra_args]) - out = "%s: %s\n" % (proc.path, inputs) + out = "%s: %s\n" % (target.path, inputs) out += "\t@$(%s) %s\n" % (self.name, self.mkargs("$@", inputs, extra_args)) out += "\t@echo '%s'" % (self.desc("$@", inputs, extra_args)) @@ -184,12 +184,12 @@ class Machine(metaclass = MachineMeta): def gen_makefile(self): return "%s = %s" % (self.name, self.exe) - def gen_proc_ninja(self, proc): - inputs = " ".join([str(x) for x in proc.inputs]) + def gen_target_ninja(self, target): + inputs = " ".join([str(x) for x in target.inputs]) - out = "build %s: %s %s" % (proc.path, self.name, inputs) - if proc.extra_args != []: - extra_args = " ".join([x for x in proc.extra_args]) + out = "build %s: %s %s" % (target.path, self.name, inputs) + if target.extra_args != []: + extra_args = " ".join([x for x in target.extra_args]) out += "\n extra = %s" % (extra_args) return out @@ -203,7 +203,7 @@ class Machine(metaclass = MachineMeta): out += " description = %s\n" % (self.desc("$out", "$in", cmd)) return out -class Vec(Machine): +class Vec(Processor): def __init__(self, name, exe, mkargs, mkout, desc=DEFDESC): super().__init__(name, exe, mkargs, desc=desc) self.mkout = wrap_lambda(mkout) @@ -215,13 +215,13 @@ class Vec(Machine): args = File.resolve(args) extra_args = flatten(extra_args) - procs = [] + targets = [] for i in args: path = BUILD / i.path.parent / self.mkout(i.path) - procs.append(Process(path, self, [i], extra_args)) + targets.append(Target(path, self, [i], extra_args)) - return procs + return targets class CC(Vec): def __init__(self, name, exe, mkargs, mkout, mkinc, mkdep=None, depstyle=None, desc=DEFDESC): @@ -253,12 +253,12 @@ class CC(Vec): return out - def gen_proc_makefile(self, proc): - out = super().gen_proc_makefile(proc) + def gen_target_makefile(self, target): + out = super().gen_target_makefile(target) out += "\n" if self.mkdep and self.depstyle == "gcc": - out += "-include %s\n" % self.mkdep(proc.path) + out += "-include %s\n" % self.mkdep(target.path) elif self.mkdep: raise Exception("makefile dependencies for selected depstyle is unimplemented") @@ -298,45 +298,21 @@ def subdir(dir): subdir(".") def gen_bld(): - for proc in File.fdb.values(): - if not issubclass(type(proc), Process): - continue - proc.path.parent.mkdir(parents=True, exist_ok=True) + return [target.path.parent.mkdir(parents=True, exist_ok=True) + for target in File.fdb.values() + if issubclass(type(target), Target)] def gen_makefile(): - out = "" - for mach in Machine.mdb.values(): - out += mach.gen_makefile() - out += "\n" - - all = [] - for proc in File.fdb.values(): - if not issubclass(type(proc), Process): - continue - - out += "\n" - out += proc.gen_makefile() - out += "\n" - all.append(str(proc)) - all = " ".join(all) + out = [mach.gen_makefile() + "\n" for mach in Processor.mdb.values()] + out += ["\n" + target.gen_makefile() for target in File.fdb.values() if issubclass(type(target), Target)] - out += "\n.PHONY: clean\nclean:\n\trm -f %s" % (all) - return out + return "".join(out) def gen_ninja(): - out = "" - for mach in Machine.mdb.values(): - out += mach.gen_ninja() - out += "\n" - - for proc in File.fdb.values(): - if not issubclass(type(proc), Process): - continue - - out += proc.gen_ninja() - out += "\n" + out = [mach.gen_ninja() + "\n" for mach in Processor.mdb.values()] + out += [target.gen_ninja() + "\n" for target in File.fdb.values() if issubclass(type(target), Target)] - return out + return "".join(out) parser = argparse.ArgumentParser(description="cook build system") parser.add_argument("-G", type=str, metavar="backend", help="Backend to generate for: ninja or makefile") |
