blob: f9f10608aff213e378f67845d9981c3424ebb481 [file] [log] [blame] [edit]
import json
import argparse
from pathlib import Path
import os
import re
def list_nonzero(data, origkey=None):
result = []
if type(data) in [str, int, float]:
try:
val = float(data)
if val != 0:
result.append((origkey,val))
else:
return result
except:
return result
elif type(data) == list:
for val in data:
result.extend(list_nonzero(val, origkey))
return result
elif type(data) == dict:
for key, val in data.items():
result.extend(list_nonzero(val, key))
return result
else:
raise Exception(f'Unsupported type: {type(data)}')
return result
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
"input_dir",
help="Directory containing Liberty files",
type=Path)
args = parser.parse_args()
files = sorted(args.input_dir.rglob('*.specify.json'))
for f in files:
print(f'====> {f}')
with open(f, 'r') as dat:
data = json.load(dat)
nonzerovalues = sorted(list(set(list_nonzero(data))))
par = f.parent
for val in nonzerovalues:
# os.system(f'rg "\\"{re.escape(str(float(val)))}\\"" {par} --glob "*cell.json"')
print(f'PARAM {val[0]} = {val[1]}')
# os.system(f'rg " : {re.escape(str(float(val[1])))};" {par} --glob "*cell.lib" -NI | sort | uniq -c')
os.system(f'grep -r --no-filename " : {re.escape(str(float(val[1])))}" --include \*.cell.lib --include \*.wrap.lib {par} | sort | uniq -c')