Skip to content

Commit 7e1d457

Browse files
committed
Disable PDK bundle release path and harden Magic launch
1 parent 1fae70f commit 7e1d457

6 files changed

Lines changed: 64 additions & 19 deletions

File tree

app/core/magic_launcher.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,22 @@ def build(self, target_path: str | None = None) -> MagicLaunchSpec:
3030
env = os.environ.copy()
3131
command = [self.settings.tool_paths.magic]
3232
cwd: str | None = None
33+
magic_rc: Path | None = None
34+
magic_dir: Path | None = None
3335

3436
sky130a = self.validator._find_sky130a(self.settings)
3537
if sky130a is not None:
3638
env["PDK_ROOT"] = str(sky130a.parent)
3739
env["SKY130A"] = str(sky130a)
40+
env.setdefault("MAGTYPE", "mag")
41+
magic_dir = sky130a / "libs.tech" / "magic"
42+
derived_rc = magic_dir / "sky130A.magicrc"
43+
if derived_rc.is_file():
44+
magic_rc = derived_rc
3845

39-
magic_rc = Path(self.settings.pdk_paths.magic_rc).expanduser() if self.settings.pdk_paths.magic_rc else None
46+
configured_rc = Path(self.settings.pdk_paths.magic_rc).expanduser() if self.settings.pdk_paths.magic_rc else None
47+
if configured_rc and configured_rc.is_file():
48+
magic_rc = configured_rc
4049
if magic_rc and magic_rc.is_file():
4150
command.extend(["-rcfile", str(magic_rc.resolve())])
4251

@@ -50,5 +59,7 @@ def build(self, target_path: str | None = None) -> MagicLaunchSpec:
5059
else:
5160
cwd = str(target.parent)
5261
command.append(str(target))
62+
elif magic_dir and magic_dir.is_dir():
63+
cwd = str(magic_dir)
5364

5465
return MagicLaunchSpec(command=command, cwd=cwd, env=env)

app/data/dependency_manifest.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@
5656
"--enable-sky130-pdk"
5757
],
5858
"bundle": {
59-
"enabled": true,
59+
"enabled": false,
6060
"name": "tt-pdk-sky130a",
61-
"version": "0.2.0-beta.4",
61+
"version": "",
6262
"install_root": "~/pdk",
6363
"cache_root": "~/.cache/sky130-flow-gui/pdk",
6464
"minimum_free_gb": 10,
65-
"asset_url": "https://github.com/ROMERUU-dev/sky130-flow-gui/releases/download/v0.2.0-beta.4/tt-pdk-sky130a_0.2.0-beta.4.tar.gz",
66-
"asset_filename": "tt-pdk-sky130a_0.2.0-beta.4.tar.gz",
67-
"asset_sha256": "25acfcdaace6e6b8ca0ca828407ecf1a896a1c0e04560465d2259cda8b9b4c24"
65+
"asset_url": "",
66+
"asset_filename": "",
67+
"asset_sha256": ""
6868
},
6969
"preferred_sources": [
7070
"settings",
@@ -137,15 +137,15 @@
137137
"--enable-sky130-pdk"
138138
],
139139
"bundle": {
140-
"enabled": true,
140+
"enabled": false,
141141
"name": "tt-pdk-sky130a",
142-
"version": "0.2.0-beta.4",
142+
"version": "",
143143
"install_root": "~/pdk",
144144
"cache_root": "~/.cache/sky130-flow-gui/pdk",
145145
"minimum_free_gb": 10,
146-
"asset_url": "https://github.com/ROMERUU-dev/sky130-flow-gui/releases/download/v0.2.0-beta.4/tt-pdk-sky130a_0.2.0-beta.4.tar.gz",
147-
"asset_filename": "tt-pdk-sky130a_0.2.0-beta.4.tar.gz",
148-
"asset_sha256": "25acfcdaace6e6b8ca0ca828407ecf1a896a1c0e04560465d2259cda8b9b4c24"
146+
"asset_url": "",
147+
"asset_filename": "",
148+
"asset_sha256": ""
149149
},
150150
"preferred_sources": [
151151
"settings",

app/ui/preferences_tab.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,16 @@ def _build_ui(self) -> None:
115115
self._add_path_row(form, "pdk.klayout_antenna_deck", "KLayout antenna deck", pdk["klayout_antenna_deck"])
116116

117117
general_layout.addLayout(form)
118+
pdk_usage_note = QLabel(
119+
pick(
120+
self.lang,
121+
"Uso real de estas rutas PDK: PDK_ROOT y SKY130A se usan para detección y contexto general; Magic rcfile lo usan Extracción y Magic; Netgen setup lo usa LVS; KLayout antenna deck lo usa Antena.",
122+
"Actual use of these PDK paths: PDK_ROOT and SKY130A are used for detection and general context; Magic rcfile is used by Extraction and Magic; Netgen setup is used by LVS; KLayout antenna deck is used by Antenna.",
123+
)
124+
)
125+
pdk_usage_note.setWordWrap(True)
126+
pdk_usage_note.setStyleSheet("color: #667085;")
127+
general_layout.addWidget(pdk_usage_note)
118128

119129
btns = QHBoxLayout()
120130
save = QPushButton(pick(self.lang, "Guardar preferencias", "Save Preferences"))

app/ui/setup_tab.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -677,18 +677,20 @@ def refresh_pdk_bundle_preflight(self) -> None:
677677
pick(
678678
self.lang,
679679
f"Bundle: {summary.bundle_name}\n"
680-
f"Versión: {summary.bundle_version or 'pendiente'}\n"
681-
f"Instalación TT: {summary.target_sky130a}\n"
680+
f"Versión: {summary.bundle_version or 'no publicado'}\n"
681+
f"Instalación canónica: {summary.target_sky130a}\n"
682682
f"Cache: {summary.cache_root}\n"
683683
f"Espacio libre: {summary.free_bytes / (1024 ** 3):.1f} GB\n"
684684
f"Asset configurado: {'sí' if bool(summary.asset_url and summary.asset_filename) else 'no'}\n"
685+
f"Publicado por la app: {'sí' if summary.enabled else 'no'}\n"
685686
f"Listo para instalar: {'sí' if summary.ready else 'no'}",
686687
f"Bundle: {summary.bundle_name}\n"
687-
f"Version: {summary.bundle_version or 'pending'}\n"
688-
f"TT install: {summary.target_sky130a}\n"
688+
f"Version: {summary.bundle_version or 'not published'}\n"
689+
f"Canonical install: {summary.target_sky130a}\n"
689690
f"Cache: {summary.cache_root}\n"
690691
f"Free space: {summary.free_bytes / (1024 ** 3):.1f} GB\n"
691692
f"Asset configured: {'yes' if bool(summary.asset_url and summary.asset_filename) else 'no'}\n"
693+
f"Published by the app: {'yes' if summary.enabled else 'no'}\n"
692694
f"Ready to install: {'yes' if summary.ready else 'no'}",
693695
)
694696
)

