Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: export/__init__.py
- Revision:
- 31:8ea194f6145b
- Parent:
- 23:fbae331171fa
- Child:
- 35:da9c89f8be7d
--- a/export/__init__.py Mon Aug 29 11:56:59 2016 +0100
+++ b/export/__init__.py Wed Jan 04 11:58:24 2017 -0600
@@ -1,39 +1,35 @@
+"""The generic interface for all exporters.
"""
-mbed SDK
-Copyright (c) 2011-2013 ARM Limited
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
+# mbed SDK
+# Copyright (c) 2011-2016 ARM Limited
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-"""
-import os, tempfile
-from os.path import join, exists, basename
-from shutil import copytree, rmtree, copy
-import yaml
-
-from tools.utils import mkdir
-from tools.export import uvision4, uvision5, codered, gccarm, ds5_5, iar, emblocks, coide, kds, zip, simplicityv3, atmelstudio, sw4stm32, e2studio
-from tools.export.exporters import zip_working_directory_and_clean_up, OldLibrariesException, FailedBuildException
-from tools.targets import TARGET_NAMES, EXPORT_MAP, TARGET_MAP
-
-from project_generator_definitions.definitions import ProGenDef
+from tools.export import codered, ds5_5, iar, makefile
+from tools.export import emblocks, coide, kds, simplicityv3, atmelstudio
+from tools.export import sw4stm32, e2studio, zip, cmsis, uvision, cdt
+from tools.targets import TARGET_NAMES
EXPORTERS = {
- 'uvision': uvision4.Uvision4,
- 'uvision4': uvision4.Uvision4,
- 'uvision5': uvision5.Uvision5,
+ 'uvision5': uvision.Uvision,
+ 'uvision': uvision.Uvision,
'lpcxpresso': codered.CodeRed,
- 'gcc_arm': gccarm.GccArm,
+ 'gcc_arm': makefile.GccArm,
+ 'make_gcc_arm': makefile.GccArm,
+ 'make_armc5': makefile.Armc5,
+ 'make_iar': makefile.IAR,
'ds5_5': ds5_5.DS5_5,
- 'iar': iar.IAREmbeddedWorkbench,
+ 'iar': iar.IAR,
'emblocks' : emblocks.IntermediateFile,
'coide' : coide.CoIDE,
'kds' : kds.KDS,
@@ -41,6 +37,11 @@
'atmelstudio' : atmelstudio.AtmelStudio,
'sw4stm32' : sw4stm32.Sw4STM32,
'e2studio' : e2studio.E2Studio,
+ 'eclipse_gcc_arm' : cdt.EclipseGcc,
+ 'eclipse_iar' : cdt.EclipseIAR,
+ 'eclipse_armc5' : cdt.EclipseArmc5,
+ 'zip' : zip.ZIP,
+ 'cmsis' : cmsis.CMSIS
}
ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """
@@ -52,162 +53,25 @@
To export this project please <a href='http://mbed.org/compiler/?import=http://mbed.org/users/mbed_official/code/mbed-export/k&mode=lib' target='_blank'>import the export version of the mbed library</a>.
"""
-def online_build_url_resolver(url):
- # TODO: Retrieve the path and name of an online library build URL
- return {'path':'', 'name':''}
-
-
-def export(project_path, project_name, ide, target, destination='/tmp/',
- tempdir=None, pgen_build = False, clean=True, extra_symbols=None, make_zip=True, sources_relative=False,
- build_url_resolver=online_build_url_resolver, progen_build=False):
- # Convention: we are using capitals for toolchain and target names
- if target is not None:
- target = target.upper()
-
- if tempdir is None:
- tempdir = tempfile.mkdtemp()
-
- use_progen = False
- supported = True
- report = {'success': False, 'errormsg':'', 'skip': False}
-
- if ide is None or ide == "zip":
- # Simple ZIP exporter
- try:
- ide = "zip"
- exporter = zip.ZIP(target, tempdir, project_name, build_url_resolver, extra_symbols=extra_symbols)
- exporter.scan_and_copy_resources(project_path, tempdir, sources_relative)
- exporter.generate()
- report['success'] = True
- except OldLibrariesException, e:
- report['errormsg'] = ERROR_MESSAGE_NOT_EXPORT_LIBS
- else:
- if ide not in EXPORTERS:
- report['errormsg'] = ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN % (target, ide)
- report['skip'] = True
- else:
- Exporter = EXPORTERS[ide]
- target = EXPORT_MAP.get(target, target)
- try:
- if Exporter.PROGEN_ACTIVE:
- use_progen = True
- except AttributeError:
- pass
-
- if target not in Exporter.TARGETS or Exporter.TOOLCHAIN not in TARGET_MAP[target].supported_toolchains:
- supported = False
-
- if use_progen:
- if not ProGenDef(ide).is_supported(TARGET_MAP[target].progen['target']):
- supported = False
-
- if supported:
- # target checked, export
- try:
- exporter = Exporter(target, tempdir, project_name, build_url_resolver, extra_symbols=extra_symbols, sources_relative=sources_relative)
- exporter.scan_and_copy_resources(project_path, tempdir, sources_relative)
- if progen_build:
- #try to build with pgen ide builders
- try:
- exporter.generate(progen_build=True)
- report['success'] = True
- except FailedBuildException, f:
- report['errormsg'] = "Build Failed"
- else:
- exporter.generate()
- report['success'] = True
- except OldLibrariesException, e:
- report['errormsg'] = ERROR_MESSAGE_NOT_EXPORT_LIBS
-
- else:
- report['errormsg'] = ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN % (target, ide)
- report['skip'] = True
+def mcu_ide_matrix(verbose_html=False):
+ """Shows target map using prettytable
- zip_path = None
- if report['success']:
- # readme.txt to contain more exported data
- exporter_yaml = {
- 'project_generator': {
- 'active' : False,
- }
- }
- if use_progen:
- try:
- import pkg_resources
- version = pkg_resources.get_distribution('project_generator').version
- exporter_yaml['project_generator']['version'] = version
- exporter_yaml['project_generator']['active'] = True;
- exporter_yaml['project_generator_definitions'] = {}
- version = pkg_resources.get_distribution('project_generator_definitions').version
- exporter_yaml['project_generator_definitions']['version'] = version
- except ImportError:
- pass
- with open(os.path.join(tempdir, 'exporter.yaml'), 'w') as outfile:
- yaml.dump(exporter_yaml, outfile, default_flow_style=False)
- # add readme file to every offline export.
- open(os.path.join(tempdir, 'GettingStarted.htm'),'w').write('<meta http-equiv="refresh" content="0; url=http://mbed.org/handbook/Getting-Started-mbed-Exporters#%s"/>'% (ide))
- # copy .hgignore file to exported direcotry as well.
- if exists(os.path.join(exporter.TEMPLATE_DIR,'.hgignore')):
- copy(os.path.join(exporter.TEMPLATE_DIR,'.hgignore'), tempdir)
- if make_zip:
- zip_path = zip_working_directory_and_clean_up(tempdir, destination, project_name, clean)
- else:
- zip_path = destination
-
- return zip_path, report
-
-
-###############################################################################
-# Generate project folders following the online conventions
-###############################################################################
-def copy_tree(src, dst, clean=True):
- if exists(dst):
- if clean:
- rmtree(dst)
- else:
- return
-
- copytree(src, dst)
-
-
-def setup_user_prj(user_dir, prj_path, lib_paths=None):
+ Keyword argumets:
+ verbose_html - print the matrix in html format
"""
- Setup a project with the same directory structure of the mbed online IDE
- """
- mkdir(user_dir)
-
- # Project Path
- copy_tree(prj_path, join(user_dir, "src"))
-
- # Project Libraries
- user_lib = join(user_dir, "lib")
- mkdir(user_lib)
-
- if lib_paths is not None:
- for lib_path in lib_paths:
- copy_tree(lib_path, join(user_lib, basename(lib_path)))
-
-def mcu_ide_matrix(verbose_html=False, platform_filter=None):
- """ Shows target map using prettytable """
- supported_ides = []
- for key in EXPORTERS.iterkeys():
- supported_ides.append(key)
- supported_ides.sort()
- from prettytable import PrettyTable, ALL # Only use it in this function so building works without extra modules
+ supported_ides = sorted(EXPORTERS.keys())
+ # Only use it in this function so building works without extra modules
+ from prettytable import PrettyTable, ALL
# All tests status table print
- columns = ["Platform"] + supported_ides
- pt = PrettyTable(columns)
+ table_printer = PrettyTable(["Platform"] + supported_ides)
# Align table
- for col in columns:
- pt.align[col] = "c"
- pt.align["Platform"] = "l"
+ for col in supported_ides:
+ table_printer.align[col] = "c"
+ table_printer.align["Platform"] = "l"
perm_counter = 0
- target_counter = 0
for target in sorted(TARGET_NAMES):
- target_counter += 1
-
row = [target] # First column is platform name
for ide in supported_ides:
text = "-"
@@ -218,20 +82,24 @@
text = "x"
perm_counter += 1
row.append(text)
- pt.add_row(row)
+ table_printer.add_row(row)
- pt.border = True
- pt.vrules = ALL
- pt.hrules = ALL
- # creates a html page suitable for a browser
- # result = pt.get_html_string(format=True) if verbose_html else pt.get_string()
+ table_printer.border = True
+ table_printer.vrules = ALL
+ table_printer.hrules = ALL
# creates a html page in a shorter format suitable for readme.md
- result = pt.get_html_string() if verbose_html else pt.get_string()
+ if verbose_html:
+ result = table_printer.get_html_string()
+ else:
+ result = table_printer.get_string()
result += "\n"
result += "Total IDEs: %d\n"% (len(supported_ides))
- if verbose_html: result += "<br>"
- result += "Total platforms: %d\n"% (target_counter)
- if verbose_html: result += "<br>"
+ if verbose_html:
+ result += "<br>"
+ result += "Total platforms: %d\n"% (len(TARGET_NAMES))
+ if verbose_html:
+ result += "<br>"
result += "Total permutations: %d"% (perm_counter)
- if verbose_html: result = result.replace("&", "&")
+ if verbose_html:
+ result = result.replace("&", "&")
return result
