targets/toolchain_makefile.py
changeset 734 5c42cafaee15
parent 733 915be999f3f0
child 735 d9f4ecee761d
--- a/targets/toolchain_makefile.py	Sat May 19 19:00:55 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-import os, re, operator
-from util.ProcessLogger import ProcessLogger
-import hashlib
-
-import time
-
-includes_re =  re.compile('\s*#include\s*["<]([^">]*)[">].*')
-
-class toolchain_makefile():
-    def __init__(self, CTRInstance):
-        self.CTRInstance = CTRInstance
-        self.md5key = None 
-        self.buildpath = None
-        self.SetBuildPath(self.CTRInstance._getBuildPath())
-
-    def SetBuildPath(self, buildpath):
-        if self.buildpath != buildpath:
-            self.buildpath = buildpath
-            self.md5key = None
-
-    def GetBinaryCode(self):
-        return None
-
-    def _GetMD5FileName(self):
-        return os.path.join(self.buildpath, "lastbuildPLC.md5")
-
-    def ResetBinaryCodeMD5(self):
-        self.md5key = None
-        try:
-            os.remove(self._GetMD5FileName())
-        except Exception, e:
-            pass
-
-    def GetBinaryCodeMD5(self):
-        if self.md5key is not None:
-            return self.md5key
-        else:
-            try:
-                return open(self._GetMD5FileName(), "r").read()
-            except IOError, e:
-                return None
-
-    def concat_deps(self, bn):
-        # read source
-        src = open(os.path.join(self.buildpath, bn),"r").read()
-        # update direct dependencies
-        deps = []
-        for l in src.splitlines():
-            res = includes_re.match(l)
-            if res is not None:
-                depfn = res.groups()[0]
-                if os.path.exists(os.path.join(self.buildpath, depfn)):
-                    #print bn + " depends on "+depfn
-                    deps.append(depfn)
-        # recurse through deps
-        # TODO detect cicular deps.
-        return reduce(operator.concat, map(self.concat_deps, deps), src)
-
-    def build(self):
-        srcfiles= []
-        cflags = []
-        wholesrcdata = "" 
-        for Location, CFilesAndCFLAGS, DoCalls in self.CTRInstance.LocationCFilesAndCFLAGS:
-            # Get CFiles list to give it to makefile
-            for CFile, CFLAGS in CFilesAndCFLAGS:
-                CFileName = os.path.basename(CFile)
-                wholesrcdata += self.concat_deps(CFileName)
-                #wholesrcdata += open(CFile, "r").read()
-                srcfiles.append(CFileName)
-                if CFLAGS not in cflags:
-                    cflags.append(CFLAGS)
-                        
-        oldmd5 = self.md5key
-        self.md5key = hashlib.md5(wholesrcdata).hexdigest()
-        props = self.CTRInstance.GetProjectProperties()
-        self.md5key += '#'.join([props[key] for key in ['companyName',
-                                                        'projectName',
-                                                        'productName']])
-        self.md5key += '#' #+','.join(map(str,time.localtime()))
-        # Store new PLC filename based on md5 key
-        f = open(self._GetMD5FileName(), "w")
-        f.write(self.md5key)
-        f.close()
-
-        if oldmd5 != self.md5key :
-            beremizcommand = {"src": ' '.join(srcfiles),
-                              "cflags": ' '.join(cflags),
-                              "md5": '"'+self.md5key+'"'
-                             }
-            
-            target = self.CTRInstance.GetTarget().getcontent()["value"]
-            command = target.getCommand().split(' ') +\
-                      [target.getBuildPath()] +\
-                      [arg % beremizcommand for arg in target.getArguments().split(' ')] +\
-                      target.getRule().split(' ')
-            
-            # Call Makefile to build PLC code and link it with target specific code
-            status, result, err_result = ProcessLogger(self.CTRInstance.logger,
-                                                       command).spin()
-            if status :
-                self.md5key = None
-                self.CTRInstance.logger.write_error(_("C compilation failed.\n"))
-                return False
-            return True
-        else :
-            self.CTRInstance.logger.write(_("Source didn't change, no build.\n"))
-            return True
-