def generate_rule(self, name, command, description=None, depfile=None, generator=False, pool=None, restat=False, rspfile=None, rspfile_content=None, deps=None): self.__all_rule_names.add(name) self._add_rule('rule %s' % name) self._add_rule(' command = %s' % command) if description: self._add_rule(' description = %s' % console.colored(description, 'dimpurple')) if depfile: self._add_rule(' depfile = %s' % depfile) if generator: self._add_rule(' generator = 1') if pool: self._add_rule(' pool = %s' % pool) if restat: self._add_rule(' restat = 1') if rspfile: self._add_rule(' rspfile = %s' % rspfile) if rspfile_content: self._add_rule(' rspfile_content = %s' % rspfile_content) if deps: self._add_rule(' deps = %s' % deps) self._add_rule('') # An empty line to improve readability
def ninja_rules(self): rule = '%s__rule__' % regular_variable_name( self._source_file_path(self.name)) cmd = self.ninja_command() description = console.colored( '%s //%s' % (self.data['cmd_name'], self.fullname), 'dimpurple') self._write_rule('''rule %s command = %s && cd %s && ls ${out} > /dev/null description = %s ''' % (rule, cmd, self.blade.get_root_dir(), description)) outputs = [self._target_file_path(o) for o in self.data['outs']] inputs = self._expand_srcs() vars = {} if '${_in_1}' in cmd: vars['_in_1'] = inputs[0] if '${_out_1}' in cmd: vars['_out_1'] = outputs[0] if self.data['heavy']: vars['pool'] = 'heavy_pool' self.ninja_build(rule, outputs, inputs=inputs, implicit_deps=self.implicit_dependencies(), variables=vars) for i, out in enumerate(outputs): self._add_target_file(str(i), out)
def generate(self): """Generate code for backend build system.""" # NOTE: Here is something different with normal targets. # We have to generate each `rule` for a `gen_rule` target but not sharing a predefined rule. # Because the `command` variable is not lazy evaluated althrough it can be overridden in a # `build` statement, so any other build scoped variables are expanded to empty. rule = '%s__rule__' % regular_variable_name( self._source_file_path(self.name)) cmd = self._expand_command() description = console.colored( '%s %s' % (self.attr['cmd_name'], self.fullname), 'dimpurple') self._write_rule(_RULE_FORMAT % (rule, cmd, self.blade.get_root_dir(), description)) outputs = [self._target_file_path(o) for o in self.attr['outs']] inputs = self._expand_srcs() vars = {} if '${_in_1}' in cmd: vars['_in_1'] = inputs[0] if '${_out_1}' in cmd: vars['_out_1'] = outputs[0] if self.attr['heavy']: vars['pool'] = 'heavy_pool' self.generate_build(rule, outputs, inputs=inputs, implicit_deps=self.implicit_dependencies(), variables=vars) for i, out in enumerate(outputs): self._add_target_file(str(i), out)
def ninja_rules(self): rule = '%s__rule__' % self._regular_variable_name( self._source_file_path(self.name)) cmd = self.ninja_command() description = console.colored('COMMAND //' + self.fullname, 'dimpurple') self._write_rule('''rule %s command = %s && cd %s && ls ${out} > /dev/null description = %s ''' % (rule, cmd, self.blade.get_root_dir(), description)) outputs = [self._target_file_path(o) for o in self.data['outs']] inputs = [self._source_file_path(s) for s in self.srcs] vars = {} if '${_in_1}' in cmd: vars['_in_1'] = inputs[0] if '${_out_1}' in cmd: vars['_out_1'] = outputs[0] self.ninja_build(outputs, rule, inputs=inputs, implicit_deps=self.implicit_dependencies(), variables=vars) for i, out in enumerate(outputs): self._add_target_file(str(i), out) self.data['generated_hdrs'] = [o for o in outputs if o.endswith('.h')]
def ninja_rules(self): rule = '%s__rule__' % self._regular_variable_name( self._source_file_path(self.name)) cmd = self.ninja_command() description = console.colored('COMMAND //' + self.fullname, 'dimpurple') self._write_rule('''rule %s command = %s && cd %s && ls ${out} > /dev/null description = %s ''' % (rule, cmd, self.blade.get_root_dir(), description)) outputs = [self._target_file_path(o) for o in self.data['outs']] inputs = [self._source_file_path(s) for s in self.srcs] vars = {} if '${_in_1}' in cmd: vars['_in_1'] = inputs[0] if '${_out_1}' in cmd: vars['_out_1'] = outputs[0] self.ninja_build(outputs, rule, inputs=inputs, implicit_deps=self.implicit_dependencies(), variables=vars) for i, out in enumerate(outputs): self._add_target_file(str(i), out) self.data['generated_hdrs'] = [o for o in outputs if o.endswith('.h')]