Fix generated headers of snapshot
For VNDK snapshot and SDK snapshot, deps files have been used to capture generated headers. But exported deps might contain intermediate phony files instead of actual header files, which are for optimization of ninja. To correctly capture all headers, exported generated header files are gathered separately. Bug: 65377115 Test: m nothing Change-Id: Ia03fa69186490a818578190e3c0bfb0261d1fd6e
This commit is contained in:
34
cc/cc.go
34
cc/cc.go
@@ -94,6 +94,7 @@ type Deps struct {
|
||||
|
||||
GeneratedSources []string
|
||||
GeneratedHeaders []string
|
||||
GeneratedDeps []string
|
||||
|
||||
ReexportGeneratedHeaders []string
|
||||
|
||||
@@ -120,14 +121,16 @@ type PathDeps struct {
|
||||
// Paths to generated source files
|
||||
GeneratedSources android.Paths
|
||||
GeneratedHeaders android.Paths
|
||||
GeneratedDeps android.Paths
|
||||
|
||||
Flags []string
|
||||
IncludeDirs android.Paths
|
||||
SystemIncludeDirs android.Paths
|
||||
ReexportedDirs android.Paths
|
||||
ReexportedSystemDirs android.Paths
|
||||
ReexportedFlags []string
|
||||
ReexportedDeps android.Paths
|
||||
Flags []string
|
||||
IncludeDirs android.Paths
|
||||
SystemIncludeDirs android.Paths
|
||||
ReexportedDirs android.Paths
|
||||
ReexportedSystemDirs android.Paths
|
||||
ReexportedFlags []string
|
||||
ReexportedGeneratedHeaders android.Paths
|
||||
ReexportedDeps android.Paths
|
||||
|
||||
// Paths to crt*.o files
|
||||
CrtBegin, CrtEnd android.OptionalPath
|
||||
@@ -894,6 +897,13 @@ func (c *Module) ExportedDeps() android.Paths {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Module) ExportedGeneratedHeaders() android.Paths {
|
||||
if flagsProducer, ok := c.linker.(exportedFlagsProducer); ok {
|
||||
return flagsProducer.exportedGeneratedHeaders()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isBionic(name string) bool {
|
||||
switch name {
|
||||
case "libc", "libm", "libdl", "libdl_android", "linker":
|
||||
@@ -1905,6 +1915,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
||||
depPaths.ReexportedSystemDirs = append(depPaths.ReexportedSystemDirs, exporter.exportedSystemDirs()...)
|
||||
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, exporter.exportedFlags()...)
|
||||
depPaths.ReexportedDeps = append(depPaths.ReexportedDeps, exporter.exportedDeps()...)
|
||||
depPaths.ReexportedGeneratedHeaders = append(depPaths.ReexportedGeneratedHeaders, exporter.exportedGeneratedHeaders()...)
|
||||
}
|
||||
|
||||
ctx.VisitDirectDeps(func(dep android.Module) {
|
||||
@@ -1928,11 +1939,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
||||
case genHeaderDepTag, genHeaderExportDepTag:
|
||||
if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
|
||||
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
|
||||
genRule.GeneratedSourceFiles()...)
|
||||
depPaths.GeneratedDeps = append(depPaths.GeneratedDeps,
|
||||
genRule.GeneratedDeps()...)
|
||||
dirs := genRule.GeneratedHeaderDirs()
|
||||
depPaths.IncludeDirs = append(depPaths.IncludeDirs, dirs...)
|
||||
if depTag == genHeaderExportDepTag {
|
||||
depPaths.ReexportedDirs = append(depPaths.ReexportedDirs, dirs...)
|
||||
depPaths.ReexportedGeneratedHeaders = append(depPaths.ReexportedGeneratedHeaders,
|
||||
genRule.GeneratedSourceFiles()...)
|
||||
depPaths.ReexportedDeps = append(depPaths.ReexportedDeps, genRule.GeneratedDeps()...)
|
||||
// Add these re-exported flags to help header-abi-dumper to infer the abi exported by a library.
|
||||
c.sabi.Properties.ReexportedIncludes = append(c.sabi.Properties.ReexportedIncludes, dirs.Strings()...)
|
||||
@@ -2045,7 +2060,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
||||
if _, ok := ccDep.(*Module); ok {
|
||||
if i, ok := ccDep.(*Module).linker.(exportedFlagsProducer); ok {
|
||||
depPaths.SystemIncludeDirs = append(depPaths.SystemIncludeDirs, i.exportedSystemDirs()...)
|
||||
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders, i.exportedDeps()...)
|
||||
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders, i.exportedGeneratedHeaders()...)
|
||||
depPaths.GeneratedDeps = append(depPaths.GeneratedDeps, i.exportedDeps()...)
|
||||
depPaths.Flags = append(depPaths.Flags, i.exportedFlags()...)
|
||||
|
||||
if t.ReexportFlags {
|
||||
@@ -2243,10 +2259,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
||||
depPaths.IncludeDirs = android.FirstUniquePaths(depPaths.IncludeDirs)
|
||||
depPaths.SystemIncludeDirs = android.FirstUniquePaths(depPaths.SystemIncludeDirs)
|
||||
depPaths.GeneratedHeaders = android.FirstUniquePaths(depPaths.GeneratedHeaders)
|
||||
depPaths.GeneratedDeps = android.FirstUniquePaths(depPaths.GeneratedDeps)
|
||||
depPaths.ReexportedDirs = android.FirstUniquePaths(depPaths.ReexportedDirs)
|
||||
depPaths.ReexportedSystemDirs = android.FirstUniquePaths(depPaths.ReexportedSystemDirs)
|
||||
depPaths.ReexportedFlags = android.FirstUniqueStrings(depPaths.ReexportedFlags)
|
||||
depPaths.ReexportedDeps = android.FirstUniquePaths(depPaths.ReexportedDeps)
|
||||
depPaths.ReexportedGeneratedHeaders = android.FirstUniquePaths(depPaths.ReexportedGeneratedHeaders)
|
||||
|
||||
if c.sabi != nil {
|
||||
c.sabi.Properties.ReexportedIncludes = android.FirstUniqueStrings(c.sabi.Properties.ReexportedIncludes)
|
||||
|
@@ -560,7 +560,7 @@ func ndkPathDeps(ctx ModuleContext) android.Paths {
|
||||
}
|
||||
|
||||
func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
|
||||
pathDeps := deps.GeneratedHeaders
|
||||
pathDeps := deps.GeneratedDeps
|
||||
pathDeps = append(pathDeps, ndkPathDeps(ctx)...)
|
||||
|
||||
buildFlags := flagsToBuilderFlags(flags)
|
||||
|
@@ -238,6 +238,7 @@ type flagExporter struct {
|
||||
systemDirs android.Paths
|
||||
flags []string
|
||||
deps android.Paths
|
||||
headers android.Paths
|
||||
}
|
||||
|
||||
func (f *flagExporter) exportedIncludes(ctx ModuleContext) android.Paths {
|
||||
@@ -281,6 +282,12 @@ func (f *flagExporter) reexportDeps(deps ...android.Path) {
|
||||
f.deps = append(f.deps, deps...)
|
||||
}
|
||||
|
||||
// addExportedGeneratedHeaders does nothing but collects generated header files.
|
||||
// This can be differ to exportedDeps which may contain phony files to minimize ninja.
|
||||
func (f *flagExporter) addExportedGeneratedHeaders(headers ...android.Path) {
|
||||
f.headers = append(f.headers, headers...)
|
||||
}
|
||||
|
||||
func (f *flagExporter) exportedDirs() android.Paths {
|
||||
return f.dirs
|
||||
}
|
||||
@@ -297,11 +304,16 @@ func (f *flagExporter) exportedDeps() android.Paths {
|
||||
return f.deps
|
||||
}
|
||||
|
||||
func (f *flagExporter) exportedGeneratedHeaders() android.Paths {
|
||||
return f.headers
|
||||
}
|
||||
|
||||
type exportedFlagsProducer interface {
|
||||
exportedDirs() android.Paths
|
||||
exportedSystemDirs() android.Paths
|
||||
exportedFlags() []string
|
||||
exportedDeps() android.Paths
|
||||
exportedGeneratedHeaders() android.Paths
|
||||
}
|
||||
|
||||
var _ exportedFlagsProducer = (*flagExporter)(nil)
|
||||
@@ -967,12 +979,16 @@ func (library *libraryDecorator) link(ctx ModuleContext,
|
||||
library.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
||||
library.reexportFlags(deps.ReexportedFlags...)
|
||||
library.reexportDeps(deps.ReexportedDeps...)
|
||||
library.addExportedGeneratedHeaders(deps.ReexportedGeneratedHeaders...)
|
||||
|
||||
if Bool(library.Properties.Aidl.Export_aidl_headers) {
|
||||
if library.baseCompiler.hasSrcExt(".aidl") {
|
||||
dir := android.PathForModuleGen(ctx, "aidl")
|
||||
library.reexportDirs(dir)
|
||||
library.reexportDeps(library.baseCompiler.pathDeps...) // TODO: restrict to aidl deps
|
||||
|
||||
// TODO: restrict to aidl deps
|
||||
library.reexportDeps(library.baseCompiler.pathDeps...)
|
||||
library.addExportedGeneratedHeaders(library.baseCompiler.pathDeps...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -984,7 +1000,10 @@ func (library *libraryDecorator) link(ctx ModuleContext,
|
||||
}
|
||||
includes = append(includes, flags.proto.Dir)
|
||||
library.reexportDirs(includes...)
|
||||
library.reexportDeps(library.baseCompiler.pathDeps...) // TODO: restrict to proto deps
|
||||
|
||||
// TODO: restrict to proto deps
|
||||
library.reexportDeps(library.baseCompiler.pathDeps...)
|
||||
library.addExportedGeneratedHeaders(library.baseCompiler.pathDeps...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1002,6 +1021,7 @@ func (library *libraryDecorator) link(ctx ModuleContext,
|
||||
|
||||
library.reexportDirs(dir)
|
||||
library.reexportDeps(library.baseCompiler.pathDeps...)
|
||||
library.addExportedGeneratedHeaders(library.baseCompiler.pathDeps...)
|
||||
}
|
||||
|
||||
if library.buildStubs() {
|
||||
@@ -1448,7 +1468,7 @@ func buildSharedNativeLibSnapshot(sdkModuleContext android.ModuleContext, info *
|
||||
}
|
||||
for _, dir := range includeDirs {
|
||||
if _, gen := dir.(android.WritablePath); gen {
|
||||
// generated headers are copied via exportedDeps. See below.
|
||||
// generated headers are copied via exportedGeneratedHeaders. See below.
|
||||
continue
|
||||
}
|
||||
targetDir := nativeIncludeDir
|
||||
@@ -1465,7 +1485,7 @@ func buildSharedNativeLibSnapshot(sdkModuleContext android.ModuleContext, info *
|
||||
}
|
||||
}
|
||||
|
||||
genHeaders := lib.exportedDeps
|
||||
genHeaders := lib.exportedGeneratedHeaders
|
||||
for _, file := range genHeaders {
|
||||
targetDir := nativeGeneratedIncludeDir
|
||||
if info.hasArchSpecificFlags {
|
||||
@@ -1574,7 +1594,7 @@ type archSpecificNativeLibInfo struct {
|
||||
exportedIncludeDirs android.Paths
|
||||
exportedSystemIncludeDirs android.Paths
|
||||
exportedFlags []string
|
||||
exportedDeps android.Paths
|
||||
exportedGeneratedHeaders android.Paths
|
||||
outputFile android.Path
|
||||
}
|
||||
|
||||
@@ -1608,7 +1628,7 @@ func organizeVariants(member android.SdkMember) *nativeLibInfo {
|
||||
exportedIncludeDirs: ccModule.ExportedIncludeDirs(),
|
||||
exportedSystemIncludeDirs: ccModule.ExportedSystemIncludeDirs(),
|
||||
exportedFlags: ccModule.ExportedFlags(),
|
||||
exportedDeps: ccModule.ExportedDeps(),
|
||||
exportedGeneratedHeaders: ccModule.ExportedGeneratedHeaders(),
|
||||
outputFile: ccModule.OutputFile().Path(),
|
||||
})
|
||||
}
|
||||
|
@@ -90,6 +90,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
|
||||
p.libraryDecorator.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
||||
p.libraryDecorator.reexportFlags(deps.ReexportedFlags...)
|
||||
p.libraryDecorator.reexportDeps(deps.ReexportedDeps...)
|
||||
p.libraryDecorator.addExportedGeneratedHeaders(deps.ReexportedGeneratedHeaders...)
|
||||
|
||||
builderFlags := flagsToBuilderFlags(flags)
|
||||
|
||||
|
@@ -704,7 +704,7 @@ func (c *vndkSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContex
|
||||
// We glob headers from include directories inside source tree. So we first gather
|
||||
// all include directories inside our source tree. On the contrast, we manually
|
||||
// collect generated headers from dependencies as they can't globbed.
|
||||
generatedHeaders = append(generatedHeaders, l.exportedDeps()...)
|
||||
generatedHeaders = append(generatedHeaders, l.exportedGeneratedHeaders()...)
|
||||
for _, dir := range append(l.exportedDirs(), l.exportedSystemDirs()...) {
|
||||
exportedIncludes[dir.String()] = true
|
||||
}
|
||||
|
Reference in New Issue
Block a user