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