| #!/usr/bin/env python3 |
| |
| import os |
| import subprocess |
| import sys |
| import time |
| |
| libraries = { |
| "sky130_fd_pr": 'SKY130 Primitive Models and Cells', |
| "sky130_fd_io": 'IO and periphery cells provided by the SkyWater foundry.', |
| |
| # |
| "sky130_fd_sc_hd": 'SKY130 High Density Digital Standard Cells (SkyWater Provided)', |
| "sky130_fd_sc_hdll": 'SKY130 High Density Low Leakage Digital Standard Cells (SkyWater Provided)', |
| # |
| "sky130_fd_sc_hs": 'SKY130 High Speed Digital Standard Cells (SkyWater Provided)', |
| "sky130_fd_sc_ms": 'SKY130 Medium Speed Digital Standard Cells (SkyWater Provided)', |
| "sky130_fd_sc_ls": 'SKY130 Low Speed Digital Standard Cells (SkyWater Provided)', |
| # |
| "sky130_fd_sc_hvl": 'SKY130 High Voltage Digital Standard Cells (SkyWater Provided)', |
| "sky130_fd_sc_lp": 'SKY130 Low Power Digital Standard Cells (SkyWater Provided)', |
| } |
| |
| |
| def run(cmd, **kw): |
| sys.stdout.flush() |
| sys.stderr.flush() |
| print(cmd, '-'*5, flush=True) |
| subprocess.check_call(cmd, shell=True, stderr=subprocess.STDOUT, **kw) |
| print('-'*5, flush=True) |
| sys.stdout.flush() |
| sys.stderr.flush() |
| |
| |
| DATE = None # 'Mon Oct 06 16:55:02 2020 -0700' |
| |
| def git(cmd, gitdir, can_fail=False, **kw): |
| env = dict(os.environ) |
| if DATE: |
| env['GIT_AUTHOR_DATE'] = DATE |
| env['GIT_COMMITTER_DATE'] = DATE |
| env['GIT_COMMITTER_NAME'] = "Tim 'mithro' Ansell" |
| env['GIT_COMMITTER_EMAIL'] = 'tansell@google.com' |
| |
| if 'push' in cmd: |
| cmd += ' --verbose --progress' |
| |
| i = 0 |
| while True: |
| try: |
| run('git '+cmd, cwd=gitdir, env=env, **kw) |
| break |
| except subprocess.CalledProcessError as e: |
| if can_fail: |
| return False |
| i += 1 |
| if i < 5: |
| time.sleep(10) |
| continue |
| raise |
| |
| |
| def out_v(v, versions): |
| if (0,0,0) in versions: |
| return (v[0],v[1],v[2]+1) |
| return v |
| |
| |
| def previous_v(v, versions): |
| assert v in versions, (v, versions) |
| vers = [(0,0,0)]+[out_v(x, versions) for x in list(versions)] |
| ov = out_v(v, versions) |
| assert ov in vers, (ov, vers) |
| i = vers.index(ov) |
| assert i > 0, (i, ov, vers) |
| return vers[i-1] |