annotate python/zcc.py @ 366:39bf68bf1891

Fix sample tests and deterministic build
author Windel Bouwman
date Fri, 21 Mar 2014 09:43:01 +0100
parents c2ddc8a36f5e
children 9667d78ba79e
rev   line source
292
534b94b40aa8 Fixup reorganize
Windel Bouwman
parents: 290
diff changeset
1 #!/usr/bin/env python
104
ed230e947dc6 Added hexviewer
windel
parents:
diff changeset
2
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 281
diff changeset
3 import sys
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
4 import os
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 281
diff changeset
5 import argparse
1c7c1e619be8 File movage
Windel Bouwman
parents: 281
diff changeset
6 import logging
1c7c1e619be8 File movage
Windel Bouwman
parents: 281
diff changeset
7
334
6f4753202b9a Added more recipes
Windel Bouwman
parents: 332
diff changeset
8 from ppci.buildtasks import Compile, Assemble, Link
329
8f6f3ace4e78 Added build tasks
Windel Bouwman
parents: 323
diff changeset
9 from ppci.tasks import TaskRunner
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
10 from ppci.report import RstFormatter
334
6f4753202b9a Added more recipes
Windel Bouwman
parents: 332
diff changeset
11 from ppci.objectfile import ObjectFile
366
39bf68bf1891 Fix sample tests and deterministic build
Windel Bouwman
parents: 355
diff changeset
12 from ppci.target.target_list import targets, targetnames
342
86b02c98a717 Moved target directory
Windel Bouwman
parents: 336
diff changeset
13 from ppci.recipe import RecipeLoader
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
14 import ppci
281
4496cae24d7f Improved logview
Windel Bouwman
parents: 276
diff changeset
15
289
bd2593de3ff8 Semifix burn2
Windel Bouwman
parents: 288
diff changeset
16
253
74c6a20302d5 Added better logging
Windel Bouwman
parents: 252
diff changeset
17 def logLevel(s):
312
2c9768114877 Added cool logging formatter
Windel Bouwman
parents: 311
diff changeset
18 """ Converts a string to a valid logging level """
253
74c6a20302d5 Added better logging
Windel Bouwman
parents: 252
diff changeset
19 numeric_level = getattr(logging, s.upper(), None)
74c6a20302d5 Added better logging
Windel Bouwman
parents: 252
diff changeset
20 if not isinstance(numeric_level, int):
74c6a20302d5 Added better logging
Windel Bouwman
parents: 252
diff changeset
21 raise ValueError('Invalid log level: {}'.format(s))
74c6a20302d5 Added better logging
Windel Bouwman
parents: 252
diff changeset
22 return numeric_level
105
6a303f835c6d Removed compilers directory
Windel Bouwman
parents: 104
diff changeset
23
289
bd2593de3ff8 Semifix burn2
Windel Bouwman
parents: 288
diff changeset
24
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
25 def make_parser():
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
26 parser = argparse.ArgumentParser(description='lcfos Compiler')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
27
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
28 parser.add_argument('--log', help='Log level (INFO,DEBUG,[WARN])',
334
6f4753202b9a Added more recipes
Windel Bouwman
parents: 332
diff changeset
29 type=logLevel, default='INFO')
332
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
30 parser.add_argument('--display-build-steps', action='store_true')
348
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
31 parser.add_argument('--report',
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
32 help='Specify a file to write the compile report to',
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
33 type=argparse.FileType('w'))
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
34 sub_parsers = parser.add_subparsers(title='commands',
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
35 description='possible commands', dest='command')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
36 recipe_parser = sub_parsers.add_parser('recipe', help="Bake recipe")
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
37 recipe_parser.add_argument('recipe_file', help='recipe file')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
38
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
39 compile_parser = sub_parsers.add_parser('compile', help="compile source")
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
40 compile_parser.add_argument('source', type=argparse.FileType('r'),
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
41 help='the source file to build', nargs="+")
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
42 compile_parser.add_argument('-i', '--imp', type=argparse.FileType('r'),
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
43 help='Possible import module', action='append', default=[])
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
44 compile_parser.add_argument('--target', help="Backend selection",
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
45 choices=targetnames, required=True)
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
46 compile_parser.add_argument('-o', '--output', help='Output file',
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
47 metavar='filename')
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
48 return parser
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
49
287
1c7c1e619be8 File movage
Windel Bouwman
parents: 281
diff changeset
50
249
e41e4109addd Added current position arrow
Windel Bouwman
parents: 246
diff changeset
51 def main(args):
315
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
52 # Configure some logging:
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
53 logging.getLogger().setLevel(logging.DEBUG)
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
54 ch = logging.StreamHandler()
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
55 ch.setFormatter(logging.Formatter(ppci.logformat))
315
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
56 ch.setLevel(args.log)
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
57 logging.getLogger().addHandler(ch)
329
8f6f3ace4e78 Added build tasks
Windel Bouwman
parents: 323
diff changeset
58
348
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
59 if args.report:
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
60 fh = logging.StreamHandler(args.report)
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
61 fh.setFormatter(RstFormatter())
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
62 logging.getLogger().addHandler(fh)
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
63
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
64 runner = TaskRunner()
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
65 if args.command == 'compile':
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
66 tg = targets[args.target]
334
6f4753202b9a Added more recipes
Windel Bouwman
parents: 332
diff changeset
67 output = ObjectFile()
6f4753202b9a Added more recipes
Windel Bouwman
parents: 332
diff changeset
68 runner.add_task(Compile(args.source, args.imp, tg, output))
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
69 elif args.command == 'recipe':
355
c2ddc8a36f5e Enabled optimization
Windel Bouwman
parents: 348
diff changeset
70 recipe_loader = RecipeLoader(runner)
c2ddc8a36f5e Enabled optimization
Windel Bouwman
parents: 348
diff changeset
71 recipe_loader.load_file(args.recipe_file)
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
72 else:
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
73 raise NotImplementedError('Invalid option')
105
6a303f835c6d Removed compilers directory
Windel Bouwman
parents: 104
diff changeset
74
332
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
75 if args.display_build_steps:
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
76 runner.display()
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
77 res = 0
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
78 else:
87feb8a23b4d Added task list command
Windel Bouwman
parents: 331
diff changeset
79 res = runner.run_tasks()
104
ed230e947dc6 Added hexviewer
windel
parents:
diff changeset
80
348
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
81 if args.report:
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
82 logging.getLogger().removeHandler(fh)
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
83 args.report.close()
442fb043d149 Added log option to zcc
Windel Bouwman
parents: 342
diff changeset
84
315
084cccaa5deb Added console and screen
Windel Bouwman
parents: 314
diff changeset
85 logging.getLogger().removeHandler(ch)
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
86 return res
246
f254b87258e6 Added hexfile to zcc
Windel Bouwman
parents: 239
diff changeset
87
288
a747a45dcd78 Various styling work
Windel Bouwman
parents: 287
diff changeset
88
207
8b2f20aae086 cleaning of files
Windel Bouwman
parents: 205
diff changeset
89 if __name__ == '__main__':
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
90 parser = make_parser()
213
003c8a976fff Merge of semantics and parser again ..
Windel Bouwman
parents: 207
diff changeset
91 arguments = parser.parse_args()
331
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
92 if not arguments.command:
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
93 parser.print_usage()
a78b41ff6ad2 Added better recipe files
Windel Bouwman
parents: 329
diff changeset
94 sys.exit(1)
276
Windel Bouwman
parents: 272
diff changeset
95 sys.exit(main(arguments))