dhgdh
Dependencies: MAX44000 PWM_Tone_Library nexpaq_mdk
Fork of LED_Demo by
Diff: mbd_os/tools/export/uvision5.py
- Revision:
- 1:55a6170b404f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbd_os/tools/export/uvision5.py Sat Sep 17 16:32:05 2016 +0000 @@ -0,0 +1,95 @@ +""" +mbed SDK +Copyright (c) 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. +""" +from os.path import basename, join, dirname +from project_generator_definitions.definitions import ProGenDef + +from tools.export.exporters import Exporter, ExporterTargetsProperty +from tools.targets import TARGET_MAP, TARGET_NAMES + +# If you wish to add a new target, add it to project_generator_definitions, and then +# define progen_target name in the target class (`` self.progen_target = 'my_target_name' ``) +# There are 2 default mbed templates (predefined settings) uvision.uvproj and uvproj_microlib.uvproj.tmpl +class Uvision5(Exporter): + """ + Exporter class for uvision5. This class uses project generator. + """ + # These 2 are currently for exporters backward compatiblity + NAME = 'uvision5' + TOOLCHAIN = 'ARM' + # PROGEN_ACTIVE contains information for exporter scripts that this is using progen + PROGEN_ACTIVE = True + + MBED_CONFIG_HEADER_SUPPORTED = True + + @ExporterTargetsProperty + def TARGETS(cls): + if not hasattr(cls, "_targets_supported"): + cls._targets_supported = [] + progendef = ProGenDef('uvision5') + for target in TARGET_NAMES: + try: + if (progendef.is_supported(str(TARGET_MAP[target])) or + progendef.is_supported(TARGET_MAP[target].progen['target'])): + cls._targets_supported.append(target) + except AttributeError: + # target is not supported yet + continue + return cls._targets_supported + + def get_toolchain(self): + return TARGET_MAP[self.target].default_toolchain + + def generate(self): + """ Generates the project files """ + project_data = self.progen_get_project_data() + tool_specific = {} + # Expand tool specific settings by uvision specific settings which are required + try: + if TARGET_MAP[self.target].progen['uvision5']['template']: + tool_specific['uvision5'] = TARGET_MAP[self.target].progen['uvision5'] + except KeyError: + # use default template + # by the mbed projects + tool_specific['uvision5'] = { + 'template': [join(dirname(__file__), 'uvision.uvproj.tmpl')], + } + + #project_data['template'] = [tool_specific['uvision5']['template']] + project_data['tool_specific'] = {} + project_data['tool_specific'].update(tool_specific) + + # get flags from toolchain and apply + project_data['misc'] = {} + asm_flag_string = '--cpreproc --cpreproc_opts=-D__ASSERT_MSG,' + ",".join(list(set(self.flags['asm_flags']))) + # asm flags only, common are not valid within uvision project, they are armcc specific + project_data['misc']['asm_flags'] = [asm_flag_string] + # cxx flags included, as uvision have them all in one tab + project_data['misc']['c_flags'] = list(set(['-D__ASSERT_MSG'] + + self.flags['common_flags'] + + self.flags['c_flags'] + + self.flags['cxx_flags'])) + # not compatible with c99 flag set in the template + project_data['misc']['c_flags'].remove("--c99") + # cpp is not required as it's implicit for cpp files + project_data['misc']['c_flags'].remove("--cpp") + # we want no-vla for only cxx, but it's also applied for C in IDE, thus we remove it + project_data['misc']['c_flags'].remove("--no_vla") + project_data['misc']['ld_flags'] = self.flags['ld_flags'] + + i = 0 + project_data['build_dir'] = project_data['build_dir'] + '\\' + 'uvision5' + self.progen_gen_file(project_data)