mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
88 lines
3.5 KiB
Python
88 lines
3.5 KiB
Python
#!/usr/bin/python3
|
|
|
|
import os
|
|
import sys
|
|
import xml.dom.minidom as XML
|
|
import glob
|
|
|
|
def Main():
|
|
# Read base configuration
|
|
base = ""
|
|
with open("iar_template.ipcf") as f:
|
|
base = f.read()
|
|
|
|
# Enumerate all device/host examples
|
|
dir_1 = os.listdir("../examples")
|
|
for dir_2 in dir_1:
|
|
if os.path.isdir("../examples/{}".format(dir_2)):
|
|
print(dir_2)
|
|
examples = os.listdir("../examples/{}".format(dir_2))
|
|
for example in examples:
|
|
if os.path.isdir("../examples/{}/{}".format(dir_2, example)):
|
|
print("../examples/{}/{}".format(dir_2, example))
|
|
conf = XML.parseString(base)
|
|
files = conf.getElementsByTagName("files")[0]
|
|
inc = conf.getElementsByTagName("includePath")[0]
|
|
# Add bsp inc
|
|
path = conf.createElement('path')
|
|
path_txt = conf.createTextNode("$TUSB_DIR$/hw")
|
|
path.appendChild(path_txt)
|
|
inc.appendChild(path)
|
|
# Add board.c/.h
|
|
grp = conf.createElement('group')
|
|
grp.setAttribute("name", "bsp")
|
|
path = conf.createElement('path')
|
|
path_txt = conf.createTextNode("$TUSB_DIR$/hw/bsp/board.c")
|
|
path.appendChild(path_txt)
|
|
grp.appendChild(path)
|
|
files.appendChild(grp)
|
|
# Add example's .c/.h
|
|
grp = conf.createElement('group')
|
|
grp.setAttribute("name", "example")
|
|
for file in os.listdir("../examples/{}/{}/src".format(dir_2, example)):
|
|
if file.endswith(".c") or file.endswith(".h"):
|
|
path = conf.createElement('path')
|
|
path.setAttribute("copyTo", "$PROJ_DIR$/{}".format(file))
|
|
path_txt = conf.createTextNode("$TUSB_DIR$/examples/{0}/{1}/src/{2}".format(dir_2, example, file))
|
|
path.appendChild(path_txt)
|
|
grp.appendChild(path)
|
|
files.appendChild(grp)
|
|
cfg_str = conf.toprettyxml()
|
|
cfg_str = '\n'.join([s for s in cfg_str.splitlines() if s.strip()])
|
|
#print(cfg_str)
|
|
with open("../examples/{0}/{1}/iar_{1}.ipcf".format(dir_2, example), 'w') as f:
|
|
f.write(cfg_str)
|
|
|
|
def ListPath(path, blacklist=[]):
|
|
# Get all .c files
|
|
files = glob.glob(f'../{path}/**/*.c', recursive=True)
|
|
files.extend(glob.glob(f'../{path}/**/*.h', recursive=True))
|
|
# Filter
|
|
files = [x for x in files if all(y not in x for y in blacklist)]
|
|
# Get common dir list
|
|
dirs = []
|
|
for file in files:
|
|
dir = os.path.dirname(file)
|
|
if dir not in dirs:
|
|
dirs.append(dir)
|
|
# Print .c grouped by dir
|
|
for dir in dirs:
|
|
print('<group name="' + dir.replace('../', '').replace('\\','/') + '">')
|
|
for file in files:
|
|
if os.path.dirname(file) == dir:
|
|
print(' <path>$TUSB_DIR$/' + file.replace('../','').replace('\\','/')+'</path>')
|
|
print('</group>')
|
|
|
|
def List():
|
|
ListPath('src', [ 'template.c', 'dcd_synopsys.c', 'dcd_esp32sx.c' ])
|
|
ListPath('lib/SEGGER_RTT')
|
|
|
|
if __name__ == "__main__":
|
|
if os.path.dirname(os.getcwd()) != 'tools':
|
|
os.chdir('tools')
|
|
if (len(sys.argv) > 1):
|
|
if (sys.argv[1] == 'l'):
|
|
List()
|
|
else:
|
|
Main()
|