diff options
| author | [email protected] <[email protected]> | 2012-02-19 09:11:35 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2012-02-19 09:11:35 +0000 |
| commit | 3fd6fd1f050e05369f9406ab6a94721a4ea8eb94 (patch) | |
| tree | 2b6a719d5bc2db83957abeac41be91ecb2ed3b0d /tools/iar.py | |
| parent | 68384c37c4d20b8c8d24f0cc187dd7533b51b1a3 (diff) | |
cleanup the building script in tools.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1970 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'tools/iar.py')
| -rw-r--r-- | tools/iar.py | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tools/iar.py b/tools/iar.py new file mode 100644 index 0000000000..6f4584e852 --- /dev/null +++ b/tools/iar.py @@ -0,0 +1,104 @@ +import os +import sys +import string + +import xml.etree.ElementTree as etree +from xml.etree.ElementTree import SubElement +from utils import _make_path_relative +from utils import xml_indent + +fs_encoding = sys.getfilesystemencoding() + +iar_workspace = '''<?xml version="1.0" encoding="iso-8859-1"?> + +<workspace> + <project> + <path>$WS_DIR$\%s</path> + </project> + <batchBuild/> +</workspace> + + +''' + +def IARAddGroup(parent, name, files, project_path): + group = SubElement(parent, 'group') + group_name = SubElement(group, 'name') + group_name.text = 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) + path = os.path.join(path, name) + + file = SubElement(group, 'file') + file_name = SubElement(file, 'name') + file_name.text = ('$PROJ_DIR$\\' + path).decode(fs_encoding) + +def IARWorkspace(target): + # make an workspace + workspace = target.replace('.ewp', '.eww') + out = file(workspace, 'wb') + xml = iar_workspace % target + out.write(xml) + out.close() + +def IARProject(target, script): + project_path = os.path.dirname(os.path.abspath(target)) + + tree = etree.parse('template.ewp') + root = tree.getroot() + + out = file(target, 'wb') + + CPPPATH = [] + CPPDEFINES = [] + LINKFLAGS = '' + CCFLAGS = '' + + # add group + for group in script: + IARAddGroup(root, group['name'], group['src'], project_path) + + # get each include path + if group.has_key('CPPPATH') and group['CPPPATH']: + CPPPATH += group['CPPPATH'] + + # get each group's definitions + if group.has_key('CPPDEFINES') and group['CPPDEFINES']: + CPPDEFINES += group['CPPDEFINES'] + + # get each group's link flags + if group.has_key('LINKFLAGS') and group['LINKFLAGS']: + LINKFLAGS += group['LINKFLAGS'] + + # make relative path + paths = set() + for path in CPPPATH: + inc = _make_path_relative(project_path, os.path.normpath(path)) + paths.add(inc) #.replace('\\', '/') + + # setting options + options = tree.findall('configuration/settings/data/option') + for option in options: + # print option.text + name = option.find('name') + + if name.text == 'CCIncludePath2': + for path in paths: + state = SubElement(option, 'state') + state.text = '$PROJ_DIR$\\' + path + if name.text == 'CCDefines': + for define in CPPDEFINES: + state = SubElement(option, 'state') + state.text = define + + xml_indent(root) + out.write(etree.tostring(root, encoding='utf-8')) + out.close() + + IARWorkspace(target) |
