1*10465441SEvalZero# 2*10465441SEvalZero# File : keil.py 3*10465441SEvalZero# This file is part of RT-Thread RTOS 4*10465441SEvalZero# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team 5*10465441SEvalZero# 6*10465441SEvalZero# This program is free software; you can redistribute it and/or modify 7*10465441SEvalZero# it under the terms of the GNU General Public License as published by 8*10465441SEvalZero# the Free Software Foundation; either version 2 of the License, or 9*10465441SEvalZero# (at your option) any later version. 10*10465441SEvalZero# 11*10465441SEvalZero# This program is distributed in the hope that it will be useful, 12*10465441SEvalZero# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*10465441SEvalZero# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*10465441SEvalZero# GNU General Public License for more details. 15*10465441SEvalZero# 16*10465441SEvalZero# You should have received a copy of the GNU General Public License along 17*10465441SEvalZero# with this program; if not, write to the Free Software Foundation, Inc., 18*10465441SEvalZero# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19*10465441SEvalZero# 20*10465441SEvalZero# Change Logs: 21*10465441SEvalZero# Date Author Notes 22*10465441SEvalZero# 2017-10-16 Tanek Add CDK IDE support 23*10465441SEvalZero# 24*10465441SEvalZero 25*10465441SEvalZeroimport os 26*10465441SEvalZeroimport sys 27*10465441SEvalZeroimport string 28*10465441SEvalZero 29*10465441SEvalZeroimport xml.etree.ElementTree as etree 30*10465441SEvalZerofrom xml.etree.ElementTree import SubElement 31*10465441SEvalZerofrom utils import _make_path_relative 32*10465441SEvalZerofrom utils import xml_indent 33*10465441SEvalZero 34*10465441SEvalZerodef SDKAddGroup(ProjectFiles, parent, name, files, project_path): 35*10465441SEvalZero # don't add an empty group 36*10465441SEvalZero if len(files) == 0: 37*10465441SEvalZero return 38*10465441SEvalZero 39*10465441SEvalZero group = SubElement(parent, 'VirtualDirectory', attrib={'Name': name}) 40*10465441SEvalZero 41*10465441SEvalZero for f in files: 42*10465441SEvalZero fn = f.rfile() 43*10465441SEvalZero name = fn.name 44*10465441SEvalZero path = os.path.dirname(fn.abspath) 45*10465441SEvalZero 46*10465441SEvalZero basename = os.path.basename(path) 47*10465441SEvalZero path = _make_path_relative(project_path, path) 48*10465441SEvalZero elm_attr_name = os.path.join(path, name) 49*10465441SEvalZero 50*10465441SEvalZero file = SubElement(group, 'File', attrib={'Name': elm_attr_name}) 51*10465441SEvalZero 52*10465441SEvalZero return group 53*10465441SEvalZero 54*10465441SEvalZerodef _CDKProject(tree, target, script): 55*10465441SEvalZero 56*10465441SEvalZero project_path = os.path.dirname(os.path.abspath(target)) 57*10465441SEvalZero 58*10465441SEvalZero root = tree.getroot() 59*10465441SEvalZero out = open(target, 'w') 60*10465441SEvalZero out.write('<?xml version="1.0" encoding="UTF-8"?>\n') 61*10465441SEvalZero 62*10465441SEvalZero CPPPATH = [] 63*10465441SEvalZero CPPDEFINES = [] 64*10465441SEvalZero LINKFLAGS = '' 65*10465441SEvalZero CCFLAGS = '' 66*10465441SEvalZero ProjectFiles = [] 67*10465441SEvalZero 68*10465441SEvalZero for child in root: 69*10465441SEvalZero if child.tag == 'VirtualDirectory': 70*10465441SEvalZero root.remove(child) 71*10465441SEvalZero 72*10465441SEvalZero for group in script: 73*10465441SEvalZero group_tree = SDKAddGroup(ProjectFiles, root, group['name'], group['src'], project_path) 74*10465441SEvalZero 75*10465441SEvalZero # get each include path 76*10465441SEvalZero if 'CPPPATH' in group and group['CPPPATH']: 77*10465441SEvalZero if CPPPATH: 78*10465441SEvalZero CPPPATH += group['CPPPATH'] 79*10465441SEvalZero else: 80*10465441SEvalZero CPPPATH += group['CPPPATH'] 81*10465441SEvalZero 82*10465441SEvalZero # get each group's definitions 83*10465441SEvalZero if 'CPPDEFINES' in group and group['CPPDEFINES']: 84*10465441SEvalZero if CPPDEFINES: 85*10465441SEvalZero CPPDEFINES += group['CPPDEFINES'] 86*10465441SEvalZero else: 87*10465441SEvalZero CPPDEFINES += group['CPPDEFINES'] 88*10465441SEvalZero 89*10465441SEvalZero # get each group's cc flags 90*10465441SEvalZero if 'CCFLAGS' in group and group['CCFLAGS']: 91*10465441SEvalZero if CCFLAGS: 92*10465441SEvalZero CCFLAGS += ' ' + group['CCFLAGS'] 93*10465441SEvalZero else: 94*10465441SEvalZero CCFLAGS += group['CCFLAGS'] 95*10465441SEvalZero 96*10465441SEvalZero # get each group's link flags 97*10465441SEvalZero if 'LINKFLAGS' in group and group['LINKFLAGS']: 98*10465441SEvalZero if LINKFLAGS: 99*10465441SEvalZero LINKFLAGS += ' ' + group['LINKFLAGS'] 100*10465441SEvalZero else: 101*10465441SEvalZero LINKFLAGS += group['LINKFLAGS'] 102*10465441SEvalZero 103*10465441SEvalZero # todo: cdk add lib 104*10465441SEvalZero 105*10465441SEvalZero # write include path, definitions and link flags 106*10465441SEvalZero text = ';'.join([_make_path_relative(project_path, os.path.normpath(i)) for i in CPPPATH]) 107*10465441SEvalZero IncludePath = tree.find('BuildConfigs/BuildConfig/Compiler/IncludePath') 108*10465441SEvalZero IncludePath.text = text 109*10465441SEvalZero IncludePath = tree.find('BuildConfigs/BuildConfig/Asm/IncludePath') 110*10465441SEvalZero IncludePath.text = text 111*10465441SEvalZero 112*10465441SEvalZero Define = tree.find('BuildConfigs/BuildConfig/Compiler/Define') 113*10465441SEvalZero Define.text = ', '.join(set(CPPDEFINES)) 114*10465441SEvalZero 115*10465441SEvalZero CC_Misc = tree.find('BuildConfigs/BuildConfig/Compiler/OtherFlags') 116*10465441SEvalZero CC_Misc.text = CCFLAGS 117*10465441SEvalZero 118*10465441SEvalZero LK_Misc = tree.find('BuildConfigs/BuildConfig/Linker/OtherFlags') 119*10465441SEvalZero LK_Misc.text = LINKFLAGS 120*10465441SEvalZero 121*10465441SEvalZero xml_indent(root) 122*10465441SEvalZero out.write(etree.tostring(root, encoding='utf-8')) 123*10465441SEvalZero out.close() 124*10465441SEvalZero 125*10465441SEvalZerodef CDKProject(target, script): 126*10465441SEvalZero template_tree = etree.parse('template.cdkproj') 127*10465441SEvalZero 128*10465441SEvalZero _CDKProject(template_tree, target, script) 129