Skip to content

Commit 48b3959

Browse files
committed
Test moved to tools/test/export. Kwaargs eliminated. Build message
1 parent f1475c8 commit 48b3959

File tree

7 files changed

+77
-28
lines changed

7 files changed

+77
-28
lines changed

tools/export/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def online_build_url_resolver(url):
5959

6060
def export(project_path, project_name, ide, target, destination='/tmp/',
6161
tempdir=None, pgen_build = False, clean=True, extra_symbols=None, make_zip=True, sources_relative=False,
62-
build_url_resolver=online_build_url_resolver, **kwargs):
62+
build_url_resolver=online_build_url_resolver, progen_build=False):
6363
# Convention: we are using capitals for toolchain and target names
6464
if target is not None:
6565
target = target.upper()
@@ -68,9 +68,6 @@ def export(project_path, project_name, ide, target, destination='/tmp/',
6868
tempdir = tempfile.mkdtemp()
6969

7070
use_progen = False
71-
build = False
72-
if 'progen_build' in kwargs and kwargs.get('progen_build') == True:
73-
build = True
7471

7572
supported = True
7673
report = {'success': False, 'errormsg':''}
@@ -108,7 +105,7 @@ def export(project_path, project_name, ide, target, destination='/tmp/',
108105
try:
109106
exporter = Exporter(target, tempdir, project_name, build_url_resolver, extra_symbols=extra_symbols, sources_relative=sources_relative)
110107
exporter.scan_and_copy_resources(project_path, tempdir, sources_relative)
111-
if build:
108+
if progen_build:
112109
#try to build with pgen ide builders
113110
try:
114111
exporter.generate(progen_build=True)

tools/export/exporters.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def progen_get_project_data(self):
109109
}
110110
return project_data
111111

112-
def progen_gen_file(self, tool_name, project_data, pgen_build = False):
112+
def progen_gen_file(self, tool_name, project_data, pgen_build=False):
113113
"""" Generate project using ProGen Project API """
114114
settings = ProjectSettings()
115115
project = Project(self.program_name, [project_data], settings)
@@ -118,6 +118,7 @@ def progen_gen_file(self, tool_name, project_data, pgen_build = False):
118118
project.project['common']['include_paths'] = self.resources.inc_dirs
119119
project.generate(tool_name, copied=not self.sources_relative)
120120
if pgen_build:
121+
print("Project exported, building...")
121122
result = project.build(tool_name)
122123
if result == -1:
123124
raise FailedBuildException("Build Failed")

tools/export/iar.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class IAREmbeddedWorkbench(Exporter):
4646
# target is not supported yet
4747
continue
4848

49-
def generate(self, **kwargs):
49+
def generate(self, progen_build=False):
5050
""" Generates the project files """
5151
project_data = self.progen_get_project_data()
5252
tool_specific = {}
@@ -75,7 +75,7 @@ def generate(self, **kwargs):
7575
# VLA is enabled via template IccAllowVLA
7676
project_data['tool_specific']['iar']['misc']['c_flags'].remove("--vla")
7777
project_data['common']['build_dir'] = os.path.join(project_data['common']['build_dir'], 'iar_arm')
78-
if 'progen_build' in kwargs and kwargs.get('progen_build') == True:
78+
if progen_build:
7979
self.progen_gen_file('iar_arm', project_data, True)
8080
else:
8181
self.progen_gen_file('iar_arm', project_data)

tools/export/uvision4.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Uvision4(Exporter):
5050
def get_toolchain(self):
5151
return TARGET_MAP[self.target].default_toolchain
5252

53-
def generate(self, **kwargs):
53+
def generate(self, progen_build=False):
5454
""" Generates the project files """
5555
project_data = self.progen_get_project_data()
5656
tool_specific = {}
@@ -96,7 +96,7 @@ def generate(self, **kwargs):
9696
i += 1
9797
project_data['common']['macros'].append('__ASSERT_MSG')
9898
project_data['common']['build_dir'] = join(project_data['common']['build_dir'], 'uvision4')
99-
if 'progen_build' in kwargs and kwargs.get('progen_build') == True:
99+
if progen_build:
100100
self.progen_gen_file('uvision', project_data, True)
101101
else:
102102
self.progen_gen_file('uvision', project_data)

tools/export/uvision5.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class Uvision5(Exporter):
5050
def get_toolchain(self):
5151
return TARGET_MAP[self.target].default_toolchain
5252

53-
def generate(self, **kwargs):
53+
def generate(self, progen_build=False):
5454
""" Generates the project files """
5555
project_data = self.progen_get_project_data()
5656
tool_specific = {}
@@ -94,8 +94,8 @@ def generate(self, **kwargs):
9494
if macro.startswith('MBED_USERNAME'):
9595
project_data['common']['macros'].pop(i)
9696
i += 1
97-
project_data['common']['macros'].append('__ASSERT_MSG')
98-
if 'progen_build' in kwargs and kwargs.get('progen_build') == True:
97+
98+
if progen_build:
9999
self.progen_gen_file('uvision5', project_data, True)
100100
else:
101101
self.progen_gen_file('uvision5', project_data)

tools/project_api.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def get_test_from_name(n):
3939
return get_program(n)
4040

4141

42-
def setup_project(mcu, ide, program = None, source_dir= None, macros = None, build = None):
42+
def setup_project(mcu, ide, program=None, source_dir=None, macros=None, build=None):
4343

4444
# Some libraries have extra macros (called by exporter symbols) to we need to pass
4545
# them to maintain compilation macros integrity between compiled library and
@@ -75,12 +75,12 @@ def setup_project(mcu, ide, program = None, source_dir= None, macros = None, bui
7575
return project_dir, project_name, project_temp
7676

7777

78-
def perform_export(dir, name, ide, mcu, temp, clean = True, zip = True, lib_symbols = '',
79-
sources_relative = False, progen_build = False):
78+
def perform_export(dir, name, ide, mcu, temp, clean=False, zip=False, lib_symbols='',
79+
sources_relative=False, progen_build=False):
8080

8181
tmp_path, report = export(dir, name, ide, mcu, dir[0], temp, clean=clean,
8282
make_zip=zip, extra_symbols=lib_symbols, sources_relative=sources_relative,
83-
progen_build = progen_build)
83+
progen_build=progen_build)
8484
return tmp_path, report
8585

8686

tools/build_test.py renamed to tools/test/export/build_test.py

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,40 @@
1+
#!/usr/bin/env python
2+
"""
3+
mbed SDK
4+
Copyright (c) 2011-2013 ARM Limited
5+
6+
Licensed under the Apache License, Version 2.0 (the "License");
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
"""
18+
19+
120
import sys
21+
import argparse
22+
import os
23+
import shutil
224
from os.path import join, abspath, dirname, exists, basename
3-
ROOT = abspath(join(dirname(__file__), ".."))
25+
r=dirname(__file__)
26+
ROOT = abspath(join(r, "..","..",".."))
27+
print ROOT
428
sys.path.insert(0, ROOT)
529

6-
import argparse
7-
8-
from export import EXPORTERS
9-
from targets import TARGET_NAMES, TARGET_MAP
10-
from project_api import setup_project, perform_export, print_results, get_test_from_name
30+
from tools.export import EXPORTERS
31+
from tools.targets import TARGET_NAMES, TARGET_MAP
32+
from tools.project_api import setup_project, perform_export, print_results, get_test_from_name
1133
from project_generator_definitions.definitions import ProGenDef
12-
from utils import args_error
34+
from tools.utils import args_error
1335

14-
class BuildTest():
36+
37+
class ProgenBuildTest():
1538
def __init__(self, desired_ides, tests, targets):
1639
#map of targets and the ides that can build programs for them
1740
self.target_ides = {}
@@ -38,7 +61,31 @@ def get_pgen_targets(ides):
3861
targs.append(target)
3962
return targs
4063

64+
@staticmethod
65+
def handle_build_log(tool, project_dir, target, test):
66+
log = ''
67+
new_dir = os.path.dirname(project_dir)
68+
if tool == 'uvision' or tool == 'uvision5':
69+
log = os.path.join(project_dir,"build","build_log.txt")
70+
elif tool == 'iar':
71+
log = os.path.join(project_dir, 'build_log.txt')
72+
try:
73+
with open(log, 'r') as f:
74+
print f.read()
75+
except:
76+
print("No log file found")
77+
log_name = "_".join([test, target, tool])+".txt"
78+
79+
os.rename(log, log_name)
80+
#check if a log already exists for this platform+test+ide
81+
if os.path.exists(os.path.join(new_dir,log_name)):
82+
#delete it if so
83+
os.remove(os.path.join(new_dir,log_name))
84+
shutil.move(log_name, new_dir)
85+
shutil.rmtree(project_dir, ignore_errors = True)
86+
4187
def _generate_and_build(self, tests):
88+
4289
#build results
4390
successes = []
4491
failures = []
@@ -50,25 +97,29 @@ def _generate_and_build(self, tests):
5097
project_dir, project_name, project_temp = setup_project(mcu, ide, test)
5198
tmp_path, report = perform_export(project_dir, project_name, ide, mcu, project_temp,
5299
progen_build = True)
100+
53101
if report['success']:
54102
successes.append("build for %s::%s\t%s" % (mcu, ide, project_name))
55103
else:
56104
failures.append("%s::%s\t%s for %s" % (mcu, ide, report['errormsg'], project_name))
105+
106+
ProgenBuildTest.handle_build_log(ide, project_temp, mcu, project_name)
57107
return successes, failures
58108

59109

60110
if __name__ == '__main__':
61111
accepted_ides = ["iar", "uvision", "uvision5"]
62-
accepted_targets = sorted(BuildTest.get_pgen_targets(accepted_ides))
112+
accepted_targets = sorted(ProgenBuildTest.get_pgen_targets(accepted_ides))
63113
default_tests = ["MBED_BLINKY"]
114+
64115
parser = argparse.ArgumentParser(description = "Test progen builders. Leave any flag off to run with all possible options.")
65116
parser.add_argument("-i", "--IDEs",
66117
nargs = '+',
67118
dest="ides",
68119
help="tools you wish to perfrom build tests. (%s)" % ', '.join(accepted_ides),
69120
default = accepted_ides)
70121

71-
parser.add_argument("-t", "--tests",
122+
parser.add_argument("-n",
72123
nargs='+',
73124
dest="tests",
74125
help="names of desired test programs",
@@ -95,6 +146,6 @@ def _generate_and_build(self, tests):
95146
if any(ide not in accepted_ides for ide in ides):
96147
args_error(parser, "[ERROR] ide must be in %s" % ', '.join(accepted_ides))
97148

98-
b = BuildTest(ides, tests, targets)
149+
b = ProgenBuildTest(ides, tests, targets)
99150

100151

0 commit comments

Comments
 (0)