tests/test_dependency_manifest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ def test_loads_default_channel_and_packages(self) -> None:
2323
self.assertEqual(channel.pdk_managed_root, "~/pdk")
2424
self.assertEqual(channel.pdk_bundle_install_root, "~/pdk")
2525
self.assertEqual(channel.pdk_bundle_name, "tt-pdk-sky130a")
26-
self.assertTrue(channel.pdk_bundle_enabled)
27-
self.assertEqual(channel.pdk_bundle_version, "0.2.0-beta.4")
28-
self.assertTrue(channel.pdk_bundle_asset_url.endswith("tt-pdk-sky130a_0.2.0-beta.4.tar.gz"))
26+
self.assertFalse(channel.pdk_bundle_enabled)
27+
self.assertEqual(channel.pdk_bundle_version, "")
28+
self.assertEqual(channel.pdk_bundle_asset_url, "")
2929

3030
def test_unknown_channel_raises(self) -> None:
3131
manifest = DependencyManifest()

tests/test_magic_launcher.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,25 @@ def test_build_injects_pdk_context_and_magicrc(self) -> None:
4141
self.assertEqual(spec.cwd, str(layout_dir.resolve()))
4242
self.assertEqual(spec.env["PDK_ROOT"], str(sky130a.parent))
4343
self.assertEqual(spec.env["SKY130A"], str(sky130a))
44+
self.assertEqual(spec.env["MAGTYPE"], "mag")
45+
46+
def test_build_derives_magicrc_from_sky130a_when_not_explicitly_configured(self) -> None:
47+
with tempfile.TemporaryDirectory() as tmpdir:
48+
sky130a = Path(tmpdir) / "pdk" / "sky130A"
49+
magic_dir = sky130a / "libs.tech" / "magic"
50+
magic_dir.mkdir(parents=True)
51+
magic_rc = magic_dir / "sky130A.magicrc"
52+
magic_rc.write_text("# magicrc\n", encoding="utf-8")
53+
54+
settings = AppSettings()
55+
settings.tool_paths.magic = "magic"
56+
settings.pdk_paths.sky130a = str(sky130a)
57+
58+
with mock.patch.dict(os.environ, {}, clear=True):
59+
spec = MagicLaunchBuilder(settings).build()
60+
61+
self.assertEqual(spec.command, ["magic", "-rcfile", str(magic_rc.resolve())])
62+
self.assertEqual(spec.cwd, str(magic_dir.resolve()))
4463

4564
def test_build_opens_mag_file_by_cell_name_in_parent_directory(self) -> None:
4665
with tempfile.TemporaryDirectory() as tmpdir:
@@ -51,7 +70,10 @@ def test_build_opens_mag_file_by_cell_name_in_parent_directory(self) -> None:
5170
settings = AppSettings()
5271
settings.tool_paths.magic = "magic"
5372

54-
with mock.patch.dict(os.environ, {}, clear=True):
73+
with mock.patch.dict(os.environ, {}, clear=True), mock.patch(
74+
"app.core.magic_launcher.EnvValidator._find_sky130a",
75+
return_value=None,
76+
):
5577
spec = MagicLaunchBuilder(settings).build(str(mag_path))
5678

5779
self.assertEqual(spec.command, ["magic", "tt_um_demo"])

0 commit comments

Comments
 (0)