blob: 22e8dc4753ceeedf7e959e510a559193c0534bd9 [file] [log] [blame] [edit]
#!/usr/bin/env python3
# All credits go to https://github.com/The-OpenROAD-Project/OpenROAD-flow/blob/master/flow/util/mergeLef.py
# Efabless doesn't own this script
import re
import sys
import os
import argparse # argument parsing
# WARNING: this script expects the tech lef first
# Parse and validate arguments
# ==============================================================================
parser = argparse.ArgumentParser(
description='Merges lefs together')
parser.add_argument('--inputLef', '-i', required=True,
help='Input Lef', nargs='+')
parser.add_argument('--outputLef', '-o', required=True,
help='Output Lef')
args = parser.parse_args()
print(os.path.basename(__file__),": Merging LEFs")
f = open(args.inputLef[0])
content = f.read()
f.close()
# Remove Last line ending the library
content = re.sub("END LIBRARY","",content)
lefs = args.inputLef[1:]
if len(lefs) == 1:
lefs = lefs[0].split()
# Iterate through additional lefs
for lefFile in lefs:
f = open(lefFile)
snippet = f.read()
f.close()
# Match the sites
pattern = r"^SITE.*?^END\s\S+"
m = re.findall(pattern, snippet, re.M | re.DOTALL)
print(os.path.basename(lefFile) + ": SITEs matched found: " + str(len(m)))
content += "\n".join(m)
# Match the macros
pattern = r"^MACRO.*?^END\s\S+"
m = re.findall(pattern, snippet, re.M | re.DOTALL)
print(os.path.basename(lefFile) + ": MACROs matched found: " + str(len(m)))
content += "\n" + "\n".join(m)
content += "\nEND LIBRARY"
f = open(args.outputLef, "w")
f.write(content)
f.close()
print(os.path.basename(__file__),": Merging LEFs complete")