libcxx Vendor Configuration

Source identity

Captured material

Vendors can build libc++, libc++abi, and unwind runtimes with an installed compiler or a newly built Clang. Static and shared library production are configurable. LIBCXX_HERMETIC_STATIC_LIBRARY hides static runtime symbols when embedding the runtime in a shared library. ABI version, ABI namespace, and configuration macros must match the built runtime.

Availability markup and deployment configuration affect whether library facilities can be used on older systems. A private installation prefix avoids replacing the operating system's own libc++. Merely choosing static linkage does not prove support for every old OS or compatibility of C++ objects crossing module boundaries.

Decision-relevant context

Source locator: The default build; The Bootstrapping build; General purpose options; ABI Specific Options; Availability Markup.

The default CMake entry is runtimes, with LLVM_ENABLE_RUNTIMES selecting libc++, libc++abi, and libunwind. The bootstrap entry is llvm, enabling Clang and runtime targets before building/testing/installing them. These are alternative build arrangements, not proof that the current sources accept an old Apple compiler.

LIBCXX_ENABLE_SHARED and LIBCXX_ENABLE_STATIC both default on; at least one is required. LIBCXX_HERMETIC_STATIC_LIBRARY defaults off and suppresses exported static-libc++ symbols when enabled. ABI version/namespace choices need matching builds. Changing corresponding header macros without rebuilding can create mismatches.

CMAKE_INSTALL_PREFIX selects a private installation. LLVM warns that replacing the OS copy may break the system. Availability markup constrains use of facilities absent on the deployment OS; suppressing a diagnostic cannot supply a missing runtime function.

Applicability and limits

Pin the exact LLVM revision, build configuration, SDK, and patches before claiming support. This captured account is not a complete compiler bootstrap recipe; the required recipe and per-OS execution evidence are release gates.

Project interpretation

A private runtime is a toolchain input whose revision, flags, headers, ABI, and deployment target must travel together. Hiding symbols limits collisions; it is not a general guarantee for C++ objects crossing independently built module boundaries.

Omissions and evidence gaps

No pinned LLVM source checkout, full configuration recipe, SDK, compiler patches, or per-OS test logs are archived. Windows and alternative Linux ABI-provider instructions are outside the project decision.

Preservation

This UTF-8 Markdown record is readable without a browser, script, account, or network. Preserve it with the repository and SHA256SUMS; retain superseded records when replacing a source version. Original URLs identify provenance, not a runtime dependency.

Review: 2026-09-26 UTC. Original source re-read against the cited local sections; added locators, conditions, and explicit gaps. No runtime validation is inferred. This account expands the earlier summary without replacing its historical date.

Source document