88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env 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()
 | 
