Skip to content

Commit 7ba83a5

Browse files
authored
Merge pull request #9342 from Cypress-OpenOCD/master
Add support for debug and program launch configurations
2 parents b56ab51 + be5a625 commit 7ba83a5

File tree

4 files changed

+248
-27
lines changed

4 files changed

+248
-27
lines changed

tools/export/cdt/__init__.py

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,63 @@
1-
import re
1+
"""
2+
mbed SDK
3+
Copyright (c) 2016-2019 ARM Limited
4+
5+
Licensed under the Apache License, Version 2.0 (the "License");
6+
you may not use this file except in compliance with the License.
7+
You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
210
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
"""
17+
import re
18+
import os
19+
import json
20+
from collections import namedtuple
21+
from tools.targets import TARGET_MAP
322
from os.path import join, exists
423
from os import makedirs, remove
524
import shutil
25+
from copy import deepcopy
626

727
from tools.export.makefile import Makefile, GccArm, Armc5, IAR
828

29+
_eclipse_defs = os.path.join(
30+
os.path.dirname(os.path.abspath(__file__)), 'cdt_definitions.json')
31+
32+
with open(_eclipse_defs, 'r') as f:
33+
_CONFIGS_OPTIONS = json.load(f)
34+
35+
supported_launches = ['debug', 'program', 'erase']
36+
937
class Eclipse(Makefile):
1038
"""Generic Eclipse project. Intended to be subclassed by classes that
1139
specify a type of Makefile.
1240
"""
41+
def get_target_config(self, ctx, configuration):
42+
"""Retrieve info from cdt_definitions.json"""
43+
tgt = deepcopy(TARGET_MAP[self.target])
44+
defaults = deepcopy(_CONFIGS_OPTIONS['default'])
45+
eclipse_config = deepcopy(defaults['generic'])
46+
if configuration in defaults:
47+
eclipse_config.update(defaults[configuration])
48+
49+
target_specific = _CONFIGS_OPTIONS['targets']
50+
if tgt.name in target_specific:
51+
eclipse_config.update(target_specific[tgt.name]['generic'])
52+
if configuration in target_specific[tgt.name]:
53+
eclipse_config.update(target_specific[tgt.name][configuration])
54+
55+
return eclipse_config
56+
1357
def generate(self):
1458
"""Generate Makefile, .cproject & .project Eclipse project file,
15-
py_ocd_settings launch file, and software link .p2f file
59+
pyocd_settings launch files for both GNU ARM Eclipse and
60+
GNU MCU Eclipse plug-ins, and software link .p2f file
1661
"""
1762
super(Eclipse, self).generate()
1863
starting_dot = re.compile(r'(^[.]/|^[.]$)')
@@ -25,15 +70,30 @@ def generate(self):
2570
'include_paths': [starting_dot.sub('%s/' % self.project_name, inc) for inc in self.resources.inc_dirs],
2671
'load_exe': str(self.LOAD_EXE).lower()
2772
}
28-
73+
74+
launch_cfgs = {}
75+
for launch_name in supported_launches:
76+
launch = deepcopy(ctx)
77+
launch.update({'device': self.get_target_config(ctx, launch_name)})
78+
launch_cfgs[launch_name] = launch
79+
2980
if not exists(join(self.export_dir,'eclipse-extras')):
3081
makedirs(join(self.export_dir,'eclipse-extras'))
3182

83+
for launch_name, ctx in launch_cfgs.items():
84+
# Generate launch configurations for former GNU ARM Eclipse plug-in
85+
self.gen_file('cdt/%s' % 'pyocd_settings_gnu_arm.tmpl', ctx, join('eclipse-extras',
86+
'{target}_{project}_{conf}_pyocd_settings.launch'.format(
87+
target=self.target,
88+
project=self.project_name,
89+
conf=launch_name)))
90+
# Generate launch configurations for GNU MCU Eclipse plug-in
91+
self.gen_file('cdt/%s' % 'pyocd_settings_gnu_mcu.tmpl', ctx, join('eclipse-extras',
92+
'{target}_{project}_{conf}.launch'.format(
93+
target=self.target,
94+
project=self.project_name,
95+
conf=launch_name)))
3296

33-
self.gen_file('cdt/pyocd_settings.tmpl', ctx,
34-
join('eclipse-extras',
35-
'{target}_pyocd_{project}_settings.launch'.format(target=self.target,
36-
project=self.project_name)))
3797
self.gen_file('cdt/necessary_software.tmpl', ctx,
3898
join('eclipse-extras','necessary_software.p2f'))
3999

