Fixed bugs with retrieving files in check_density.py and generate_fill.py, syntax fixes for check_antenna.py, added error checking for .rcfile to all scripts
diff --git a/sky130/custom/scripts/generate_fill.py b/sky130/custom/scripts/generate_fill.py
index 943920c..08209b3 100755
--- a/sky130/custom/scripts/generate_fill.py
+++ b/sky130/custom/scripts/generate_fill.py
@@ -93,10 +93,10 @@
user_project_path = arguments[0]
- magpath = os.path.split(user_project_path)[0]
+ magpath = os.getcwd()+'/'+os.path.split(user_project_path)[0]
if magpath == '':
magpath = os.getcwd()
-
+
if os.path.splitext(user_project_path)[1] != '.mag':
if os.path.splitext(user_project_path)[1] == '':
user_project_path += '.mag'
@@ -117,18 +117,29 @@
if '-dist' in optionlist:
distmode = True
- rcfile = magpath + '/.magicrc'
- if not os.path.isfile(rcfile):
- rcfile = None
-
+ # Searching for rcfile
+
+ rcfile_paths=[magpath+'/.magicrc','/$PDK_PATH/libs.tech/magic/sky130A.magicrc','/usr/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc']
+
+ rcfile=''
+
+ for rc_path in rcfile_paths:
+ if os.path.isfile(rc_path):
+ rcfile=rc_path
+ break
+
+ if rcfile=='':
+ print('Error: .magicrc file not found.')
+ sys.exit(1)
+
project = os.path.splitext(os.path.split(user_project_path)[1])[0]
topdir = os.path.split(magpath)[0]
gdsdir = topdir + '/gds'
hasgdsdir = True if os.path.isdir(gdsdir) else False
-
+
ofile = open(magpath + '/generate_fill.tcl', 'w')
-
+
print('#!/usr/bin/env wish', file=ofile)
print('drc off', file=ofile)
print('tech unlock *', file=ofile)
@@ -292,7 +303,7 @@
print('puts stdout "Ended: $endtime"', file=ofile)
print('quit -noprompt', file=ofile)
ofile.close()
-
+
myenv = os.environ.copy()
myenv['MAGTYPE'] = 'mag'
@@ -301,6 +312,7 @@
# print('This script will generate file ' + project + '_fill_pattern.gds')
print('This script will generate files ' + project + '_fill_pattern_x_y.gds')
print('Now generating fill patterns. This may take. . . quite. . . a while.', flush=True)
+
mproc = subprocess.run(['magic', '-dnull', '-noconsole',
'-rcfile', rcfile, magpath + '/generate_fill.tcl'],
stdin = subprocess.DEVNULL,
@@ -309,6 +321,7 @@
cwd = magpath,
env = myenv,
universal_newlines = True)
+
if mproc.stdout:
for line in mproc.stdout.splitlines():
print(line)
@@ -318,7 +331,8 @@
print(line)
if mproc.returncode != 0:
print('ERROR: Magic exited with status ' + str(mproc.returncode))
-
+
+
if distmode:
# If using distributed mode, then run magic on each of the generated
# layout files