From d052447fa38314c714908cb167dafbc6d71e7a57 Mon Sep 17 00:00:00 2001 From: Gonsolo Date: Fri, 30 Jan 2026 12:54:50 +0100 Subject: [PATCH] feat(project): add `--no-docker` option (#150) Contributed by @gonsolo --- project.py | 18 ++++++++++++++---- tt_tool.py | 12 +++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/project.py b/project.py index 7fcb0bd..5482009 100644 --- a/project.py +++ b/project.py @@ -508,7 +508,7 @@ class Project: shutil.copyfile("golden_config.json", os.path.join(self.src_dir, "config.json")) self.harden() - def harden(self): + def harden(self, no_docker: bool = False): cwd = os.getcwd() os.chdir(self.local_dir) @@ -523,7 +523,12 @@ class Project: arg_progress = "--hide-progress-bar" if "CI" in os.environ else "" arg_pdk_root = '--pdk-root "$PDK_ROOT"' if "PDK_ROOT" in os.environ else "" arg_pdk = self.tech.librelane_pdk_args - harden_cmd = f"python -m librelane {arg_pdk_root} --docker-no-tty --dockerized {arg_pdk_root} {arg_pdk} --run-tag wokwi --force-run-dir runs/wokwi {arg_progress} src/config_merged.json" + + # Nix/No-Docker support: Conditionally include docker flags + arg_docker = "" if no_docker else f"{arg_pdk_root} --docker-no-tty --dockerized" + + harden_cmd = f"python -m librelane {arg_docker} {arg_pdk_root} {arg_pdk} --run-tag wokwi --force-run-dir runs/wokwi {arg_progress} src/config_merged.json" + env = os.environ.copy() logging.debug(harden_cmd) p = subprocess.run(harden_cmd, shell=True, env=env) @@ -610,9 +615,14 @@ class Project: os.path.join(stats_dir, "synthesis-stats.txt"), ) - def run_custom_librelane_flow(self, flow_name: str): + def run_custom_librelane_flow(self, flow_name: str, no_docker: bool = False): logging.info(f"Running {flow_name} for {self}") - ll_cmd = f"python -m librelane --docker-no-tty --dockerized {self.tech.librelane_pdk_args} --run-tag wokwi --force-run-dir {self.local_dir}/runs/wokwi {self.local_dir}/src/config_merged.json --flow {flow_name}" + + # Nix/No-Docker support: Conditionally include docker flags + arg_docker = "" if no_docker else "--docker-no-tty --dockerized" + + ll_cmd = f"python -m librelane {arg_docker} {self.tech.librelane_pdk_args} --run-tag wokwi --force-run-dir {self.local_dir}/runs/wokwi {self.local_dir}/src/config_merged.json --flow {flow_name}" + logging.debug(ll_cmd) p = subprocess.run(ll_cmd, shell=True) if p.returncode != 0: diff --git a/tt_tool.py b/tt_tool.py index 8729656..ab1bbe9 100755 --- a/tt_tool.py +++ b/tt_tool.py @@ -106,6 +106,12 @@ if __name__ == "__main__": ) # Hardening and submission + parser.add_argument( + "--no-docker", + help="Do not use Docker for LibreLane commands", + action="store_true", + default=False, + ) parser.add_argument( "--create-user-config", help="create the user_config.json file with top module and source files", @@ -203,16 +209,16 @@ if __name__ == "__main__": project.create_user_config() if args.harden: - project.harden() + project.harden(no_docker=args.no_docker) if args.create_tt_submission: project.create_tt_submission() if args.open_in_klayout: - project.run_custom_librelane_flow("OpenInKLayout") + project.run_custom_librelane_flow("OpenInKLayout", no_docker=args.no_docker) if args.open_in_openroad: - project.run_custom_librelane_flow("OpenInOpenROAD") + project.run_custom_librelane_flow("OpenInOpenROAD", no_docker=args.no_docker) if args.create_pdf: project.create_project_datasheet(args.template_version)