changeset 208:4cb47d80fd1f

Added zcc test
author Windel Bouwman
date Sat, 29 Jun 2013 10:06:58 +0200
parents 8b2f20aae086
children 07bfea4c1ed7
files python/outstream.py python/testzcc.py
diffstat 2 files changed, 74 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/outstream.py	Sat Jun 29 10:06:58 2013 +0200
@@ -0,0 +1,60 @@
+import binascii
+from asmnodes import ALabel
+"""
+ The output stream is a stream of instructions that can be output
+ to a file or binary or hexfile.
+"""
+
+class OutputStream:
+    def __init__(self):
+        self.sections = {}
+        self.currentSection = None
+    def emit(self, item):
+        self.sections[self.currentSection].append(item)
+    def selectSection(self, s):
+        self.currentSection = s
+        if not s in self.sections:
+            self.sections[s] = []
+
+    def backpatch(self):
+        """ Fixup references to other parts in the assembler """
+        for s in self.sections:
+            # TODO parameterize this:
+            if s == 'code':
+                address = 0x08000000
+            elif s == 'data':
+                address = 0x02000000
+            else:
+                address = 0x0
+            for i in self.sections[s]:
+                i.address = address
+                if type(i) is ALabel:
+                    continue
+                bts = i.encode()
+                address += len(bts)
+
+    def dump(self):
+        self.backpatch()
+        for s in sorted(self.sections.keys()):
+            self.dumpSection(s)
+
+    def dumpSection(self, s):
+        print('.section '+s)
+        for i in self.sections[s]:
+            if type(i) is ALabel:
+                print(i)
+            else:
+                addr = i.address
+                insword = i.encode()
+                assert type(insword) is bytes
+                insword = binascii.hexlify(bytes(reversed(insword))).decode('ascii')
+                asm = str(i)
+                print('    0x{0:08x} 0x{1} {2}'.format(addr, insword, asm))
+
+class TextOutputStream(OutputStream):
+    pass
+
+class BinOutputStream(OutputStream):
+    def dump(self):
+        pass
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/testzcc.py	Sat Jun 29 10:06:58 2013 +0200
@@ -0,0 +1,14 @@
+import unittest
+import zcc
+
+class ZccTestCase(unittest.TestCase):
+    """ Tests the compiler driver """
+
+    def testBlinkDemo(self):
+        """ Compile blink.c3 """
+        args = zcc.parser.parse_args(['-d', 'stm32f4/blink.c3'])
+        zcc.main(args)
+
+if __name__ == '__main__':
+    unittest.main()
+