aboutsummaryrefslogtreecommitdiff
path: root/backends.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-23 23:00:00 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-23 23:00:00 +0200
commit7abe15a7baf6065b10a121b10f6d9edda6ed8280 (patch)
treee9423cfe9649e42f6cb7688782c79cd6d20db0b5 /backends.py
parent15aa29bf158c65a70d555c0d5b507ccfc6e84cca (diff)
downloadmeson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.zip
meson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.tar.gz
meson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.tar.bz2
Pipeline backend is done and works.
Diffstat (limited to 'backends.py')
-rwxr-xr-xbackends.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/backends.py b/backends.py
index 1cf7778..adce252 100755
--- a/backends.py
+++ b/backends.py
@@ -85,6 +85,7 @@ class Backend():
return
self.process_target_dependencies(target, outfile)
print('Generating target', name)
+ self.generate_custom_generator_rules(target, outfile)
outname = self.get_target_filename(target)
obj_list = []
if target.has_pch():
@@ -347,6 +348,29 @@ class NinjaBackend(Backend):
outfile.write('\n')
outfile.write('\n')
+ def generate_custom_generator_rules(self, target, outfile):
+ for genlist in target.get_generated_sources():
+ generator = genlist.get_generator()
+ exe = generator.get_exe()
+ infilelist = genlist.get_infilelist()
+ outfilelist = genlist.get_outfilelist()
+ if len(infilelist) != len(outfilelist):
+ raise RuntimeError('Internal data structures broken.')
+ exe_file = os.path.join(self.environment.get_build_dir(), self.get_target_filename(exe))
+ base_args = generator.get_arglist()
+ for i in range(len(infilelist)):
+ infilename = os.path.join(self.build_to_src, infilelist[i])
+ outfilename = os.path.join(self.get_target_dir(target), outfilelist[i])
+ args = [x.replace("@INPUTNAME@", infilename).replace('@OUTPUTNAME@', outfilename)\
+ for x in base_args]
+ cmdlist = [exe_file] + args
+ build = 'build %s: CUSTOM_COMMAND %s | %s\n' % \
+ (ninja_quote(outfilename), ninja_quote(infilename), ninja_quote(self.get_target_filename(exe)))
+ command = ' COMMAND = %s\n\n' % \
+ ' '.join(["'%s'" % ninja_quote(i) for i in cmdlist])
+ outfile.write(build)
+ outfile.write(command)
+
def generate_single_compile(self, target, outfile, src, is_generated=False):
compiler = self.get_compiler_for_source(src)
commands = self.generate_basic_compiler_flags(target, compiler)