Allow the include scanner to resolve generated (output-directory) toolchain headers.
Currently, we can't use a generated directory for the C++ toolchain sysroot because the include scanner will discard all of its headers. The problem is that the scanner only resolves headers located under the output directory when they are a "declared" header (tracked in IncludeScanningHeaderData).
This CL teaches the scanner to treat the toolchain's own compiler_files as resolvable.
- CppCompileActionBuilder folds ccToolchain.getCompilerFiles() into the action's
prunable headers when include scanning is on, so the generated headers are
legitimate discoverable inputs.
- IncludeScanningHeaderData.Builder.addDeclaredHeaders() registers those
artifacts as declared headers, but only the generated (non-source) ones;
source-file sysroots already resolve via source-artifact lookup, so those
toolchains see no change to their declared-header map.
- CppCompileAction registers the prunable headers at both header-data build
sites.
Regression tests added:
- CppCompileActionTest.discoverInputs_generatedPrunableHeader_isDeclaredAndDiscovered:
a generated prunable header is registered as a declared header on the action's
IncludeScanningHeaderData and is discovered (verifies the CppCompileAction wiring).
- IncludeScannerTest.addDeclaredHeaders_registersOnlyGeneratedHeaders:
addDeclaredHeaders registers generated headers but skips source headers.
- IncludeScannerTest.addDeclaredHeaders_generatedHeaderIsResolvedByScanner:
end-to-end -- the real include scanner prunes an undeclared generated header
but resolves it once addDeclaredHeaders registers it.
RELNOTES: The C++ include scanner now properly resolves headers that are generated at build time and included as part of the toolchain.
PiperOrigin-RevId: 970080035
Change-Id: I267fcd63fae455c793a81c4cfde6c9f9c8c9449b
{Fast, Correct} - Choose two
Build and test software of any size, quickly and reliably.
Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.
One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.
Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.
Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.
To report a security issue, please email security@bazel.build with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue. Our vulnerability management team will respond within 3 working days of your email. If the issue is confirmed as a vulnerability, we will open a Security Advisory. This project follows a 90 day disclosure timeline.
See CONTRIBUTING.md