| # C/C++ Rules Design & Bazel rules_cc Integration |
| |
| ## Concise `cc_shared_library` Interface & Export Rules |
| * In `cc_shared_library`: |
| * Targets directly placed in `deps` are **automatically exported** by Bazel; |
| they do not need to be listed in `exports_filter`. |
| * `exports_filter` is defined in `rules_cc` as an `attr.string_list()`, **not** |
| a `Label` attribute. Passing Starlark `Label` objects directly causes an |
| immediate Bazel analysis type error. |
| * **Citation**: [rules_cc `cc_shared_library.bzl`](https://github.com/bazelbuild/rules_cc/blob/main/cc/private/rules_impl/cc_shared_library.bzl) |
| (*"exports_filter is a list of strings attribute"*). |
| |
| ## macOS Dynamic Lookup Link Flag |
| * Apple's `ld64`/`lld` linkers require `-undefined dynamic_lookup` in |
| `user_link_flags` on macOS so CPython C-API symbols remain unresolved at |
| link time and resolve dynamically at runtime. |
| |
| ## Linux Platform Tag Composition |
| * Linux platform tags are formatted as `{platform_machine}-linux-{libc}` (e.g., |
| `x86_64-linux-gnu` or `aarch64-linux-musl`). |
| * **Citation**: [PEP 600 — Perennial manylinux](https://peps.python.org/pep-0600/) |
| & [PEP 656 — musllinux](https://peps.python.org/pep-0656/). |