Contributing to the ADK

The ecosystem is spread across several repositories, and the first question is usually which one a change belongs in. The ecosystem has the ownership table; the short version is that each repository owns exactly one contract.

Where a change belongs

If you want to

Change

Support a new interposer substrate

Add one adapter file to IHP-GmbH/IHP-Open-ADK. Do not modify the rules.

Support a new bumping vendor or method

Add an interconnect adapter to IHP-GmbH/IHP-Open-ADK, and the method parameters to IHP-GmbH/IHP-Interconnect-IntM4TM2.

Change what a rule checks

IHP-GmbH/IHP-Open-ADK, and update both the KLayout deck and the KiCad DRU generator so the two toolchains stay in agreement.

Change a field in the assembly file

IHP-GmbH/chiplet-spec first, since it owns the format, then the readers.

Fix a converter, the layout tool or the viewer

The relevant tool repository. IHP-GmbH/ADK-Tools only pins revisions.

Pin a new revision of a tool

IHP-GmbH/ADK-Tools.

Adding an adapter

This is the most common contribution and it is deliberately small. An adapter declares the abstract inputs the rules need, in terms of one PDK’s layers, and nothing else. It declares no rules, does not touch the chiplet boundary, and imports no other file.

Adapter contract is the normative specification and includes a worked example of the shipped IntM4TM2 adapter.

Rules and their two consumers

The parameter registries in config/ are shared between the KLayout deck and the KiCad DRU generator, so that the design-time check and the layout check agree on what they are checking. A change to a rule value belongs in the registry, not in either consumer.

Not every rule can be mirrored into KiCad. KiCad DRU generation has the coverage matrix, and a change that widens or narrows that coverage should update it.

Tests

The ADK test suite is deliberately interposer-agnostic and PDK-free. DRC tests use a synthetic adapter that declares its attachment region on an arbitrary layer, and every GDS fixture is synthesised at test time together with its boundary manifest sidecar. Nothing depends on a committed binary layout or on a PDK installation.

Run it from the ADK checkout:

pytest tests/

Modules that shell out to KLayout skip cleanly when the klayout command is not on PATH, so a bare checkout still exercises the pure-Python parts. A contribution that adds a rule should add a fixture that triggers it and one that does not.

Two invariants the suite enforces are worth knowing about before you change anything structural. The VERSION file and the version keys in every config/*.json must agree with the latest released changelog entry. And a run with no interconnect adapter must produce output identical to the interposer only path, which is what makes the interconnect axis safe to add to an existing design.

The container as the integration gate

IHP-GmbH/ADK-Tools pins one exact, verified combination of every tool per commit, and its verify stage decides whether an image is tagged. To try a branch of one tool against the rest of the pinned stack, check it out in the corresponding submodule and rebuild. See The ADK-Tools image.

Commit conventions

English, concise, imperative mood, matching the existing history. One logical change per commit. Keep each tool revision bump in its own commit so that a regression bisects cleanly.