4 from argparse import ArgumentParser
5 from datetime import datetime
7 sys.path.append('../../../Utilities/buildutils')
9 from buildcmd import BuildCmd
10 from fvpcmd import FvpCmd
11 from testresult import TestResult
13 DEVICE_A5 = 'Cortex-A5'
14 DEVICE_A7 = 'Cortex-A7'
15 DEVICE_A9 = 'Cortex-A9'
23 DEVICES = [ DEVICE_A5, DEVICE_A7, DEVICE_A9 ]
24 COMPILERS = [ CC_AC5, CC_AC6, CC_GCC ]
25 TARGETS = [ TARGET_FVP ]
43 DEVICE_A5 : { 'cmd': "fvp_ve_cortex-a5x1.exe", 'args': { 'limit': "5000000", 'config': "ARMCA5_config.txt" } },
44 DEVICE_A7 : { 'cmd': "fvp_ve_cortex-a7x1.exe", 'args': { 'limit': "5000000", 'config': "ARMCA7_config.txt" } },
45 DEVICE_A9 : { 'cmd': "fvp_ve_cortex-a9x1.exe", 'args': { 'limit': "5000000", 'config': "ARMCA9_config.txt" } }
48 class EclipseCmd(BuildCmd):
50 def __init__(self, path, project, **kwargs):
51 BuildCmd.__init__(self)
53 self._project = project
54 self._workspace = kwargs['workspace']
60 def getArguments(self):
61 args = [ "-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.cdt.managedbuilder.core.headlessbuild", "-import", self._path, "-cleanBuild", self._project ]
62 if self._workspace: args += [ "-data", self._workspace ]
67 return self._result == 0
69 def isSkipped(dev, cc, target):
71 skipDev = (skip[0] == None or skip[0] == dev)
72 skipCc = (skip[1] == None or skip[1] == cc)
73 skipTarget = (skip[2] == None or skip[2] == target)
74 if skipDev and skipCc and skipTarget:
78 def prepare(steps, args):
79 for dev in args.devices:
80 for cc in args.compilers:
81 for target in args.targets:
82 if not isSkipped(dev, cc, target):
83 config = "{dev} ({cc}, {target})".format(dev = dev, cc = cc, target = target)
84 prefix = "{dev}_{cc}_{target}".format(dev = dev, cc = cc, target = target)
87 if not args.execute_only:
88 build = EclipseCmd("{dev}/{cc}".format(dev = dev, cc = cc), "CMSIS_CV_{abrev}_{cc}".format(abrev = DEVICE_ABREV[dev], cc = cc), workspace=args.workspace)
89 if not args.build_only:
90 binary = "{dev}/{cc}/Debug/CMSIS_CV_{abrev}_{cc}.{format}".format(dev = dev, abrev = DEVICE_ABREV[dev], cc = cc, format = APP_FORMAT[cc])
91 test = FvpCmd(FVP_MODELS[dev]['cmd'], binary, **FVP_MODELS[dev]['args'])
92 steps += [ { 'name': config, 'prefix': prefix, 'build': build, 'test': test } ]
100 print "Skipping build"
102 if step['test'] and ((not step['build']) or step['build'].isSuccess()):
104 step['result'] = TestResult(step['test'].getOutput())
105 step['result'].saveXml("result_{0}_{1}.xml".format(step['prefix'], datetime.now().strftime("%Y%m%d%H%M%S")))
107 print "Skipping test"
109 def printSummary(steps):
114 print "Test run Total Exec Pass Fail "
115 print "-------------------------------------------------------"
118 print "{0:30} {1:>4} {2:>4} {3:>4} {4:>4}".format(step['name'], *step['result'].getSummary())
120 print "{0:30} ------ NO RESULTS ------".format(step['name'])
123 parser = ArgumentParser()
124 parser.add_argument('-w', '--workspace', help = 'DS-MDK Workspace to be used.')
125 parser.add_argument('-b', '--build-only', action='store_true')
126 parser.add_argument('-e', '--execute-only', action='store_true')
127 parser.add_argument('-d', '--devices', nargs='*', choices=DEVICES, default=DEVICES, help = 'Devices to be considered.')
128 parser.add_argument('-c', '--compilers', nargs='*', choices=COMPILERS, default=COMPILERS, help = 'Compilers to be considered.')
129 parser.add_argument('-t', '--targets', nargs='*', choices=TARGETS, default=TARGETS, help = 'Targets to be considered.')
130 args = parser.parse_args()
140 if __name__ == "__main__":