Mercurial > lcfOS
view python/ppci/buildtasks.py @ 329:8f6f3ace4e78
Added build tasks
author | Windel Bouwman |
---|---|
date | Wed, 05 Feb 2014 21:29:31 +0100 |
parents | |
children | a78b41ff6ad2 |
line wrap: on
line source
""" Defines task classes that can compile, link etc.. Task can depend upon one another. """ import logging from .c3 import Builder from .irutils import Verifier from .codegen import CodeGenerator from .transform import CleanPass, RemoveAddZero from .tasks import Task from . import DiagnosticsManager class Assemble(Task): def __init__(self): super().__init__('Assemble') def run(self): pass class Compile(Task): """ Task that compiles source to some target """ def __init__(self, sources, includes, target, output_object): super().__init__('Compile') self.sources = sources self.includes = includes self.target = target self.output = output_object def run(self): logger = logging.getLogger('zcc') logger.info('Zcc started {}'.format(self.sources)) diag = DiagnosticsManager() c3b = Builder(diag, self.target) cg = CodeGenerator(self.target) for ircode in c3b.build(self.sources, self.includes): if not ircode: return d = {'ircode':ircode} logger.info('Verifying code {}'.format(ircode), extra=d) Verifier().verify(ircode) # Optimization passes: CleanPass().run(ircode) Verifier().verify(ircode) RemoveAddZero().run(ircode) Verifier().verify(ircode) CleanPass().run(ircode) Verifier().verify(ircode) # Code generation: d = {'ircode':ircode} logger.info('Starting code generation for {}'.format(ircode), extra=d) cg.generate(ircode, self.output) # TODO: fixup references, do this in another way? self.output.backpatch() if not c3b.ok: diag.printErrors() raise TaskError('Compile errors') class Link(Task): def __init__(self, objects, output_file): super().__init__('Link') class ObjCopy(Task): pass def load_recipe(recipe, runner): """ Loads a recipe dictionary into a task runner """ if 'compile' in recipe: #sources = runner.add_task(Compile()) else: raise Exception()