Эх сурвалжийг харах

CoreValidation: Enhanced build script to support long term maintenance (LTM) version of AC6 as additional compiler.

Jonatan Antoni 8 жил өмнө
parent
commit
53d8789dfd

+ 49 - 22
CMSIS/CoreValidation/Tests/build.py

@@ -1,10 +1,11 @@
 #! python
 
 import sys
-import os.path
+import os
 from argparse import ArgumentParser
 from datetime import datetime
 from subprocess import call, Popen
+from pathlib import Path
 
 sys.path.append('buildutils') 
 
@@ -15,6 +16,15 @@ from fvpcmd import FvpCmd
 from iarcmd import IarCmd 
 from testresult import TestResult
 
+try:
+  rtebuildhome = os.path.join(os.path.abspath(Path.home()), ".rtebuild")
+  sys.path.append(rtebuildhome)
+  import buildenv
+except ModuleNotFoundError:
+  print("No custom buildenv.py found in "+rtebuildhome)
+  buildenv = None
+  pass
+
 DEVICE_CM0     = 'Cortex-M0'
 DEVICE_CM0PLUS = 'Cortex-M0plus'
 DEVICE_CM3     = 'Cortex-M3'
@@ -36,16 +46,11 @@ DEVICE_CA5NEON = 'Cortex-A5neon'
 DEVICE_CA7NEON = 'Cortex-A7neon'
 DEVICE_CA9NEON = 'Cortex-A9neon'
 
-CC_AC6 = 'AC6'
-CC_AC5 = 'AC5'
-CC_GCC = 'GCC'
-CC_IAR = 'IAR'
-
-MDK_ENV = {
-  'uVision' : [ DEVICE_CM0, DEVICE_CM0PLUS, DEVICE_CM3, DEVICE_CM4, DEVICE_CM4FP, DEVICE_CM7, DEVICE_CM7SP, DEVICE_CM7DP, DEVICE_CM23, DEVICE_CM33, DEVICE_CM23NS, DEVICE_CM33NS, DEVICE_CM23S, DEVICE_CM33S ],
-  'DS'      : [ ], 
-  'RTE'     : [ DEVICE_CA5, DEVICE_CA7, DEVICE_CA9, DEVICE_CA5NEON, DEVICE_CA7NEON, DEVICE_CA9NEON ]
-}
+CC_AC6    = 'AC6'
+CC_AC6LTM = 'AC6LTM'
+CC_AC5    = 'AC5'
+CC_GCC    = 'GCC'
+CC_IAR    = 'IAR'
 
 TARGET_FVP = 'FVP'
 
@@ -73,16 +78,24 @@ ADEVICES = {
   }
 
 DEVICES = [ DEVICE_CM0, DEVICE_CM0PLUS, DEVICE_CM3, DEVICE_CM4, DEVICE_CM4FP, DEVICE_CM7, DEVICE_CM7SP, DEVICE_CM7DP, DEVICE_CM23, DEVICE_CM33, DEVICE_CM23NS, DEVICE_CM33NS, DEVICE_CM23S, DEVICE_CM33S, DEVICE_CA5, DEVICE_CA7, DEVICE_CA9, DEVICE_CA5NEON, DEVICE_CA7NEON, DEVICE_CA9NEON ]
