.known-couplings/llvm-tools-flag.md
make libs llvm_tools=false (Unix) / .\make.ps1 -Command libs -LlvmTools false (Windows) builds LLVM without its command-line tools; lib/CMakeLists.txt maps PONY_LLVM_TOOLS to LLVM_BUILD_TOOLS. CI passes this on every libs build to keep the cached build/libs small (the tools are ~1.6 GB of bin/ that ponyc never invokes). The flag value lives in the workflow run: line, not in a hashed file, so the libs cache identity (package = platform + builder date; tag = hashFiles('Makefile' | 'make.ps1', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') — see the GHCR libs cache coupling in ghcr-libs-cache.md) does not distinguish a tools-on build from a tools-off one. That is safe today only because every CI libs build is tools-off. If you add a CI job that builds libs with tools (e.g. to exercise runtime-bitcode, which needs llvm-link), it will pull — and the warmer would overwrite — the tools-off artifact under the same package:tag; give that job a distinct identity segment (e.g. a tools-state suffix on the package name) so the two can't collide. Keep the three flag spellings (Makefile, make.ps1, lib/CMakeLists.txt) in sync. The GHCR libs cache that consumes this artifact is documented in ghcr-libs-cache.md.