Merge changes I59b7a32a,Ida7bc75a

* changes:
  Only request image and version variations for device SDK dependencies
  Create os and arch variants for GoBinaryTool modules
This commit is contained in:
Colin Cross
2020-09-02 23:51:53 +00:00
committed by Gerrit Code Review
6 changed files with 94 additions and 50 deletions

View File

@@ -23,6 +23,7 @@ import (
"strings" "strings"
"github.com/google/blueprint" "github.com/google/blueprint"
"github.com/google/blueprint/bootstrap"
"github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools"
) )
@@ -689,15 +690,24 @@ func (target Target) Variations() []blueprint.Variation {
} }
} }
func osMutator(mctx BottomUpMutatorContext) { func osMutator(bpctx blueprint.BottomUpMutatorContext) {
var module Module var module Module
var ok bool var ok bool
if module, ok = mctx.Module().(Module); !ok { if module, ok = bpctx.Module().(Module); !ok {
if _, ok := bpctx.Module().(bootstrap.GoBinaryTool); ok {
// Go tools are always build OS tools.
bpctx.CreateVariations(bpctx.Config().(Config).BuildOSTarget.OsVariation())
}
return return
} }
base := module.base() base := module.base()
// GoBinaryTool support above requires this mutator to be a blueprint.BottomUpMutatorContext
// because android.BottomUpMutatorContext filters out non-Soong modules. Now that we've
// handled them, create a normal android.BottomUpMutatorContext.
mctx := bottomUpMutatorContextFactory(bpctx, module, false)
if !base.ArchSpecific() { if !base.ArchSpecific() {
return return
} }
@@ -819,15 +829,24 @@ func GetOsSpecificVariantsOfCommonOSVariant(mctx BaseModuleContext) []Module {
// //
// Modules can be initialized with InitAndroidMultiTargetsArchModule, in which case they will be split by OsClass, // Modules can be initialized with InitAndroidMultiTargetsArchModule, in which case they will be split by OsClass,
// but will have a common Target that is expected to handle all other selected Targets via ctx.MultiTargets(). // but will have a common Target that is expected to handle all other selected Targets via ctx.MultiTargets().
func archMutator(mctx BottomUpMutatorContext) { func archMutator(bpctx blueprint.BottomUpMutatorContext) {
var module Module var module Module
var ok bool var ok bool
if module, ok = mctx.Module().(Module); !ok { if module, ok = bpctx.Module().(Module); !ok {
if _, ok := bpctx.Module().(bootstrap.GoBinaryTool); ok {
// Go tools are always build OS tools.
bpctx.CreateVariations(bpctx.Config().(Config).BuildOSTarget.ArchVariation())
}
return return
} }
base := module.base() base := module.base()
// GoBinaryTool support above requires this mutator to be a blueprint.BottomUpMutatorContext
// because android.BottomUpMutatorContext filters out non-Soong modules. Now that we've
// handled them, create a normal android.BottomUpMutatorContext.
mctx := bottomUpMutatorContextFactory(bpctx, module, false)
if !base.ArchSpecific() { if !base.ArchSpecific() {
return return
} }
@@ -903,7 +922,7 @@ func archMutator(mctx BottomUpMutatorContext) {
modules := mctx.CreateVariations(targetNames...) modules := mctx.CreateVariations(targetNames...)
for i, m := range modules { for i, m := range modules {
addTargetProperties(m, targets[i], multiTargets, i == 0) addTargetProperties(m, targets[i], multiTargets, i == 0)
m.(Module).base().setArchProperties(mctx) m.base().setArchProperties(mctx)
} }
} }

View File

@@ -75,6 +75,7 @@ type registerMutatorsContext struct {
type RegisterMutatorsContext interface { type RegisterMutatorsContext interface {
TopDown(name string, m TopDownMutator) MutatorHandle TopDown(name string, m TopDownMutator) MutatorHandle
BottomUp(name string, m BottomUpMutator) MutatorHandle BottomUp(name string, m BottomUpMutator) MutatorHandle
BottomUpBlueprint(name string, m blueprint.BottomUpMutator) MutatorHandle
} }
type RegisterMutatorFunc func(RegisterMutatorsContext) type RegisterMutatorFunc func(RegisterMutatorsContext)
@@ -143,9 +144,9 @@ var preArch = []RegisterMutatorFunc{
} }
func registerArchMutator(ctx RegisterMutatorsContext) { func registerArchMutator(ctx RegisterMutatorsContext) {
ctx.BottomUp("os", osMutator).Parallel() ctx.BottomUpBlueprint("os", osMutator).Parallel()
ctx.BottomUp("image", imageMutator).Parallel() ctx.BottomUp("image", imageMutator).Parallel()
ctx.BottomUp("arch", archMutator).Parallel() ctx.BottomUpBlueprint("arch", archMutator).Parallel()
} }
var preDeps = []RegisterMutatorFunc{ var preDeps = []RegisterMutatorFunc{
@@ -225,16 +226,21 @@ type bottomUpMutatorContext struct {
finalPhase bool finalPhase bool
} }
func bottomUpMutatorContextFactory(ctx blueprint.BottomUpMutatorContext, a Module,
finalPhase bool) BottomUpMutatorContext {
return &bottomUpMutatorContext{
bp: ctx,
baseModuleContext: a.base().baseModuleContextFactory(ctx),
finalPhase: finalPhase,
}
}
func (x *registerMutatorsContext) BottomUp(name string, m BottomUpMutator) MutatorHandle { func (x *registerMutatorsContext) BottomUp(name string, m BottomUpMutator) MutatorHandle {
finalPhase := x.finalPhase finalPhase := x.finalPhase
f := func(ctx blueprint.BottomUpMutatorContext) { f := func(ctx blueprint.BottomUpMutatorContext) {
if a, ok := ctx.Module().(Module); ok { if a, ok := ctx.Module().(Module); ok {
actx := &bottomUpMutatorContext{ m(bottomUpMutatorContextFactory(ctx, a, finalPhase))
bp: ctx,
baseModuleContext: a.base().baseModuleContextFactory(ctx),
finalPhase: finalPhase,
}
m(actx)
} }
} }
mutator := &mutator{name: name, bottomUpMutator: f} mutator := &mutator{name: name, bottomUpMutator: f}
@@ -242,6 +248,12 @@ func (x *registerMutatorsContext) BottomUp(name string, m BottomUpMutator) Mutat
return mutator return mutator
} }
func (x *registerMutatorsContext) BottomUpBlueprint(name string, m blueprint.BottomUpMutator) MutatorHandle {
mutator := &mutator{name: name, bottomUpMutator: m}
x.mutators = append(x.mutators, mutator)
return mutator
}
func (x *registerMutatorsContext) TopDown(name string, m TopDownMutator) MutatorHandle { func (x *registerMutatorsContext) TopDown(name string, m TopDownMutator) MutatorHandle {
f := func(ctx blueprint.TopDownMutatorContext) { f := func(ctx blueprint.TopDownMutatorContext) {
if a, ok := ctx.Module().(Module); ok { if a, ok := ctx.Module().(Module); ok {

View File

@@ -1336,26 +1336,30 @@ func addDependenciesForNativeModules(ctx android.BottomUpMutatorContext,
// conflicting variations with this module. This is required since // conflicting variations with this module. This is required since
// arch variant of an APEX bundle is 'common' but it is 'arm' or 'arm64' // arch variant of an APEX bundle is 'common' but it is 'arm' or 'arm64'
// for native shared libs. // for native shared libs.
ctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{
{Mutator: "image", Variation: imageVariation},
{Mutator: "link", Variation: "shared"},
{Mutator: "version", Variation: ""}, // "" is the non-stub variant
}...), sharedLibTag, nativeModules.Native_shared_libs...)
ctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ binVariations := target.Variations()
{Mutator: "image", Variation: imageVariation}, libVariations := append(target.Variations(),
{Mutator: "link", Variation: "shared"}, blueprint.Variation{Mutator: "link", Variation: "shared"})
{Mutator: "version", Variation: ""}, // "" is the non-stub variant testVariations := append(target.Variations(),
}...), jniLibTag, nativeModules.Jni_libs...) blueprint.Variation{Mutator: "test_per_src", Variation: ""}) // "" is the all-tests variant
ctx.AddFarVariationDependencies(append(target.Variations(), if ctx.Device() {
blueprint.Variation{Mutator: "image", Variation: imageVariation}), binVariations = append(binVariations,
executableTag, nativeModules.Binaries...) blueprint.Variation{Mutator: "image", Variation: imageVariation})
libVariations = append(libVariations,
blueprint.Variation{Mutator: "image", Variation: imageVariation},
blueprint.Variation{Mutator: "version", Variation: ""}) // "" is the non-stub variant
testVariations = append(testVariations,
blueprint.Variation{Mutator: "image", Variation: imageVariation})
}
ctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ ctx.AddFarVariationDependencies(libVariations, sharedLibTag, nativeModules.Native_shared_libs...)
{Mutator: "image", Variation: imageVariation},
{Mutator: "test_per_src", Variation: ""}, // "" is the all-tests variant ctx.AddFarVariationDependencies(libVariations, jniLibTag, nativeModules.Jni_libs...)
}...), testTag, nativeModules.Tests...)
ctx.AddFarVariationDependencies(binVariations, executableTag, nativeModules.Binaries...)
ctx.AddFarVariationDependencies(testVariations, testTag, nativeModules.Tests...)
} }
func (a *apexBundle) combineProperties(ctx android.BottomUpMutatorContext) { func (a *apexBundle) combineProperties(ctx android.BottomUpMutatorContext) {

View File

@@ -46,9 +46,13 @@ func (mt *binarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorConte
if version == "" { if version == "" {
version = LatestStubsVersionFor(mctx.Config(), name) version = LatestStubsVersionFor(mctx.Config(), name)
} }
mctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ variations := target.Variations()
{Mutator: "version", Variation: version}, if mctx.Device() {
}...), dependencyTag, name) variations = append(variations,
blueprint.Variation{Mutator: "image", Variation: android.CoreVariation},
blueprint.Variation{Mutator: "version", Variation: version})
}
mctx.AddFarVariationDependencies(variations, dependencyTag, name)
} }
} }
} }

