1#!/usr/bin/python 2## 3## license:BSD-3-Clause 4## copyright-holders:Couriersud 5 6import os 7import os.path 8import re 9import sys 10import xml.sax 11import xml.sax.saxutils 12import zlib 13import datetime 14 15 16# workaround for version incompatibility 17if sys.version_info > (3, ): 18 long = int 19 20# globals 21 22last_src = "" 23 24def process_entry(srcfile, name, params): 25 global last_src 26 if (last_src != srcfile): 27 last_src = srcfile 28 print("// ---------------------------------------------------------------------") 29 print("// Source: {}".format(srcfile)) 30 print("// ---------------------------------------------------------------------") 31 print("") 32 p = re.sub("\+","",params) 33 ps = p.split(",") 34 pusage = "" 35 pauto = "" 36 for x in ps: 37 if x[0:1] == "@": 38 pauto = pauto + ", " + x[1:] 39 else: 40 pusage = pusage + ", " + x 41 print("// usage : {}(name{})".format(name, pusage)) 42 if len(pauto) > 0: 43 print("// auto connect: {}".format(pauto[2:])) 44 print("#define {}(...) \\".format(name)) 45 print("\tNET_REGISTER_DEVEXT({}, __VA_ARGS__)".format(name)) 46 print("") 47 48 49def process_file(srcfile): 50 src = open(srcfile,'r') 51 lines = src.readlines() 52 for line in lines: 53 ls = re.sub("\s+","",line.strip()) 54 ls = re.sub("^\s*//.*","",ls) 55 ls = re.sub("\"","",ls) 56 m = re.match(r"NETLIST_START\((\w+)\)", ls) 57 if m != None: 58 print("\tEXTERNAL_LIB_ENTRY("+ m.group(1) + ")") 59 src.close() 60 61if __name__ == '__main__': 62 if (len(sys.argv) == 0): 63 print('Usage:') 64 print(' create_devinc files ...') 65 sys.exit(0) 66 files_sorted = []; 67 for argno in range(1, len(sys.argv)): 68 files_sorted.append(sys.argv[argno]) 69 files_sorted.sort(); 70 print("// license:CC0") 71 print("// copyright-holders:Couriersud") 72 print("") 73 now = datetime.datetime.now() 74 print("// File programmatically created " + now.strftime("%c")) 75 print("") 76 print("#include \"devices/net_lib.h\"") 77 print("") 78 print("NETLIST_START(modules_lib)") 79 print("") 80 for entry in files_sorted: 81 process_file(entry) 82 print("") 83 print("NETLIST_END()") 84