From a48b1c74466ee675f80d82c23321b7a7cddf5969 Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Tue, 5 Nov 2024 14:54:06 +0200 Subject: [PATCH] feat(configure): support for brotli-compressed GDS files Recently, we started compressing GDS files larger than 25 MB due to GitHub REST API blob size limitations. --- pyproject.toml | 1 + requirements.txt | 2 ++ shuttle.py | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 5918018..894a23d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,7 @@ name = "tt-support-tools" requires-python = ">=3.11" dynamic = ["version"] dependencies = [ + "brotli", "CairoSVG", "chevron", "cocotb", diff --git a/requirements.txt b/requirements.txt index 57bab90..f9217b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,8 @@ # anyio==4.4.0 # via httpx +brotli==1.1.0 + # via tt-support-tools (pyproject.toml) cairocffi==1.7.0 # via cairosvg cairosvg==2.7.1 diff --git a/shuttle.py b/shuttle.py index ad3b698..31e7681 100644 --- a/shuttle.py +++ b/shuttle.py @@ -5,6 +5,7 @@ import shutil from typing import List, Set +import brotli # type: ignore import git import yaml @@ -19,6 +20,15 @@ def copy_print(src: str, dest: str): shutil.copy2(src, dest) +def copy_print_decompress(src: str, dest: str): + os.makedirs(os.path.dirname(dest), exist_ok=True) + with open(src, "rb") as f: + data = f.read() + with open(dest, "wb") as f: + f.write(brotli.decompress(data)) + logging.info(f" -> {dest} (decompressed)") + + def copy_print_glob(pattern: str, dest_dir: str): for file in glob.glob(pattern): copy_print(file, os.path.join(dest_dir, os.path.basename(file))) @@ -187,6 +197,12 @@ def copy_mux_macro(self, source_dir: str, name: str): def copy_macros(self): logging.info("copying macros to tt_top:") copy_print_glob("projects/*/*.gds", "tt-multiplexer/ol2/tt_top/gds") + # Find all the ".gds.br" files, decompress them and copy them to the destination + for file in glob.glob("projects/*/*.gds.br"): + decompressed_name = os.path.splitext(os.path.basename(file))[0] + copy_print_decompress( + file, os.path.join("tt-multiplexer/ol2/tt_top/gds", decompressed_name) + ) copy_print_glob("projects/*/*.lef", "tt-multiplexer/ol2/tt_top/lef") copy_print_glob("projects/*/*.v", "tt-multiplexer/ol2/tt_top/verilog") macros = ["tt_um_chip_rom", "tt_ctrl", "tt_mux"]