View File

@@ -82,18 +82,19 @@ func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorCont
if version == "" { if version == "" {
version = LatestStubsVersionFor(mctx.Config(), name) version = LatestStubsVersionFor(mctx.Config(), name)
} }
variations := target.Variations()
if mctx.Device() {
variations = append(variations,
blueprint.Variation{Mutator: "image", Variation: android.CoreVariation},
blueprint.Variation{Mutator: "version", Variation: version})
}
if mt.linkTypes == nil { if mt.linkTypes == nil {
mctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ mctx.AddFarVariationDependencies(variations, dependencyTag, name)
{Mutator: "image", Variation: android.CoreVariation},
{Mutator: "version", Variation: version},
}...), dependencyTag, name)
} else { } else {
for _, linkType := range mt.linkTypes { for _, linkType := range mt.linkTypes {
mctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ libVariations := append(variations,
{Mutator: "image", Variation: android.CoreVariation}, blueprint.Variation{Mutator: "link", Variation: linkType})
{Mutator: "link", Variation: linkType}, mctx.AddFarVariationDependencies(libVariations, dependencyTag, name)
{Mutator: "version", Variation: version},
}...), dependencyTag, name)
} }
} }
} }

View File

@@ -1011,10 +1011,12 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) {
// static executable gets static runtime libs // static executable gets static runtime libs
depTag := libraryDependencyTag{Kind: staticLibraryDependency} depTag := libraryDependencyTag{Kind: staticLibraryDependency}
mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{ variations := append(mctx.Target().Variations(),
{Mutator: "link", Variation: "static"}, blueprint.Variation{Mutator: "link", Variation: "static"})
c.ImageVariation(), if c.Device() {
}...), depTag, deps...) variations = append(variations, c.ImageVariation())
}
mctx.AddFarVariationDependencies(variations, depTag, deps...)
} else if !c.static() && !c.header() { } else if !c.static() && !c.header() {
// If we're using snapshots and in vendor, redirect to snapshot whenever possible // If we're using snapshots and in vendor, redirect to snapshot whenever possible
if c.VndkVersion() == mctx.DeviceConfig().VndkVersion() { if c.VndkVersion() == mctx.DeviceConfig().VndkVersion() {
@@ -1026,10 +1028,12 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) {
// dynamic executable and shared libs get shared runtime libs // dynamic executable and shared libs get shared runtime libs
depTag := libraryDependencyTag{Kind: sharedLibraryDependency, Order: earlyLibraryDependency} depTag := libraryDependencyTag{Kind: sharedLibraryDependency, Order: earlyLibraryDependency}
mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{ variations := append(mctx.Target().Variations(),
{Mutator: "link", Variation: "shared"}, blueprint.Variation{Mutator: "link", Variation: "shared"})
c.ImageVariation(), if c.Device() {
}...), depTag, runtimeLibrary) variations = append(variations, c.ImageVariation())
}
mctx.AddFarVariationDependencies(variations, depTag, runtimeLibrary)
} }
// static lib does not have dependency to the runtime library. The // static lib does not have dependency to the runtime library. The
// dependency will be added to the executables or shared libs using // dependency will be added to the executables or shared libs using