-COMPILERS = [ CC_AC5, CC_AC6, CC_GCC, CC_IAR ]
+COMPILERS = [ CC_AC5, CC_AC6, CC_AC6LTM, CC_GCC, CC_IAR ]
 TARGETS = [ TARGET_FVP ]
 
 SKIP = [ 
-    [ DEVICE_CM23,   CC_AC5, None ],
-    [ DEVICE_CM33,   CC_AC5, None ],
-    [ DEVICE_CM23NS, CC_AC5, None ],
-    [ DEVICE_CM33NS, CC_AC5, None ],
-    [ DEVICE_CM23S,  CC_AC5, None ],
-    [ DEVICE_CM33S,  CC_AC5, None ],
+    [ DEVICE_CM23,    CC_AC5,    None ],
+    [ DEVICE_CM33,    CC_AC5,    None ],
+    [ DEVICE_CM23NS,  CC_AC5,    None ],
+    [ DEVICE_CM33NS,  CC_AC5,    None ],
+    [ DEVICE_CM23S,   CC_AC5,    None ],
+    [ DEVICE_CM33S,   CC_AC5,    None ],
+    [ DEVICE_CM0,     CC_AC6LTM, None ],
+    [ DEVICE_CM0PLUS, CC_AC6LTM, None ],
+    [ DEVICE_CM23,    CC_AC6LTM, None ],
+    [ DEVICE_CM33,    CC_AC6LTM, None ],
+    [ DEVICE_CM23NS,  CC_AC6LTM, None ],
+    [ DEVICE_CM33NS,  CC_AC6LTM, None ],
+    [ DEVICE_CM23S,   CC_AC6LTM, None ],
+    [ DEVICE_CM33S,   CC_AC6LTM, None ],
   ]
   
 FVP_MODELS = { 
@@ -129,6 +142,11 @@ def testProject(dev, cc, target):
         "{dev}/{cc}/CMSIS_CV.uvprojx".format(dev = dev, cc = cc),
         "{dev}/{cc}/Objects/CMSIS_CV.axf".format(dev = dev, cc = cc)
       ]
+  elif (cc == CC_AC6LTM):
+    return [
+        "{dev}/{cc}/CMSIS_CV.uvprojx".format(dev = dev, cc = CC_AC6),
+        "{dev}/{cc}/Objects/CMSIS_CV.axf".format(dev = dev, cc = CC_AC6)
+      ]
   elif (cc == CC_GCC):
     return [
         "{dev}/{cc}/CMSIS_CV.uvprojx".format(dev = dev, cc = cc),
@@ -153,6 +171,11 @@ def bootloaderProject(dev, cc, target):
         "{dev}/{cc}/Bootloader/Bootloader.uvprojx".format(dev = dev, cc = cc),
         "{dev}/{cc}/Bootloader/Objects/Bootloader.axf".format(dev = dev, cc = cc)
       ] 
+  elif (cc == CC_AC6LTM):
+    return [
+        "{dev}/{cc}/Bootloader/Bootloader.uvprojx".format(dev = dev, cc = CC_AC6),
+        "{dev}/{cc}/Bootloader/Objects/Bootloader.axf".format(dev = dev, cc = CC_AC6)
+      ] 
   elif (cc == CC_GCC):
     return [
         "{dev}/{cc}/Bootloader/Bootloader.uvprojx".format(dev = dev, cc = cc),
@@ -165,7 +188,7 @@ def bootloaderProject(dev, cc, target):
       ]
   raise "Unknown compiler!"
   
-def buildStep(dev, cc, target, project):
+def buildStep(dev, cc, target, project, env=os.environ):
   STEP_TYPES = {
     ".uvprojx"  : Uv4Cmd,
     ".ewp"      : IarCmd,
@@ -177,7 +200,7 @@ def buildStep(dev, cc, target, project):
   if not projectext in STEP_TYPES:
     raise "Unknown project type '"+projectext+"'!"
     
-  return STEP_TYPES[projectext](project, target)
+  return STEP_TYPES[projectext](project, target, env)
   
 def prepare(steps, args):
   for dev in args.devices:
@@ -187,13 +210,17 @@ def prepare(steps, args):
           config = "{dev} ({cc}, {target})".format(dev = dev, cc = cc, target = target)
           prefix = "{dev}_{cc}_{target}".format(dev = dev, cc = cc, target = target)
           
+          env = os.environ
+          if hasattr(buildenv, "env_"+cc):
+            env = getattr(buildenv, "env_"+cc)()
+
           rv = testProject(dev, cc, target)
-          build = [ buildStep(dev, cc, target, rv[0]) ]
+          build = [ buildStep(dev, cc, target, rv[0], env=env) ]
           binary = [ rv[1] ]
           
           bl = bootloaderProject(dev, cc, target)
           if os.path.isfile(bl[0]):
-            build = [ buildStep(dev, cc, target, bl[0]) ] + build
+            build = [ buildStep(dev, cc, target, bl[0], env=env) ] + build
             binary = [ bl[1] ] + binary
 
           if target == TARGET_FVP:

+ 9 - 5
CMSIS/CoreValidation/Tests/buildutils/buildcmd.py

@@ -2,14 +2,15 @@
 
 import os
 import shutil
-from subprocess import call, Popen
+from subprocess import Popen
 from tempfile import TemporaryFile
 
 class BuildCmd:
-  def __init__(self):
+  def __init__(self, env=os.environ):
     self._result = -1
     self._output = TemporaryFile(mode="r+")
-  
+    self._env = env
+    
   def getCommand(self):
     raise NotImplementedError
     
@@ -29,10 +30,13 @@ class BuildCmd:
     return self._output == 0
 
   def run(self):  
-    cmd = [ os.path.normpath(shutil.which(self.getCommand())) ] + self.getArguments()
+    cmd = shutil.which(self.getCommand(), path=self._env['PATH'])
+    if not cmd:
+      raise FileNotFoundError(self.getCommand() + " in PATH='" + self._env['PATH']+"'")
+    cmd = [ os.path.normpath(cmd) ] + self.getArguments()
     print("Running: " + ' '.join(cmd))
     try:
-      with Popen(cmd, stdout = self._output, stderr = self._output, shell=self.needsShell()) as proc:
+      with Popen(cmd, stdout = self._output, stderr = self._output, shell=self.needsShell(), env=self._env) as proc:
         self._result = proc.wait()
     except:
       print("Fatal error!")

+ 4 - 2
CMSIS/CoreValidation/Tests/buildutils/iarcmd.py

@@ -1,16 +1,18 @@
 #! python
 
+import os
 from buildcmd import BuildCmd
 from datetime import datetime
 import mmap
 
 class IarCmd(BuildCmd):
 
-  def __init__(self, project, config):
-    BuildCmd.__init__(self)
+  def __init__(self, project, config, env=os.environ):
+    BuildCmd.__init__(self, env=env)
     self._project = project
     self._config = config
     self._log = "iar_{0}.log".format(datetime.now().strftime("%Y%m%d%H%M%S"))
+    self._env = env
     
   def getCommand(self):
     return "iarbuild.exe"

+ 7 - 4
CMSIS/CoreValidation/Tests/buildutils/rtecmd.py

@@ -8,17 +8,20 @@ import mmap
 
 class RteCmd(BuildCmd):
 
-  def __init__(self, project, config, subcmd = "build"):
-    BuildCmd.__init__(self)
+  def __init__(self, project, config, env=os.environ, subcmd = "build"):
+    BuildCmd.__init__(self, env=env)
     self._project = project
     self._config = config
     self._subcmd = subcmd
-
+    self._rtebuild = shutil.which("rtebuild.py")
+    if not self._rtebuild:
+      raise FileNotFoundError("rtebuild.py")
+      
   def getCommand(self):
     return "python.exe"
     
   def getArguments(self):
-    return [ os.path.normpath(shutil.which("rtebuild.py")), "-c", os.path.abspath(self._project), "-t", self._config, self._subcmd ]
+    return [ os.path.normpath(self._rtebuild), "-c", os.path.abspath(self._project), "-t", self._config, self._subcmd ]
 
   def needsShell(self):
     return True

+ 4 - 4
CMSIS/CoreValidation/Tests/buildutils/uv4cmd.py

@@ -1,14 +1,14 @@
 #! python
 
 import os
+import shutil
 from buildcmd import BuildCmd
 from datetime import datetime
-import mmap
 
 class Uv4Cmd(BuildCmd):
 
-  def __init__(self, project, config):
-    BuildCmd.__init__(self)
+  def __init__(self, project, config, env=os.environ):
+    BuildCmd.__init__(self, env=env)
     self._project = project
     self._config = config
     cwd = os.getcwd()
@@ -19,7 +19,7 @@ class Uv4Cmd(BuildCmd):
     return "UV4.exe"
     
   def getArguments(self):
-    return [ "-t", self._config, "-cr", self._project, "-j0", "-o", self._log ]
+    return [ "-t", self._config, "-r", self._project, "-j0", "-o", self._log ]
   
   def isSuccess(self):
     return self._result <= 1