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:
20
cc/cc.go
20
cc/cc.go
@@ -94,6 +94,7 @@ type Deps struct {
|
|||||||
|
|
||||||
GeneratedSources []string
|
GeneratedSources []string
|
||||||
GeneratedHeaders []string
|
GeneratedHeaders []string
|
||||||
|
GeneratedDeps []string
|
||||||
|
|
||||||
ReexportGeneratedHeaders []string
|
ReexportGeneratedHeaders []string
|
||||||
|
|
||||||
@@ -120,6 +121,7 @@ type PathDeps struct {
|
|||||||
// Paths to generated source files
|
// Paths to generated source files
|
||||||
GeneratedSources android.Paths
|
GeneratedSources android.Paths
|
||||||
GeneratedHeaders android.Paths
|
GeneratedHeaders android.Paths
|
||||||
|
GeneratedDeps android.Paths
|
||||||
|
|
||||||
Flags []string
|
Flags []string
|
||||||
IncludeDirs android.Paths
|
IncludeDirs android.Paths
|
||||||
@@ -127,6 +129,7 @@ type PathDeps struct {
|
|||||||
ReexportedDirs android.Paths
|
ReexportedDirs android.Paths
|
||||||
ReexportedSystemDirs android.Paths
|
ReexportedSystemDirs android.Paths
|
||||||
ReexportedFlags []string
|
ReexportedFlags []string
|
||||||
|
ReexportedGeneratedHeaders android.Paths
|
||||||
ReexportedDeps android.Paths
|
ReexportedDeps android.Paths
|
||||||
|
|
||||||
// Paths to crt*.o files
|
// Paths to crt*.o files
|
||||||
@@ -894,6 +897,13 @@ func (c *Module) ExportedDeps() android.Paths {
|
|||||||
return nil
|
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 {
|
func isBionic(name string) bool {
|
||||||
switch name {
|
switch name {
|
||||||
case "libc", "libm", "libdl", "libdl_android", "linker":
|
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.ReexportedSystemDirs = append(depPaths.ReexportedSystemDirs, exporter.exportedSystemDirs()...)
|
||||||
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, exporter.exportedFlags()...)
|
depPaths.ReexportedFlags = append(depPaths.ReexportedFlags, exporter.exportedFlags()...)
|
||||||
depPaths.ReexportedDeps = append(depPaths.ReexportedDeps, exporter.exportedDeps()...)
|
depPaths.ReexportedDeps = append(depPaths.ReexportedDeps, exporter.exportedDeps()...)
|
||||||
|
depPaths.ReexportedGeneratedHeaders = append(depPaths.ReexportedGeneratedHeaders, exporter.exportedGeneratedHeaders()...)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.VisitDirectDeps(func(dep android.Module) {
|
ctx.VisitDirectDeps(func(dep android.Module) {
|
||||||
@@ -1928,11 +1939,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||||||
case genHeaderDepTag, genHeaderExportDepTag:
|
case genHeaderDepTag, genHeaderExportDepTag:
|
||||||
if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
|
if genRule, ok := dep.(genrule.SourceFileGenerator); ok {
|
||||||
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
|
depPaths.GeneratedHeaders = append(depPaths.GeneratedHeaders,
|
||||||
|
genRule.GeneratedSourceFiles()...)
|
||||||
|
depPaths.GeneratedDeps = append(depPaths.GeneratedDeps,
|
||||||
genRule.GeneratedDeps()...)
|
genRule.GeneratedDeps()...)
|
||||||
dirs := genRule.GeneratedHeaderDirs()
|
dirs := genRule.GeneratedHeaderDirs()
|
||||||
depPaths.IncludeDirs = append(depPaths.IncludeDirs, dirs...)
|
depPaths.IncludeDirs = append(depPaths.IncludeDirs, dirs...)
|
||||||
if depTag == genHeaderExportDepTag {
|
if depTag == genHeaderExportDepTag {
|
||||||
depPaths.ReexportedDirs = append(depPaths.ReexportedDirs, dirs...)
|
depPaths.ReexportedDirs = append(depPaths.ReexportedDirs, dirs...)
|
||||||
|
depPaths.ReexportedGeneratedHeaders = append(depPaths.ReexportedGeneratedHeaders,
|
||||||
|
genRule.GeneratedSourceFiles()...)
|
||||||
depPaths.ReexportedDeps = append(depPaths.ReexportedDeps, genRule.GeneratedDeps()...)
|
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.
|
// 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()...)
|
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 _, ok := ccDep.(*Module); ok {
|
||||||
if i, ok := ccDep.(*Module).linker.(exportedFlagsProducer); ok {
|
if i, ok := ccDep.(*Module).linker.(exportedFlagsProducer); ok {
|
||||||
depPaths.SystemIncludeDirs = append(depPaths.SystemIncludeDirs, i.exportedSystemDirs()...)
|
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()...)
|
depPaths.Flags = append(depPaths.Flags, i.exportedFlags()...)
|
||||||
|
|
||||||
if t.ReexportFlags {
|
if t.ReexportFlags {
|
||||||
@@ -2243,10 +2259,12 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||||||
depPaths.IncludeDirs = android.FirstUniquePaths(depPaths.IncludeDirs)
|
depPaths.IncludeDirs = android.FirstUniquePaths(depPaths.IncludeDirs)
|
||||||
depPaths.SystemIncludeDirs = android.FirstUniquePaths(depPaths.SystemIncludeDirs)
|
depPaths.SystemIncludeDirs = android.FirstUniquePaths(depPaths.SystemIncludeDirs)
|
||||||
depPaths.GeneratedHeaders = android.FirstUniquePaths(depPaths.GeneratedHeaders)
|
depPaths.GeneratedHeaders = android.FirstUniquePaths(depPaths.GeneratedHeaders)
|
||||||
|
depPaths.GeneratedDeps = android.FirstUniquePaths(depPaths.GeneratedDeps)
|
||||||
depPaths.ReexportedDirs = android.FirstUniquePaths(depPaths.ReexportedDirs)
|
depPaths.ReexportedDirs = android.FirstUniquePaths(depPaths.ReexportedDirs)
|
||||||
depPaths.ReexportedSystemDirs = android.FirstUniquePaths(depPaths.ReexportedSystemDirs)
|
depPaths.ReexportedSystemDirs = android.FirstUniquePaths(depPaths.ReexportedSystemDirs)
|
||||||
depPaths.ReexportedFlags = android.FirstUniqueStrings(depPaths.ReexportedFlags)
|
depPaths.ReexportedFlags = android.FirstUniqueStrings(depPaths.ReexportedFlags)
|
||||||
depPaths.ReexportedDeps = android.FirstUniquePaths(depPaths.ReexportedDeps)
|
depPaths.ReexportedDeps = android.FirstUniquePaths(depPaths.ReexportedDeps)
|
||||||
|
depPaths.ReexportedGeneratedHeaders = android.FirstUniquePaths(depPaths.ReexportedGeneratedHeaders)
|
||||||
|
|
||||||
if c.sabi != nil {
|
if c.sabi != nil {
|
||||||
c.sabi.Properties.ReexportedIncludes = android.FirstUniqueStrings(c.sabi.Properties.ReexportedIncludes)
|
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 {
|
func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects {
|
||||||
pathDeps := deps.GeneratedHeaders
|
pathDeps := deps.GeneratedDeps
|
||||||
pathDeps = append(pathDeps, ndkPathDeps(ctx)...)
|
pathDeps = append(pathDeps, ndkPathDeps(ctx)...)
|
||||||
|
|
||||||
buildFlags := flagsToBuilderFlags(flags)
|
buildFlags := flagsToBuilderFlags(flags)
|
||||||
|
@@ -238,6 +238,7 @@ type flagExporter struct {
|
|||||||
systemDirs android.Paths
|
systemDirs android.Paths
|
||||||
flags []string
|
flags []string
|
||||||
deps android.Paths
|
deps android.Paths
|
||||||
|
headers android.Paths
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *flagExporter) exportedIncludes(ctx ModuleContext) 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...)
|
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 {
|
func (f *flagExporter) exportedDirs() android.Paths {
|
||||||
return f.dirs
|
return f.dirs
|
||||||
}
|
}
|
||||||
@@ -297,11 +304,16 @@ func (f *flagExporter) exportedDeps() android.Paths {
|
|||||||
return f.deps
|
return f.deps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *flagExporter) exportedGeneratedHeaders() android.Paths {
|
||||||
|
return f.headers
|
||||||
|
}
|
||||||
|
|
||||||
type exportedFlagsProducer interface {
|
type exportedFlagsProducer interface {
|
||||||
exportedDirs() android.Paths
|
exportedDirs() android.Paths
|
||||||
exportedSystemDirs() android.Paths
|
exportedSystemDirs() android.Paths
|
||||||
exportedFlags() []string
|
exportedFlags() []string
|
||||||
exportedDeps() android.Paths
|
exportedDeps() android.Paths
|
||||||
|
exportedGeneratedHeaders() android.Paths
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ exportedFlagsProducer = (*flagExporter)(nil)
|
var _ exportedFlagsProducer = (*flagExporter)(nil)
|
||||||
@@ -967,12 +979,16 @@ func (library *libraryDecorator) link(ctx ModuleContext,
|
|||||||
library.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
library.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
||||||
library.reexportFlags(deps.ReexportedFlags...)
|
library.reexportFlags(deps.ReexportedFlags...)
|
||||||
library.reexportDeps(deps.ReexportedDeps...)
|
library.reexportDeps(deps.ReexportedDeps...)
|
||||||
|
library.addExportedGeneratedHeaders(deps.ReexportedGeneratedHeaders...)
|
||||||
|
|
||||||
if Bool(library.Properties.Aidl.Export_aidl_headers) {
|
if Bool(library.Properties.Aidl.Export_aidl_headers) {
|
||||||
if library.baseCompiler.hasSrcExt(".aidl") {
|
if library.baseCompiler.hasSrcExt(".aidl") {
|
||||||
dir := android.PathForModuleGen(ctx, "aidl")
|
dir := android.PathForModuleGen(ctx, "aidl")
|
||||||
library.reexportDirs(dir)
|
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)
|
includes = append(includes, flags.proto.Dir)
|
||||||
library.reexportDirs(includes...)
|
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.reexportDirs(dir)
|
||||||
library.reexportDeps(library.baseCompiler.pathDeps...)
|
library.reexportDeps(library.baseCompiler.pathDeps...)
|
||||||
|
library.addExportedGeneratedHeaders(library.baseCompiler.pathDeps...)
|
||||||
}
|
}
|
||||||
|
|
||||||
if library.buildStubs() {
|
if library.buildStubs() {
|
||||||
@@ -1448,7 +1468,7 @@ func buildSharedNativeLibSnapshot(sdkModuleContext android.ModuleContext, info *
|
|||||||
}
|
}
|
||||||
for _, dir := range includeDirs {
|
for _, dir := range includeDirs {
|
||||||
if _, gen := dir.(android.WritablePath); gen {
|
if _, gen := dir.(android.WritablePath); gen {
|
||||||
// generated headers are copied via exportedDeps. See below.
|
// generated headers are copied via exportedGeneratedHeaders. See below.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
targetDir := nativeIncludeDir
|
targetDir := nativeIncludeDir
|
||||||
@@ -1465,7 +1485,7 @@ func buildSharedNativeLibSnapshot(sdkModuleContext android.ModuleContext, info *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
genHeaders := lib.exportedDeps
|
genHeaders := lib.exportedGeneratedHeaders
|
||||||
for _, file := range genHeaders {
|
for _, file := range genHeaders {
|
||||||
targetDir := nativeGeneratedIncludeDir
|
targetDir := nativeGeneratedIncludeDir
|
||||||
if info.hasArchSpecificFlags {
|
if info.hasArchSpecificFlags {
|
||||||
@@ -1574,7 +1594,7 @@ type archSpecificNativeLibInfo struct {
|
|||||||
exportedIncludeDirs android.Paths
|
exportedIncludeDirs android.Paths
|
||||||
exportedSystemIncludeDirs android.Paths
|
exportedSystemIncludeDirs android.Paths
|
||||||
exportedFlags []string
|
exportedFlags []string
|
||||||
exportedDeps android.Paths
|
exportedGeneratedHeaders android.Paths
|
||||||
outputFile android.Path
|
outputFile android.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1608,7 +1628,7 @@ func organizeVariants(member android.SdkMember) *nativeLibInfo {
|
|||||||
exportedIncludeDirs: ccModule.ExportedIncludeDirs(),
|
exportedIncludeDirs: ccModule.ExportedIncludeDirs(),
|
||||||
exportedSystemIncludeDirs: ccModule.ExportedSystemIncludeDirs(),
|
exportedSystemIncludeDirs: ccModule.ExportedSystemIncludeDirs(),
|
||||||
exportedFlags: ccModule.ExportedFlags(),
|
exportedFlags: ccModule.ExportedFlags(),
|
||||||
exportedDeps: ccModule.ExportedDeps(),
|
exportedGeneratedHeaders: ccModule.ExportedGeneratedHeaders(),
|
||||||
outputFile: ccModule.OutputFile().Path(),
|
outputFile: ccModule.OutputFile().Path(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -90,6 +90,7 @@ func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
|
|||||||
p.libraryDecorator.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
p.libraryDecorator.reexportSystemDirs(deps.ReexportedSystemDirs...)
|
||||||
p.libraryDecorator.reexportFlags(deps.ReexportedFlags...)
|
p.libraryDecorator.reexportFlags(deps.ReexportedFlags...)
|
||||||
p.libraryDecorator.reexportDeps(deps.ReexportedDeps...)
|
p.libraryDecorator.reexportDeps(deps.ReexportedDeps...)
|
||||||
|
p.libraryDecorator.addExportedGeneratedHeaders(deps.ReexportedGeneratedHeaders...)
|
||||||
|
|
||||||
builderFlags := flagsToBuilderFlags(flags)
|
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
|
// 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
|
// all include directories inside our source tree. On the contrast, we manually
|
||||||
// collect generated headers from dependencies as they can't globbed.
|
// 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()...) {
|
for _, dir := range append(l.exportedDirs(), l.exportedSystemDirs()...) {
|
||||||
exportedIncludes[dir.String()] = true
|
exportedIncludes[dir.String()] = true
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user