tools/export/cdt/cdt_definitions.json

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{
2+
"default": {
3+
"generic": {
4+
"doContinue": "true",
5+
"doFirstReset": "true",
6+
"doGdbServerAllocateSemihostingConsole": "true",
7+
"doSecondReset": "true",
8+
"enableSemihosting": "true",
9+
"firstResetType": "init",
10+
"gdbClientOtherCommands": "set mem inaccessible-by-default off",
11+
"gdbClientOtherOptions": "",
12+
"gdbServerBusSpeed": 1000000,
13+
"gdbServerEnableSemihosting": "true",
14+
"gdbServerFlashMode": 0,
15+
"gdbServerGdbPortNumber": 3333,
16+
"gdbServerHaltAtHardFault": "true",
17+
"gdbServerOther": "",
18+
"otherRunCommands": "",
19+
"secondResetType": "halt",
20+
"coreLoadImage": "true",
21+
"coreLoadSymbols": "true",
22+
"corePortNumber": 3333,
23+
"setStopAt": "true"
24+
},
25+
"debug": {
26+
},
27+
"program": {
28+
"doContinue": "false",
29+
"otherRunCommands": "continue&
quit",
30+
"coreLoadSymbols": "false",
31+
"setStopAt": "false"
32+
},
33+
"erase": {
34+
"doContinue": "false",
35+
"doSecondReset": "false",
36+
"otherRunCommands": "mon erase --chip
quit",
37+
"coreLoadImage": "false",
38+
"coreLoadSymbols": "false",
39+
"setStopAt": "false"
40+
}
41+
},
42+
43+
"targets": {
44+
"CY8CPROTO_062_4343W": {
45+
"generic": {
46+
"gdbServerGdbPortNumber": 3334,
47+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
48+
"corePortNumber": 3334
49+
}
50+
},
51+
52+
"CY8CMOD_062_4343W": {
53+
"generic": {
54+
"gdbServerGdbPortNumber": 3334,
55+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
56+
"corePortNumber": 3334
57+
}
58+
},
59+
60+
"CYW943012P6EVB_01": {
61+
"generic": {
62+
"gdbServerGdbPortNumber": 3334,
63+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
64+
"corePortNumber": 3334
65+
}
66+
},
67+
68+
"CY8CKIT_062_WIFI_BT": {
69+
"generic": {
70+
"gdbServerGdbPortNumber": 3334,
71+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
72+
"corePortNumber": 3334
73+
}
74+
},
75+
76+
"CY8CKIT_062_BLE": {
77+
"generic": {
78+
"gdbServerGdbPortNumber": 3334,
79+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
80+
"corePortNumber": 3334
81+
}
82+
},
83+
84+
"CY8CKIT_062_4343W": {
85+
"generic": {
86+
"gdbServerGdbPortNumber": 3334,
87+
"gdbServerOther": "-p 3333
--no-deprecation-warning",
88+
"corePortNumber": 3334
89+
}
90+
}
91+
}
92+
}

tools/export/cdt/pyocd_settings.tmpl renamed to tools/export/cdt/pyocd_settings_gnu_arm.tmpl

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,46 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
22
<launchConfiguration type="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.launchConfigurationType">
3-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doContinue" value="true"/>
3+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doContinue" value="{{device.doContinue}}"/>
44
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doDebugInRam" value="false"/>
5-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doFirstReset" value="true"/>
5+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doFirstReset" value="{{device.doFirstReset}}"/>
66
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doGdbServerAllocateConsole" value="true"/>
7-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doGdbServerAllocateSemihostingConsole" value="true"/>
8-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doSecondReset" value="true"/>
7+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doGdbServerAllocateSemihostingConsole" value="{{device.doGdbServerAllocateSemihostingConsole}}"/>
8+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doSecondReset" value="{{device.doSecondReset}}"/>
99
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.doStartGdbServer" value="true"/>
10-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.enableSemihosting" value="true"/>
11-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.firstResetType" value="init"/>
12-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
13-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbClientOtherOptions" value=""/>
10+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.enableSemihosting" value="{{device.enableSemihosting}}"/>
11+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.firstResetType" value="{{device.firstResetType}}"/>
12+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbClientOtherCommands" value="{{device.gdbClientOtherCommands}}"/>
13+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbClientOtherOptions" value="{{device.gdbClientOtherOptions}}"/>
1414
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerBoardId" value=""/>
15-
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerBusSpeed" value="1000000"/>
15+
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerBusSpeed" value="{{device.gdbServerBusSpeed}}"/>
1616
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerConnectionAddress" value=""/>
17-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerEnableSemihosting" value="true"/>
17+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerEnableSemihosting" value="{{device.gdbServerEnableSemihosting}}"/>
1818
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerExecutable" value="${pyocd_path}/${pyocd_executable}"/>
1919
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerFlashFastVerify" value="false"/>
20-
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerFlashMode" value="0"/>
21-
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerGdbPortNumber" value="3333"/>
22-
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerHaltAtHardFault" value="true"/>
20+
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerFlashMode" value="{{device.gdbServerFlashMode}}"/>
21+
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerGdbPortNumber" value="{{device.gdbServerGdbPortNumber}}"/>
22+
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerHaltAtHardFault" value="{{device.gdbServerHaltAtHardFault}}"/>
2323
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerLog" value=""/>
24-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerOther" value=""/>
24+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerOther" value="{{device.gdbServerOther}}"/>
2525
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerOverrideTarget" value="false"/>
2626
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerStepIntoInterrutps" value="false"/>
2727
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerTargetName" value=""/>
2828
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerTelnetPortNumber" value="4444"/>
2929
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.gdbServerUseGdbSyscalls" value="false"/>
3030
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.otherInitCommands" value=""/>
31-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.otherRunCommands" value=""/>
32-
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.secondResetType" value="halt"/>
31+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.otherRunCommands" value="{{device.otherRunCommands}}"/>
32+
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.pyocd.secondResetType" value="{{device.secondResetType}}"/>
3333
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
3434
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
3535
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
3636
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU ARM PyOCD"/>
37-
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="{{load_exe}}"/>
38-
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="{{load_exe}}"/>
37+
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="{% if load_exe == device.coreLoadImage %}{{load_exe}}{% else %}{{device.coreLoadImage}}{% endif %}"/>
38+
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="{% if load_exe == device.coreLoadSymbols %}{{load_exe}}{% else %}{{device.coreLoadSymbols}}{% endif %}"/>
3939
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
40-
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
40+
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="{{device.corePortNumber}}"/>
4141
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
4242
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
43-
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
43+
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="{{device.setStopAt}}"/>
4444
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
4545
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
4646
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>

0 commit comments

Comments
 (0)