summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-11-21 01:04:16 +0800
committerBernard Xiong <[email protected]>2018-11-21 01:04:16 +0800
commit27ec671eaba3b92507c48ba180f9ff7607f622bb (patch)
tree3df88393f322c9ad7f9fed21b622eb3dba2b09cf /tools
parent25ee668feb7c4cfe9d5f131bcbb019e29409c06f (diff)
[Tools] Add a draft project generator for SES.
Diffstat (limited to 'tools')
-rw-r--r--tools/building.py9
-rw-r--r--tools/ses.py92
2 files changed, 99 insertions, 2 deletions
diff --git a/tools/building.py b/tools/building.py
index cbd245b948..ba6c5000e4 100644
--- a/tools/building.py
+++ b/tools/building.py
@@ -184,7 +184,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
AddOption('--target',
dest = 'target',
type = 'string',
- help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk')
+ help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses')
AddOption('--genconfig',
dest = 'genconfig',
action = 'store_true',
@@ -224,7 +224,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
'vsc' : ('gcc', 'gcc'),
'cb':('keil', 'armcc'),
'ua':('gcc', 'gcc'),
- 'cdk':('gcc', 'gcc')}
+ 'cdk':('gcc', 'gcc'),
+ 'ses' : ('gcc', 'gcc')}
tgt_name = GetOption('target')
if tgt_name:
@@ -797,6 +798,10 @@ def GenTargetProject(program = None):
from cdk import CDKProject
CDKProject('project.cdkproj', Projects)
+ if GetOption('target') == 'ses':
+ from ses import SESProject
+ SESProject(Env)
+
def EndBuilding(target, program = None):
import rtconfig
diff --git a/tools/ses.py b/tools/ses.py
new file mode 100644
index 0000000000..dcd9d34442
--- /dev/null
+++ b/tools/ses.py
@@ -0,0 +1,92 @@
+# SEGGER Embedded Studio Project Generator
+
+import os
+import sys
+
+import xml.etree.ElementTree as etree
+from xml.etree.ElementTree import SubElement
+from utils import _make_path_relative
+from utils import xml_indent
+from utils import ProjectInfo
+
+def SDKAddGroup(parent, name, files, project_path):
+ # don't add an empty group
+ if len(files) == 0:
+ return
+
+ group = SubElement(parent, 'folder', attrib={'Name': name})
+
+ for f in files:
+ fn = f.rfile()
+ name = fn.name
+ path = os.path.dirname(fn.abspath)
+
+ basename = os.path.basename(path)
+ path = _make_path_relative(project_path, path)
+ elm_attr_name = os.path.join(path, name)
+
+ file = SubElement(group, 'file', attrib={'file_name': elm_attr_name})
+
+ return group
+
+def SESProject(env) :
+ target = 'project.emProject'
+ tree = etree.parse('template.emProject')
+ # print(etree.dump(tree.getroot()))
+ # etree.dump(tree.getroot())
+
+ project = ProjectInfo(env)
+ # print(project)
+ # return
+
+ project_path = os.path.abspath(env['BSP_ROOT'])
+ script = env['project']
+
+ root = tree.getroot()
+ out = file(target, 'w')
+ out.write('<!DOCTYPE CrossStudio_Project_File>\n')
+
+ CPPPATH = []
+ CPPDEFINES = []
+ LINKFLAGS = ''
+ CCFLAGS = ''
+
+ project_node = tree.find('project')
+
+ for group in script:
+ # print(group)
+
+ group_tree = SDKAddGroup(project_node, group['name'], group['src'], project_path)
+
+ # get each group's cc flags
+ if group.has_key('CCFLAGS') and group['CCFLAGS']:
+ if CCFLAGS:
+ CCFLAGS += ' ' + group['CCFLAGS']
+ else:
+ CCFLAGS += group['CCFLAGS']
+
+ # get each group's link flags
+ if group.has_key('LINKFLAGS') and group['LINKFLAGS']:
+ if LINKFLAGS:
+ LINKFLAGS += ' ' + group['LINKFLAGS']
+ else:
+ LINKFLAGS += group['LINKFLAGS']
+
+ # write include path, definitions and link flags
+ path = ';'.join([_make_path_relative(project_path, os.path.normpath(i)) for i in project['CPPPATH']])
+ path = path.replace('\\', '/')
+ defines = ';'.join(set(project['CPPDEFINES']))
+
+ node = tree.findall('project/configuration')
+ for item in node:
+ if item.get('c_preprocessor_definitions'):
+ item.set('c_preprocessor_definitions', defines)
+
+ if item.get('c_user_include_directories'):
+ item.set('c_user_include_directories', path)
+
+ xml_indent(root)
+ out.write(etree.tostring(root, encoding='utf-8'))
+ out.close()
+
+ return