| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # |
| # Copyright 2020 The SkyWater PDK Authors. |
| # |
| # Use of this source code is governed by the Apache 2.0 |
| # license that can be found in the LICENSE file or at |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| import os |
| import pprint |
| import sys |
| import traceback |
| |
| from skywater_pdk import base, corners, drives |
| |
| |
| def process(cellpath): |
| assert os.path.exists(cellpath), cellpath |
| assert os.path.isdir(cellpath), cellpath |
| |
| files = [ |
| (f, os.path.abspath(os.path.join(cellpath, f))) |
| for f in os.listdir(cellpath)] |
| files.sort() |
| |
| dcell, fname = base.parse_pathname(cellpath) |
| assert isinstance(dcell, base.Cell), (cellpath, dcell, fname) |
| assert fname is None, (cellpath, dcell, fname) |
| extensions = set() |
| dcorners = set() |
| ddrives = set() |
| errors = [] |
| for fname, fpath in files: |
| print("Processing:", fname) |
| if fname in ('README.rst',): |
| continue |
| try: |
| fcell, fextra, fext = base.parse_filename(fpath) |
| except Exception as e: |
| traceback.print_exc() |
| errors.append(e) |
| assert isinstance(fcell, base.Cell), (fpath, fcell, fextra, ext) |
| |
| extensions.add(fext) |
| |
| assert fcell.library == dcell.library, (fcell, dcell) |
| if not fextra: |
| continue |
| |
| try: |
| fcorner = corners.parse_filename(fextra) |
| except Exception as e: |
| traceback.print_exc() |
| errors.append(e) |
| |
| try: |
| assert fcell.name.startswith(dcell.name), (fcell, dcell) |
| fdrive = fcell.name[len(dcell.name):] |
| |
| ddrives.add(drives.parse_drive(fdrive)) |
| except Exception as e: |
| traceback.print_exc() |
| errors.append(e) |
| |
| dcorners.add(fcorner) |
| |
| dcorners = list(sorted(dcorners)) |
| ddrives = list(sorted(ddrives)) |
| |
| print() |
| print(cellpath) |
| print('-'*75) |
| print('Cell:', dcell) |
| print('Cell drives:', ddrives) |
| print('Cell corners:') |
| pprint.pprint(dcorners) |
| print('File types:', extensions) |
| if errors: |
| raise ValueError("\n".join(errors)) |
| |
| |
| def main(args): |
| for a in args: |
| print() |
| print() |
| process(os.path.abspath(a)) |
| |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main(sys.argv[1:])) |