diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-23 23:00:00 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-23 23:00:00 +0200 |
commit | 7abe15a7baf6065b10a121b10f6d9edda6ed8280 (patch) | |
tree | e9423cfe9649e42f6cb7688782c79cd6d20db0b5 | |
parent | 15aa29bf158c65a70d555c0d5b507ccfc6e84cca (diff) | |
download | meson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.zip meson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.tar.gz meson-7abe15a7baf6065b10a121b10f6d9edda6ed8280.tar.bz2 |
Pipeline backend is done and works.
-rwxr-xr-x | backends.py | 24 | ||||
-rwxr-xr-x | interpreter.py | 6 | ||||
-rw-r--r-- | test cases/30 pipeline/meson.build | 2 |
3 files changed, 32 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) diff --git a/interpreter.py b/interpreter.py index 67ee6a3..2a79b87 100755 --- a/interpreter.py +++ b/interpreter.py @@ -50,6 +50,9 @@ class Generator(InterpreterObject): self.methods.update({'process' : self.process_method}) self.process_kwargs(kwargs) + def get_exe(self): + return self.exe + def process_kwargs(self, kwargs): if 'arguments' not in kwargs: raise InvalidArguments('Generator must have "arguments" keyword argument.') @@ -90,6 +93,9 @@ class Generator(InterpreterObject): [gl.add_file(a) for a in args] return gl + def get_arglist(self): + return self.arglist + class GeneratedList(InterpreterObject): def __init__(self, generator): InterpreterObject.__init__(self) diff --git a/test cases/30 pipeline/meson.build b/test cases/30 pipeline/meson.build index 64b28ce..f43d18c 100644 --- a/test cases/30 pipeline/meson.build +++ b/test cases/30 pipeline/meson.build @@ -9,3 +9,5 @@ arguments : ['@INPUTNAME@', '@OUTPUTNAME@']) generated = gen.process('input_src.dat') e2 = executable('prog', 'prog.c', gen_src : generated) + +add_test('pipelined', e2) |