targets/toolchain_makefile.py
changeset 508 73ecb803d8af
parent 425 f390e9fdd2cf
child 510 8038c08b9874
--- a/targets/toolchain_makefile.py	Fri Dec 11 13:04:22 2009 +0100
+++ b/targets/toolchain_makefile.py	Fri Dec 11 16:39:20 2009 +0100
@@ -5,26 +5,63 @@
 
 includes_re =  re.compile('\s*#include\s*["<]([^">]*)[">].*')
 
-class toolchain_makefile(toolchain_gcc):
-    """
-    This abstract class contains GCC specific code.
-    It cannot be used as this and should be inherited in a target specific
-    class such as target_linux or target_win32
-    """
+class toolchain_makefile():
+    def __init__(self, PluginsRootInstance):
+        self.PluginsRootInstance = PluginsRootInstance
+        self.md5key = None 
+        self.buildpath = None
+        self.SetBuildPath(self.PluginsRootInstance._getBuildPath())
+
+    def getTarget(self):
+        target = self.PluginsRootInstance.BeremizRoot.getTargetType()
+        if target.getcontent() is None:
+            target = self.PluginsRootInstance.GetDefaultTarget()
+        return target
+
+    def SetBuildPath(self, buildpath):
+        self.buildpath = buildpath
+        self.exe_path = os.path.join(self.buildpath, "ArmPLC_rom.bin")
+        self.md5_path = os.path.join(self.buildpath, "ArmPLC.md5")
+
+    def GetBinaryCode(self):
+        try:
+            return open(self.exe_path, "rb").read()
+        except Exception, e:
+            return None
+
+    def _GetMD5FileName(self):
+        return os.path.join(self.buildpath, "lastbuildPLC.md5")
+
+    def GetBinaryCodeMD5(self):
+        if self.md5key is not None:
+            return self.md5key
+        else:
+            try:
+                return open(self._GetMD5FileName(), "r").read()
+            except Exception, e:
+                return None
 
     def build(self):
         srcfiles= []
         cflags = []
         for Location, CFilesAndCFLAGS, DoCalls in self.PluginsRootInstance.LocationCFilesAndCFLAGS:
-            # Get CFiles list to give it to makefile 
+            wholesrcdata = "" 
+            # Get CFiles list to give it to makefile
             for CFile, CFLAGS in CFilesAndCFLAGS:
                 CFileName = os.path.basename(CFile)
+                wholesrcdata += open(CFile, "r").read()
                 srcfiles.append(CFileName)
                 if CFLAGS not in cflags:
                     cflags.append(CFLAGS)
                     
+            self.md5key = hashlib.md5(wholesrcdata).hexdigest()
+            # Store new PLC filename based on md5 key
+            f = open(self._GetMD5FileName(), "w")
+            f.write(self.md5key)
+            f.close()
         beremizcommand = {"src": ' '.join(srcfiles),
-                          "cflags": ' '.join(cflags)
+                          "cflags": ' '.join(cflags),
+                          "md5": self.md5key
                          }
         
         target = self.getTarget().getcontent()["value"]