xref: /nrf52832-nimble/rt-thread/tools/ses.py (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero# SEGGER Embedded Studio Project Generator
2*10465441SEvalZero
3*10465441SEvalZeroimport os
4*10465441SEvalZeroimport sys
5*10465441SEvalZero
6*10465441SEvalZeroimport xml.etree.ElementTree as etree
7*10465441SEvalZerofrom xml.etree.ElementTree import SubElement
8*10465441SEvalZerofrom utils import _make_path_relative
9*10465441SEvalZerofrom utils import xml_indent
10*10465441SEvalZerofrom utils import ProjectInfo
11*10465441SEvalZero
12*10465441SEvalZerodef SDKAddGroup(parent, name, files, project_path):
13*10465441SEvalZero    # don't add an empty group
14*10465441SEvalZero    if len(files) == 0:
15*10465441SEvalZero        return
16*10465441SEvalZero
17*10465441SEvalZero    group = SubElement(parent, 'folder', attrib={'Name': name})
18*10465441SEvalZero
19*10465441SEvalZero    for f in files:
20*10465441SEvalZero        fn = f.rfile()
21*10465441SEvalZero        name = fn.name
22*10465441SEvalZero        path = os.path.dirname(fn.abspath)
23*10465441SEvalZero
24*10465441SEvalZero        basename = os.path.basename(path)
25*10465441SEvalZero        path = _make_path_relative(project_path, path)
26*10465441SEvalZero        elm_attr_name = os.path.join(path, name)
27*10465441SEvalZero
28*10465441SEvalZero        file = SubElement(group, 'file', attrib={'file_name': elm_attr_name})
29*10465441SEvalZero
30*10465441SEvalZero    return group
31*10465441SEvalZero
32*10465441SEvalZerodef SESProject(env) :
33*10465441SEvalZero    target = 'project.emProject'
34*10465441SEvalZero    tree = etree.parse('template.emProject')
35*10465441SEvalZero    # print(etree.dump(tree.getroot()))
36*10465441SEvalZero    # etree.dump(tree.getroot())
37*10465441SEvalZero
38*10465441SEvalZero    project = ProjectInfo(env)
39*10465441SEvalZero    # print(project)
40*10465441SEvalZero    # return
41*10465441SEvalZero
42*10465441SEvalZero    project_path = os.path.abspath(env['BSP_ROOT'])
43*10465441SEvalZero    script = env['project']
44*10465441SEvalZero
45*10465441SEvalZero    root = tree.getroot()
46*10465441SEvalZero    out = file(target, 'w')
47*10465441SEvalZero    out.write('<!DOCTYPE CrossStudio_Project_File>\n')
48*10465441SEvalZero
49*10465441SEvalZero    CPPPATH = []
50*10465441SEvalZero    CPPDEFINES = []
51*10465441SEvalZero    LINKFLAGS = ''
52*10465441SEvalZero    CCFLAGS = ''
53*10465441SEvalZero
54*10465441SEvalZero    project_node = tree.find('project')
55*10465441SEvalZero
56*10465441SEvalZero    for group in script:
57*10465441SEvalZero        # print(group)
58*10465441SEvalZero
59*10465441SEvalZero        group_tree = SDKAddGroup(project_node, group['name'], group['src'], project_path)
60*10465441SEvalZero
61*10465441SEvalZero        # get each group's cc flags
62*10465441SEvalZero        if group.has_key('CCFLAGS') and group['CCFLAGS']:
63*10465441SEvalZero            if CCFLAGS:
64*10465441SEvalZero                CCFLAGS += ' ' + group['CCFLAGS']
65*10465441SEvalZero            else:
66*10465441SEvalZero                CCFLAGS += group['CCFLAGS']
67*10465441SEvalZero
68*10465441SEvalZero        # get each group's link flags
69*10465441SEvalZero        if group.has_key('LINKFLAGS') and group['LINKFLAGS']:
70*10465441SEvalZero            if LINKFLAGS:
71*10465441SEvalZero                LINKFLAGS += ' ' + group['LINKFLAGS']
72*10465441SEvalZero            else:
73*10465441SEvalZero                LINKFLAGS += group['LINKFLAGS']
74*10465441SEvalZero
75*10465441SEvalZero    # write include path, definitions and link flags
76*10465441SEvalZero    path = ';'.join([_make_path_relative(project_path, os.path.normpath(i)) for i in project['CPPPATH']])
77*10465441SEvalZero    path = path.replace('\\', '/')
78*10465441SEvalZero    defines = ';'.join(set(project['CPPDEFINES']))
79*10465441SEvalZero
80*10465441SEvalZero    node = tree.findall('project/configuration')
81*10465441SEvalZero    for item in node:
82*10465441SEvalZero        if item.get('c_preprocessor_definitions'):
83*10465441SEvalZero            item.set('c_preprocessor_definitions', defines)
84*10465441SEvalZero
85*10465441SEvalZero        if item.get('c_user_include_directories'):
86*10465441SEvalZero            item.set('c_user_include_directories', path)
87*10465441SEvalZero
88*10465441SEvalZero    xml_indent(root)
89*10465441SEvalZero    out.write(etree.tostring(root, encoding='utf-8'))
90*10465441SEvalZero    out.close()
91*10465441SEvalZero
92*10465441SEvalZero    return
93