#!/usr/bin/env python3 #------------------------------------------------------------------------------------ # HTML Project Generation Script # - Generates HTML based on all filelist in SOCLABS_PROJECT_DIR/flist/project # A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. # # Contributors # # David Mapstone (d.a.mapstone@soton.ac.uk) # Copyright (c) 2023, SoC Labs (www.soclabs.org) #------------------------------------------------------------------------------------ import argparse import subprocess import os def top_mod_find(filelist): # Open Filelist f = open(filelist, "r") filelines = f.readlines() f.close() # Iterate over file and find first match for DESIGN_TOP in file comments for line in filelines: line_list = line.strip().split() if len(line_list) > 2: if (line_list[0] == "//") and (line_list[1] == "DESIGN_TOP"): return line_list[2] def bootrom_gen(): # Runs Bootrom generation script in NanoSoC Directory bootrom_scipt_dir = os.getenv("SOCLABS_NANOSOC_TECH_DIR") subprocess.run(["make","-C",bootrom_scipt_dir,"bootrom"]) def html_gen(filelist_path): filelist = os.path.basename(filelist_path) filelist_name = os.path.splitext(filelist)[0] print("Generating HTML for: "+filelist_name) # Find Top-level module name top_mod = top_mod_find(filelist_path) print(f"Top-level Module is: {top_mod}") # Work out output Directory outdir = os.getenv("SOCLABS_PROJECT_DIR")+"/html/"+filelist_name html_scipt_dir = os.getenv("SOCLABS_SOCTOOLS_FLOW_DIR")+"/bin/htmlgen" subprocess.run(["make","-C",html_scipt_dir,"gen_html","TOP_MODULE="+top_mod,"OUT_DIR="+outdir,"FILELIST="+filelist_path]) def project_gen(args): # Has filelist option been passed to script if args.filelist == None: # Generate bootrom bootrom_gen() # Find all filelist in project filelist directory # for filelist in os.listdir(os.getenv("SOCLABS_PROJECT_DIR")+"/flist/project"): filelist_path = os.getenv("SOCLABS_PROJECT_DIR")+"/flist/project/"+"top.flist" html_gen(filelist_path) else: if args.bootrom is True: # Generate bootrom bootrom_gen() # Generate HTML for given filelist html_gen(args.filelist) if __name__ == "__main__": # Capture Arguments from Command Line parser = argparse.ArgumentParser(description='Generates HTML based on all filelist in SOCLABS_PROJECT_DIR/flist/project') parser.add_argument("-f", "--filelist", type=str, help="Generate only from this List", required=False) parser.add_argument("-b", "--bootrom", action='store_true', help="Generate Bootrom first", required=False) parser.add_argument("-o", "--output", type=str, help="Output Filelist location", required=False) args = parser.parse_args() project_gen(args)