Add aconfig flags and a generic generated library plugin module for cc
The generated module lets us keep the aconfig code in its own pacakge and not infect all of the cc package with aconfig. It's also closer to what bazel is going to do Bug: 283479529 Test: m aconfig_hello_world_cc && adb push $TOP/out/target/product/panther/system/bin/aconfig_hello_world_cc /system/bin && adb shell aconfig_hello_world_cc Change-Id: I2fb9e419939c7ca77b111da9c376af077e2348a9
This commit is contained in:
54
cc/cc.go
54
cc/cc.go
@@ -569,6 +569,24 @@ type feature interface {
|
||||
props() []interface{}
|
||||
}
|
||||
|
||||
// Information returned from Generator about the source code it's generating
|
||||
type GeneratedSource struct {
|
||||
IncludeDirs android.Paths
|
||||
Sources android.Paths
|
||||
Headers android.Paths
|
||||
ReexportedDirs android.Paths
|
||||
}
|
||||
|
||||
// generator allows injection of generated code
|
||||
type Generator interface {
|
||||
GeneratorProps() []interface{}
|
||||
GeneratorInit(ctx BaseModuleContext)
|
||||
GeneratorDeps(ctx DepsContext, deps Deps) Deps
|
||||
GeneratorFlags(ctx ModuleContext, flags Flags, deps PathDeps) Flags
|
||||
GeneratorSources(ctx ModuleContext) GeneratedSource
|
||||
GeneratorBuildActions(ctx ModuleContext, flags Flags, deps PathDeps)
|
||||
}
|
||||
|
||||
// compiler is the interface for a compiler helper object. Different module decorators may implement
|
||||
// this helper differently.
|
||||
type compiler interface {
|
||||
@@ -851,6 +869,7 @@ type Module struct {
|
||||
// type-specific logic. These members may reference different objects or the same object.
|
||||
// Functions of these decorators will be invoked to initialize and register type-specific
|
||||
// build statements.
|
||||
generators []Generator
|
||||
compiler compiler
|
||||
linker linker
|
||||
installer installer
|
||||
@@ -1201,6 +1220,9 @@ func (c *Module) VndkVersion() string {
|
||||
|
||||
func (c *Module) Init() android.Module {
|
||||
c.AddProperties(&c.Properties, &c.VendorProperties)
|
||||
for _, generator := range c.generators {
|
||||
c.AddProperties(generator.GeneratorProps()...)
|
||||
}
|
||||
if c.compiler != nil {
|
||||
c.AddProperties(c.compiler.compilerProps()...)
|
||||
}
|
||||
@@ -2149,6 +2171,25 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
|
||||
return
|
||||
}
|
||||
|
||||
for _, generator := range c.generators {
|
||||
gen := generator.GeneratorSources(ctx)
|
||||
deps.IncludeDirs = append(deps.IncludeDirs, gen.IncludeDirs...)
|
||||
deps.ReexportedDirs = append(deps.ReexportedDirs, gen.ReexportedDirs...)
|
||||
deps.GeneratedDeps = append(deps.GeneratedDeps, gen.Headers...)
|
||||
deps.ReexportedGeneratedHeaders = append(deps.ReexportedGeneratedHeaders, gen.Headers...)
|
||||
deps.ReexportedDeps = append(deps.ReexportedDeps, gen.Headers...)
|
||||
if len(deps.Objs.objFiles) == 0 {
|
||||
// If we are reusuing object files (which happens when we're a shared library and we're
|
||||
// reusing our static variant's object files), then skip adding the actual source files,
|
||||
// because we already have the object for it.
|
||||
deps.GeneratedSources = append(deps.GeneratedSources, gen.Sources...)
|
||||
}
|
||||
}
|
||||
|
||||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
|
||||
if c.stubLibraryMultipleApexViolation(actx) {
|
||||
actx.PropertyErrorf("apex_available",
|
||||
"Stub libraries should have a single apex_available (test apexes excluded). Got %v", c.ApexAvailable())
|
||||
@@ -2163,6 +2204,9 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
|
||||
Toolchain: c.toolchain(ctx),
|
||||
EmitXrefs: ctx.Config().EmitXrefRules(),
|
||||
}
|
||||
for _, generator := range c.generators {
|
||||
flags = generator.GeneratorFlags(ctx, flags, deps)
|
||||
}
|
||||
if c.compiler != nil {
|
||||
flags = c.compiler.compilerFlags(ctx, flags, deps)
|
||||
}
|
||||
@@ -2220,6 +2264,10 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
|
||||
|
||||
flags.AssemblerWithCpp = inList("-xassembler-with-cpp", flags.Local.AsFlags)
|
||||
|
||||
for _, generator := range c.generators {
|
||||
generator.GeneratorBuildActions(ctx, flags, deps)
|
||||
}
|
||||
|
||||
var objs Objects
|
||||
if c.compiler != nil {
|
||||
objs = c.compiler.compile(ctx, flags, deps)
|
||||
@@ -2307,6 +2355,9 @@ func (c *Module) toolchain(ctx android.BaseModuleContext) config.Toolchain {
|
||||
}
|
||||
|
||||
func (c *Module) begin(ctx BaseModuleContext) {
|
||||
for _, generator := range c.generators {
|
||||
generator.GeneratorInit(ctx)
|
||||
}
|
||||
if c.compiler != nil {
|
||||
c.compiler.compilerInit(ctx)
|
||||
}
|
||||
@@ -2342,6 +2393,9 @@ func (c *Module) begin(ctx BaseModuleContext) {
|
||||
func (c *Module) deps(ctx DepsContext) Deps {
|
||||
deps := Deps{}
|
||||
|
||||
for _, generator := range c.generators {
|
||||
deps = generator.GeneratorDeps(ctx, deps)
|
||||
}
|
||||
if c.compiler != nil {
|
||||
deps = c.compiler.compilerDeps(ctx, deps)
|
||||
}
|
||||
|
Reference in New Issue
Block a user