diff --git a/tools/export/cdt/__init__.py b/tools/export/cdt/__init__.py index 226526ba2d..21e8a15750 100644 --- a/tools/export/cdt/__init__.py +++ b/tools/export/cdt/__init__.py @@ -1,18 +1,63 @@ -import re +""" +mbed SDK +Copyright (c) 2016-2019 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. +""" +import re +import os +import json +from collections import namedtuple +from tools.targets import TARGET_MAP from os.path import join, exists from os import makedirs, remove import shutil +from copy import deepcopy from tools.export.makefile import Makefile, GccArm, Armc5, IAR +_eclipse_defs = os.path.join( + os.path.dirname(os.path.abspath(__file__)), 'cdt_definitions.json') + +with open(_eclipse_defs, 'r') as f: + _CONFIGS_OPTIONS = json.load(f) + +supported_launches = ['debug', 'program', 'erase'] + class Eclipse(Makefile): """Generic Eclipse project. Intended to be subclassed by classes that specify a type of Makefile. """ + def get_target_config(self, ctx, configuration): + """Retrieve info from cdt_definitions.json""" + tgt = deepcopy(TARGET_MAP[self.target]) + defaults = deepcopy(_CONFIGS_OPTIONS['default']) + eclipse_config = deepcopy(defaults['generic']) + if configuration in defaults: + eclipse_config.update(defaults[configuration]) + + target_specific = _CONFIGS_OPTIONS['targets'] + if tgt.name in target_specific: + eclipse_config.update(target_specific[tgt.name]['generic']) + if configuration in target_specific[tgt.name]: + eclipse_config.update(target_specific[tgt.name][configuration]) + + return eclipse_config + def generate(self): """Generate Makefile, .cproject & .project Eclipse project file, - py_ocd_settings launch file, and software link .p2f file + pyocd_settings launch files for both GNU ARM Eclipse and + GNU MCU Eclipse plug-ins, and software link .p2f file """ super(Eclipse, self).generate() starting_dot = re.compile(r'(^[.]/|^[.]$)') @@ -25,15 +70,30 @@ class Eclipse(Makefile): 'include_paths': [starting_dot.sub('%s/' % self.project_name, inc) for inc in self.resources.inc_dirs], 'load_exe': str(self.LOAD_EXE).lower() } - + + launch_cfgs = {} + for launch_name in supported_launches: + launch = deepcopy(ctx) + launch.update({'device': self.get_target_config(ctx, launch_name)}) + launch_cfgs[launch_name] = launch + if not exists(join(self.export_dir,'eclipse-extras')): makedirs(join(self.export_dir,'eclipse-extras')) + for launch_name, ctx in launch_cfgs.items(): + # Generate launch configurations for former GNU ARM Eclipse plug-in + self.gen_file('cdt/%s' % 'pyocd_settings_gnu_arm.tmpl', ctx, join('eclipse-extras', + '{target}_{project}_{conf}_pyocd_settings.launch'.format( + target=self.target, + project=self.project_name, + conf=launch_name))) + # Generate launch configurations for GNU MCU Eclipse plug-in + self.gen_file('cdt/%s' % 'pyocd_settings_gnu_mcu.tmpl', ctx, join('eclipse-extras', + '{target}_{project}_{conf}.launch'.format( + target=self.target, + project=self.project_name, + conf=launch_name))) - self.gen_file('cdt/pyocd_settings.tmpl', ctx, - join('eclipse-extras', - '{target}_pyocd_{project}_settings.launch'.format(target=self.target, - project=self.project_name))) self.gen_file('cdt/necessary_software.tmpl', ctx, join('eclipse-extras','necessary_software.p2f')) diff --git a/tools/export/cdt/cdt_definitions.json b/tools/export/cdt/cdt_definitions.json new file mode 100644 index 0000000000..6a11a88dc8 --- /dev/null +++ b/tools/export/cdt/cdt_definitions.json @@ -0,0 +1,92 @@ +{ + "default": { + "generic": { + "doContinue": "true", + "doFirstReset": "true", + "doGdbServerAllocateSemihostingConsole": "true", + "doSecondReset": "true", + "enableSemihosting": "true", + "firstResetType": "init", + "gdbClientOtherCommands": "set mem inaccessible-by-default off", + "gdbClientOtherOptions": "", + "gdbServerBusSpeed": 1000000, + "gdbServerEnableSemihosting": "true", + "gdbServerFlashMode": 0, + "gdbServerGdbPortNumber": 3333, + "gdbServerHaltAtHardFault": "true", + "gdbServerOther": "", + "otherRunCommands": "", + "secondResetType": "halt", + "coreLoadImage": "true", + "coreLoadSymbols": "true", + "corePortNumber": 3333, + "setStopAt": "true" + }, + "debug": { + }, + "program": { + "doContinue": "false", + "otherRunCommands": "continue& quit", + "coreLoadSymbols": "false", + "setStopAt": "false" + }, + "erase": { + "doContinue": "false", + "doSecondReset": "false", + "otherRunCommands": "mon erase --chip quit", + "coreLoadImage": "false", + "coreLoadSymbols": "false", + "setStopAt": "false" + } + }, + + "targets": { + "CY8CPROTO_062_4343W": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + }, + + "CY8CMOD_062_4343W": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + }, + + "CYW943012P6EVB_01": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + }, + + "CY8CKIT_062_WIFI_BT": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + }, + + "CY8CKIT_062_BLE": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + }, + + "CY8CKIT_062_4343W": { + "generic": { + "gdbServerGdbPortNumber": 3334, + "gdbServerOther": "-p 3333 --no-deprecation-warning", + "corePortNumber": 3334 + } + } + } +} \ No newline at end of file diff --git a/tools/export/cdt/pyocd_settings.tmpl b/tools/export/cdt/pyocd_settings_gnu_arm.tmpl similarity index 81% rename from tools/export/cdt/pyocd_settings.tmpl rename to tools/export/cdt/pyocd_settings_gnu_arm.tmpl index 67d0ed4fba..9bfff6359e 100644 --- a/tools/export/cdt/pyocd_settings.tmpl +++ b/tools/export/cdt/pyocd_settings_gnu_arm.tmpl @@ -1,46 +1,46 @@ - + - + - - + + - - - - + + + + - + - + - - - + + + - + - - + + - - + + - + - + diff --git a/tools/export/cdt/pyocd_settings_gnu_mcu.tmpl b/tools/export/cdt/pyocd_settings_gnu_mcu.tmpl new file mode 100644 index 0000000000..c87fa3a4f9 --- /dev/null +++ b/tools/export/cdt/pyocd_settings_gnu_mcu.tmpl @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +