ADR 0004 — Private PDK testing track

Status: Accepted. Plumbing tracked in the phase-0 plan.

Context

Some contributors and operators have access to commercial PDKs (GlobalFoundries, TSMC, and others) under NDA or licensing agreements that prohibit public redistribution of PDK files. Whether a given contributor has access is itself typically under NDA and not publicly known.

Commercial PDK Liberty libraries are substantially richer and quirkier than open-source alternatives — they include cell variants, conditional timing arcs, vendor-specific annotations, and characterization detail not present in SKY130 or AIGPDK. Several parser bugs live only on commercial PDK output.

SKY130-only coverage is insufficient for a sim tool used on commercial flows, and adding commercial PDK files to a public repository is not an option regardless of who operates the project.

The standard industry pattern for testing against proprietary PDKs is environment-gated test suites: tests run when the contributor has licensed access, and skip cleanly when they don't.

Decision

Establish a private PDK test track gated on per-PDK environment variables (e.g. GF130_PDK_PATH, TSMC_PDK_PATH, and similar — one per PDK).

  • Tests check for the required env var(s) and skip with a clear "PDK not available" message when unset.
  • When env vars point to a readable PDK directory, tests execute fully.
  • Only the test harness, expected structural outputs, and IR fixtures (where the PDK vendor licensing permits) are committed.
  • No PDK-derived artifacts (.lib, .sdf, .spef, characterization data) are committed to the public repository under any circumstances.
  • CI runners with configured PDK access execute the private track; public PRs from non-licensed contributors see the private tests as skipped, not as failures. Which runners have access is determined by whoever operates CI; this ADR does not name specific organisations.

The timing IR (ADR 0002) makes this feasible: converter output and diff results can be checked in as fixtures where they contain no PDK-licensed data. Expected behaviour can be asserted in terms of IR structure rather than in terms of specific cell timings that would leak characterization data.

Consequences

  • Contributors without PDK access cannot locally reproduce PDK-specific bugs. They rely on maintainer CI for validation.
  • A separate setup doc for licensed contributors is required (not public). Points at env-var configuration, test runner invocation, and PDK-file staging expectations.
  • Fixture schema must be PDK-agnostic enough that structural assertions don't implicitly leak cell-characterization data. Review process must check new fixtures against this rule before merge.
  • Bugs found via private PDK testing are, where possible, distilled into minimal public reproducers. The private track is not a place to park unreviewable tests — every private test should ideally surface a public fixture once the bug's essence is extracted.
  • CI cost rises (licensed runners). Runs are nightly or pre-release rather than per-PR.
  • ../project-scope.md — validation constraint.
  • ../timing-correctness.md — requirement R5.
  • ADR 0002 — timing IR (enables portable fixtures).