70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
import argparse
 | 
						|
import os
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    parser = argparse.ArgumentParser(
 | 
						|
        description="Script to generate SDT files from a XSA file"
 | 
						|
    )
 | 
						|
    parser.add_argument(
 | 
						|
        "-t",
 | 
						|
        "--tools",
 | 
						|
        # Required only if env var is not set
 | 
						|
        required=not bool(os.getenv("AMD_TOOLS")),
 | 
						|
        # Use env var if set
 | 
						|
        default=os.getenv("AMD_TOOLS"),
 | 
						|
        help="The path to the tool to use. Must point to a valid Vivado tools installation which"
 | 
						|
        "also provides xsct, for example a Vitis installation.\nThe directory where the path "
 | 
						|
        "points to should contain a shell script named settings64.sh.\n You can also set the "
 | 
						|
        "AMD_TOOLS env variable to set this.",
 | 
						|
    )
 | 
						|
    parser.add_argument(
 | 
						|
        "-x",
 | 
						|
        "--xsa",
 | 
						|
        help="Path to the input XSA file",
 | 
						|
        default="zedboard-rust/zedboard-rust.xsa",
 | 
						|
    )
 | 
						|
    parser.add_argument(
 | 
						|
        "-o",
 | 
						|
        "--out",
 | 
						|
        default="sdt_out",
 | 
						|
        help="Directory to store the generated SDT files",
 | 
						|
    )
 | 
						|
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    settings_script = os.path.join(args.tools, "settings64.sh")
 | 
						|
 | 
						|
    if not os.path.isfile(settings_script):
 | 
						|
        print(f"Invalid tool path {args.tools}, did not find settings file.")
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    # Source the settings script and check for xsdb availability
 | 
						|
    command = f"source {settings_script} && command -v xsct"
 | 
						|
    result = subprocess.run(
 | 
						|
        command,
 | 
						|
        shell=True,
 | 
						|
        capture_output=True,
 | 
						|
        executable="/bin/bash",
 | 
						|
    )
 | 
						|
 | 
						|
    if result.returncode != 0:
 | 
						|
        print("Error: 'xsct' could not be found after sourcing settings64.sh.")
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    xsct_script = "sdtgen.tcl"
 | 
						|
 | 
						|
    command = f"bash -c 'source {settings_script} && xsct {xsct_script} {args.xsa} {args.out} | tee xsct-output.log'"
 | 
						|
    subprocess.run(
 | 
						|
        command,
 | 
						|
        shell=True,
 | 
						|
        check=True,
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |