def execute(self):
    """Compile all sources in a given target to object files."""

    def is_cc(source):
      _, ext = os.path.splitext(source)
      return ext in self.get_options().cc_extensions

    targets = self.context.targets(self.is_cpp)

    # Compile source files to objects.
    with self.invalidated(targets, invalidate_dependents=True) as invalidation_check:
      obj_mapping = self.context.products.get('objs')
      for vt in invalidation_check.all_vts:
        for source in vt.target.sources_relative_to_buildroot():
          if is_cc(source):
            if not vt.valid:
              with self.context.new_workunit(name='cpp-compile', labels=[WorkUnitLabel.MULTITOOL]):
                # TODO: Parallelise the compilation.
                # TODO: Only recompile source files that have changed since the
                #       object file was last written. Also use the output from
                #       gcc -M to track dependencies on headers.
                self._compile(vt.target, vt.results_dir, source)
            objpath = self._objpath(vt.target, vt.results_dir, source)
            obj_mapping.add(vt.target, vt.results_dir).append(objpath)
def execute ( self ) : def is_cc ( source ) : _ , ext = os . path . splitext ( source ) return ext in self . get_options ( ) . cc_extensions targets = self . context . targets ( self . is_cpp ) with self . invalidated ( targets , invalidate_dependents = True ) as invalidation_check : obj_mapping = self . context . products . get ( 'objs' ) for vt in invalidation_check . all_vts : for source in vt . target . sources_relative_to_buildroot ( ) : if is_cc ( source ) : if not vt . valid : with self . context . new_workunit ( name = 'cpp-compile' , labels = [ WorkUnitLabel . MULTITOOL ] ) : self . _compile ( vt . target , vt . results_dir , source ) objpath = self . _objpath ( vt . target , vt . results_dir , source ) obj_mapping . add ( vt . target , vt . results_dir ) . append ( objpath )
Compile all sources in a given target to object files.