scripts/liberty: Adds output directory customization
Adds the output flags -o and --output_directory to control the output of the liberty files.
diff --git a/scripts/python-skywater-pdk/skywater_pdk/liberty.py b/scripts/python-skywater-pdk/skywater_pdk/liberty.py
index 7fb314f..6cbda80 100755
--- a/scripts/python-skywater-pdk/skywater_pdk/liberty.py
+++ b/scripts/python-skywater-pdk/skywater_pdk/liberty.py
@@ -151,19 +151,30 @@
return fname
-def top_corner_file(libname, corner, corner_type: TimingType):
+def top_corner_file(libname, corner, corner_type: TimingType, directory_prefix = "timing"):
"""
>>> top_corner_file("sky130_fd_sc_hd", "ff_100C_1v65", TimingType.ccsnoise)
'timing/sky130_fd_sc_hd__ff_100C_1v65_ccsnoise.lib.json'
>>> top_corner_file("sky130_fd_sc_hd", "ff_100C_1v65", TimingType.basic)
'timing/sky130_fd_sc_hd__ff_100C_1v65.lib.json'
+ >>> top_corner_file("sky130_fd_sc_hd", "ff_100C_1v65", TimingType.basic, "")
+ 'sky130_fd_sc_hd__ff_100C_1v65.lib.json'
"""
assert corner_type.singular, (libname, corner, corner_type, corner_type.types())
- return "timing/{libname}__{corner}{corner_type}.lib.json".format(
- libname=libname,
- corner=corner, corner_type=corner_type.file)
+
+ if directory_prefix:
+ return "{prefix}/{libname}__{corner}{corner_type}.lib.json".format(
+ libname=libname,
+ corner=corner,
+ corner_type=corner_type.file,
+ prefix = directory_prefix)
+
+ return "{libname}__{corner}{corner_type}.lib.json".format(
+ libname=libname,
+ corner=corner,
+ corner_type=corner_type.file)
def collect(library_dir) -> Tuple[Dict[str, TimingType], List[str]]:
@@ -307,9 +318,11 @@
remove_ccsnoise_from_library = remove_ccsnoise_from_dict
-def generate(library_dir, lib, corner, ocorner_type, icorner_type, cells):
- top_fname = top_corner_file(lib, corner, ocorner_type).replace('.lib.json', '.lib')
- top_fpath = os.path.join(library_dir, top_fname)
+def generate(library_dir, lib, corner, ocorner_type, icorner_type, cells, output_directory):
+ output_directory_prefix = None if output_directory else "timing"
+ top_fname = top_corner_file(lib, corner, ocorner_type, output_directory_prefix).replace('.lib.json', '.lib')
+ output_directory = output_directory if output_directory else library_dir
+ top_fpath = os.path.join(output_directory, top_fname)
top_fout = open(top_fpath, "w")
def top_write(lines):
@@ -1090,6 +1103,11 @@
help="Include verbose debug output on the console.",
action='store_true',
default=False)
+ parser.add_argument(
+ "-o",
+ "--output_directory",
+ help="Sets the parent directory of the liberty files",
+ default="")
args = parser.parse_args()
if args.debug:
@@ -1146,7 +1164,7 @@
generate(
libdir, lib,
corner, output_corner_type, input_corner_type,
- corner_cells,
+ corner_cells, args.output_directory
)
return 0