Просмотр исходного кода

CoreValidation: Enhanced automated build with rtebuild.

Jonatan Antoni 8 лет назад
Родитель
Сommit
6fbae0faf5

+ 17 - 1
CMSIS/CoreValidation/Tests/build.py

@@ -8,6 +8,7 @@ from subprocess import call, Popen
 
 sys.path.append('buildutils') 
 
+from rtecmd import RteCmd 
 from uv4cmd import Uv4Cmd 
 from dscmd import DsCmd 
 from fvpcmd import FvpCmd 
@@ -42,7 +43,8 @@ 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' : [ DEVICE_CA5, DEVICE_CA7, DEVICE_CA9, DEVICE_CA5NEON, DEVICE_CA7NEON, DEVICE_CA9NEON ]
+  'DS'      : [ ], 
+  'RTE'     : [ DEVICE_CA5, DEVICE_CA7, DEVICE_CA9, DEVICE_CA5NEON, DEVICE_CA7NEON, DEVICE_CA9NEON ]
 }
 
 TARGET_FVP = 'FVP'
@@ -118,6 +120,11 @@ def testProject(dev, cc, target):
           "{dev}/{cc}/.project".format(dev = dev, cc = cc),
           "{dev}/{cc}/Debug/CMSIS_CV_{adev}_{cc}.axf".format(dev = dev, adev=ADEVICES[dev], cc = cc)
         ]
+    elif dev in MDK_ENV['RTE']:
+      return [
+          "{dev}/{cc}/default.rtebuild".format(dev = dev, cc = cc, target=target),
+          "{dev}/{cc}/build/{target}.elf".format(dev = dev, cc = cc, target=target)
+        ]
     else:
       return [
           "{dev}/{cc}/CMSIS_CV.uvprojx".format(dev = dev, cc = cc),
@@ -129,6 +136,11 @@ def testProject(dev, cc, target):
           "{dev}/{cc}/.project".format(dev = dev, cc = cc),
           "{dev}/{cc}/Debug/CMSIS_CV_{adev}_{cc}.elf".format(dev = dev, adev=ADEVICES[dev], cc = cc)
         ]
