コード例 #1
0
 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
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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')]
コード例 #5
0
    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')]