Do not register missing deps
This is a fix to aosp/2260763 and skips the existence check corectly. Previously, it would not throw an exception during Soong analysis, but would add the path to a `MissingDeps` object. The ninja graph generated using this would throw an exception during ninja execution. We should not do this check for `cc_api_library`. The prebuilt library.so is missing in the build graph of the inner tree (expected), but it will be present when the orchestrator creates the combined multi-tree ninja graph. Test: rm -rf out && multitree_build vendor/vendorimage (I did not clean out/ in aosp/2260763, and therefore did not catch this earlier) Test: go test ./cc Change-Id: I68d245acae3bfb777bfc8a72fb7cd4909cb0a289
This commit is contained in:
@@ -1139,6 +1139,21 @@ func PathForSource(ctx PathContext, pathComponents ...string) SourcePath {
|
||||
return path
|
||||
}
|
||||
|
||||
// MaybeExistentPathForSource joins the provided path components and validates that the result
|
||||
// neither escapes the source dir nor is in the out dir.
|
||||
// It does not validate whether the path exists.
|
||||
func MaybeExistentPathForSource(ctx PathContext, pathComponents ...string) SourcePath {
|
||||
path, err := pathForSource(ctx, pathComponents...)
|
||||
if err != nil {
|
||||
reportPathError(ctx, err)
|
||||
}
|
||||
|
||||
if pathtools.IsGlob(path.String()) {
|
||||
ReportPathErrorf(ctx, "path may not contain a glob: %s", path.String())
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
// ExistentPathForSource returns an OptionalPath with the SourcePath, rooted from SrcDir, *not*
|
||||
// rooted from the module's local source directory, if the path exists, or an empty OptionalPath if
|
||||
// it doesn't exist. Dependencies are added so that the ninja file will be regenerated if the state
|
||||
|
@@ -86,11 +86,11 @@ func (d *apiLibraryDecorator) Name(basename string) string {
|
||||
func (d *apiLibraryDecorator) exportIncludes(ctx ModuleContext) {
|
||||
exporterProps := d.flagExporter.Properties
|
||||
for _, dir := range exporterProps.Export_include_dirs {
|
||||
d.dirs = append(d.dirs, android.PathForSource(ctx, ctx.ModuleDir(), dir))
|
||||
d.dirs = append(d.dirs, android.MaybeExistentPathForSource(ctx, ctx.ModuleDir(), dir))
|
||||
}
|
||||
// system headers
|
||||
for _, dir := range exporterProps.Export_system_include_dirs {
|
||||
d.systemDirs = append(d.systemDirs, android.PathForSource(ctx, ctx.ModuleDir(), dir))
|
||||
d.systemDirs = append(d.systemDirs, android.MaybeExistentPathForSource(ctx, ctx.ModuleDir(), dir))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ func (d *apiLibraryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps
|
||||
// Skip the existence check of the stub prebuilt file.
|
||||
// The file is not guaranteed to exist during Soong analysis.
|
||||
// Build orchestrator will be responsible for creating a connected ninja graph.
|
||||
in := android.PathForSource(ctx, ctx.ModuleDir(), *d.properties.Src)
|
||||
in := android.MaybeExistentPathForSource(ctx, ctx.ModuleDir(), *d.properties.Src)
|
||||
|
||||
d.unstrippedOutputFile = in
|
||||
libName := d.libraryDecorator.getLibName(ctx) + flags.Toolchain.ShlibSuffix()
|
||||
|
Reference in New Issue
Block a user