+    elif dev in MDK_ENV['RTE']:
+      return [
+          "{dev}/{cc}/default.rtebuild".format(dev = dev, cc = cc, target=target),
+          "{dev}/{cc}/build/{target}.elf".format(dev = dev, cc = cc, target=target)
+        ]
     else:
       return [
           "{dev}/{cc}/CMSIS_CV.uvprojx".format(dev = dev, cc = cc),
@@ -163,11 +175,15 @@ def buildStep(dev, cc, target, project):
   if (cc == CC_AC5) or (cc == CC_AC6):
     if dev in MDK_ENV['DS']:
       return DsCmd(project, "CMSIS_CV_{adev}_{cc}".format(adev=ADEVICES[dev], cc = cc))
+    elif dev in MDK_ENV['RTE']:
+      return RteCmd(project, target)
     else:
       return Uv4Cmd(project, target)
   elif (cc == CC_GCC):
     if dev in MDK_ENV['DS']:
       return DsCmd(project, target)
+    elif dev in MDK_ENV['RTE']:
+      return RteCmd(project, target)
     else:
       return Uv4Cmd(project, target)
   elif (cc == CC_IAR):

+ 8 - 2
CMSIS/CoreValidation/Tests/buildutils/buildcmd.py

@@ -1,5 +1,7 @@
 #! python
 
+import os
+import shutil
 from subprocess import call, Popen
 from tempfile import TemporaryFile
 
@@ -14,6 +16,9 @@ class BuildCmd:
   def getArguments(self):
     return []
     
+  def needsShell(self):
+    return False
+    
   def getOutput(self):
     return self._output
 
@@ -24,10 +29,11 @@ class BuildCmd:
     return self._output == 0
 
   def run(self):  
-    cmd = [ self.getCommand() ] + self.getArguments()
+    cmd = [ os.path.normpath(shutil.which(self.getCommand())) ] + self.getArguments()
     print("Running: " + ' '.join(cmd))
     try:
-      self._result = call(cmd, stdout = self._output)
+      with Popen(cmd, stdout = self._output, stderr = self._output, shell=self.needsShell()) as proc:
+        self._result = proc.wait()
     except:
       print("Fatal error!")
     self._output.seek(0)

+ 29 - 0
CMSIS/CoreValidation/Tests/buildutils/rtecmd.py

@@ -0,0 +1,29 @@
+#! python
+
+import os
+import shutil
+from buildcmd import BuildCmd
+from datetime import datetime
+import mmap
+
+class RteCmd(BuildCmd):
+
+  def __init__(self, project, config):
+    BuildCmd.__init__(self)
+    self._project = project
+    self._config = config
+
+  def getCommand(self):
+    return "python.exe"
+    
+  def getArguments(self):
+    return [ os.path.normpath(shutil.which("rtebuild.py")), "-c", self._config, os.path.abspath(self._project) ]
+
+  def needsShell(self):
+    return True
+    
+  def isSuccess(self):
+    return self._result == 0
+
+  def getLog(self):
+      return None

+ 14 - 0
CMSIS/CoreValidation/Tests/test.rtebuild

@@ -0,0 +1,14 @@
+import:
+ - toolchain.rtebuild
+include: 
+ - ../Include
+source:
+ - ./main.c
+ - ../Source/cmsis_cv.c
+ - ../Source/CV_Framework.c
+ - ../Source/CV_Report.c
+packs:
+ - ARM.CMSIS
+components:
+ - CMSIS.CORE
+ - Device.Startup

+ 97 - 0
CMSIS/CoreValidation/Tests/toolchain.rtebuild

@@ -0,0 +1,97 @@
+toolchain:
+  ARMCC5:
+    env:
+      PATH             : [ "C:/tools/Keil_v5/ARM/ARMCC/bin" ]
+      ARM_TOOL_VARIANT : 'mdk_pro'
+      ARM_PRODUCT_PATH : 'C:/tools/Keil_v5/ARM/sw/mappings'
+    rte:
+      Tcompiler: "ARMCC"
+      Toptions : "AC5"
+    ccompiler:
+      cmd     : "armcc.exe"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    asembler:
+      cmd     : "armasm.exe"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    linker:
+      cmd     : "armlink.exe"
+      output  : "-o "
+      script  : "--scatter="
+  ARMCC67:
+    env:
+      PATH             : [ "C:/tools/Keil_v5/ARM/ARMCLANG/bin" ]
+      ARM_TOOL_VARIANT : 'mdk_pro'
+      ARM_PRODUCT_PATH : 'C:/tools/Keil_v5/ARM/sw/mappings'
+    rte:
+      Tcompiler: "ARMCC"
+      Toptions : "AC6"
+    ccompiler:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    asembler:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    linker:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+      script  : "-Wl,--scatter="
+  ARMCC66:
+    env:
+      PATH             : [ "C:/tools/Keil_v5/ARM/ARMCLANG6.6/bin" ]
+      ARM_TOOL_VARIANT : 'mdk_pro'
+      ARM_PRODUCT_PATH : 'C:/tools/Keil_v5/ARM/sw/mappings'
+    rte:
+      Tcompiler: "ARMCC"
+      Toptions : "AC6"
+    ccompiler:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    asembler:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    linker:
+      cmd     : "armclang.exe"
+      cmdfile : "@"
+      output  : "-o "
+  GCC:
+    env:
+      PATH             : [ "C:/tools/gcc-arm/bin" ]
+      ARM_TOOL_VARIANT : 'mdk_pro'
+      ARM_PRODUCT_PATH : 'C:/tools/Keil_v5/ARM/sw/mappings'
+    rte:
+      Tcompiler: "GCC"
+      Toptions : ""
+    ccompiler:
+      cmd     : "arm-none-eabi-gcc.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    asembler:
+      cmd     : "arm-none-eabi-gcc.exe"
+      cmdfile : "@"
+      output  : "-o "
+      include : "-I"
+      define  : "-D"
+    linker:
+      cmd     : "arm-none-eabi-gcc.exe"
+      cmdfile : "@"
+      output  : "-o "
+      script  : "-T "