summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2022-08-11 10:17:26 +0200
committerAlejandro Sior <aho@sior.be>2022-08-11 10:17:26 +0200
commit1a3e4c8d3ee7a177506928500b832c1df6aba667 (patch)
treeea428e33fd598fb8002cee6012647f8edab0502d
parent80a0219d4929ffbb584a6153d2aed35af05b3ebd (diff)
cook: supporting processors made of other targets
-rwxr-xr-xcook.py31
1 files changed, 22 insertions, 9 deletions
diff --git a/cook.py b/cook.py
index ad5021c..3b8e6c8 100755
--- a/cook.py
+++ b/cook.py
@@ -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)