diff options
| author | Alejandro Sior <aho@sior.be> | 2022-08-11 10:17:26 +0200 |
|---|---|---|
| committer | Alejandro Sior <aho@sior.be> | 2022-08-11 10:17:26 +0200 |
| commit | 1a3e4c8d3ee7a177506928500b832c1df6aba667 (patch) | |
| tree | ea428e33fd598fb8002cee6012647f8edab0502d /cook.py | |
| parent | 80a0219d4929ffbb584a6153d2aed35af05b3ebd (diff) | |
cook: supporting processors made of other targets
Diffstat (limited to 'cook.py')
| -rwxr-xr-x | cook.py | 31 |
1 files changed, 22 insertions, 9 deletions
@@ -83,7 +83,7 @@ class File(metaclass = FileMeta): return [File(file) for file in flatten(args)] class Target(File): - def __init__(self, path, processor, inputs, extra_args = []): + def __init__(self, path, processor, inputs, depends = [], extra_args = []): super().__init__(path) # The generator that created this process @@ -92,14 +92,20 @@ class Target(File): # The inputs self.inputs = File.resolve(inputs) + # Implicit dependencies + self.depends = File.resolve(depends) + if processor.exe_is_process: + self.depends += [processor.exe] + # The extra arguments taken self.extra_args = flatten(extra_args) def gen_makefile(self): inputs = " ".join([str(x) for x in self.inputs]) + depends = " ".join([str(x) for x in self.depends]) extra_args = " ".join([x for x in self.extra_args]) - out = "%s: %s\n" % (self.path, inputs) + out = "%s: %s %s\n" % (self.path, inputs, depends) out += "\t@$(%s) %s\n" % (self.processor.name, self.processor.mkargs("$@", inputs, extra_args)) out += "\t@echo '%s'" % (self.processor.mkdesc("$@", inputs, extra_args)) @@ -107,9 +113,12 @@ class Target(File): def gen_ninja(self): inputs = " ".join([str(x) for x in self.inputs]) + depends = "" + if self.depends != []: + depends = "| " + " ".join([str(x) for x in self.depends]) extra_args = " ".join(self.extra_args) - out = "build %s: %s %s" % (self.path, self.processor.name, inputs) + out = "build %s: %s %s %s" % (self.path, self.processor.name, inputs, depends) if self.extra_args != []: out += "\n extra = %s" % (extra_args) @@ -138,6 +147,10 @@ class Processor(metaclass = ProcessorMeta): # Executable used in the process self.exe = File(exe) + if issubclass(type(self.exe), Target): + self.exe_is_process = True + else: + self.exe_is_process = False # The arguments that is used to launch the process self.mkargs = wrap_lambda(mkargs) @@ -151,11 +164,11 @@ class Processor(metaclass = ProcessorMeta): def __call__(self, *args, **kwargs): return self.gen(*args, **kwargs) - def gen(self, name, *args, extra_args = []): + def gen(self, name, *args, **kwargs): inputs = File.resolve(args) path = BUILD / Path(".").resolve().relative_to(ROOT) / self.mkout(name) - return Target(path, self, inputs, extra_args) + return Target(path, self, inputs, **kwargs) def gen_makefile(self): return "%s = %s" % (self.name, self.exe) @@ -497,8 +510,8 @@ class CModule: self.shared_ld_args += mod.shared_ld_args self.shared_cc_args += mod.shared_cc_args - def src(self, *args, extra_args = [], include_dirs = []): - obj = self.cc(*args, extra_args = [extra_args, self.cc_args, self.shared_cc_args], include_dirs = [include_dirs, self.includes, self.bcast_includes, self.shared_includes]) + def src(self, *args, extra_args = [], include_dirs = [], **kwargs): + obj = self.cc(*args, extra_args = [extra_args, self.cc_args, self.shared_cc_args], include_dirs = [include_dirs, self.includes, self.bcast_includes, self.shared_includes], **kwargs) self.objects += obj def mkdep(self, shared_includes = [], shared_libs = [], bcast_includes = [], shared_ld_args = [], shared_cc_args = []): @@ -508,8 +521,8 @@ class CModule: self.shared_cc_args += flatten(shared_cc_args) self.bcast_includes += flatten(bcast_includes) - def mkexe(self, name, extra_args = [], libs = []): - self.exes[name] = self.exe(name, self.objects, extra_args = [extra_args, self.ld_args, self.shared_ld_args], libs = [libs, self.libs, self.shared_libs]) + def mkexe(self, name, extra_args = [], libs = [], **kwargs): + self.exes[name] = self.exe(name, self.objects, extra_args = [extra_args, self.ld_args, self.shared_ld_args], libs = [libs, self.libs, self.shared_libs], **kwargs) return self.exes[name] pkgconfig = find_program("pkg-config", False) |
