use version mutator for CRT

Move the CRT objects into the version mutator and retire the
ndk_api mutator.

Test: no change to build.ninja or Android-${TARGET_PRODUCT}.mk
Change-Id: Ibbbde323e3e0e8e4702dda4f3828a49786280118
This commit is contained in:
Colin Cross
2020-09-30 12:27:01 -07:00
parent 5ec407b594
commit bbc941b0d0
3 changed files with 44 additions and 52 deletions

View File

@@ -45,7 +45,6 @@ func RegisterCCBuildComponents(ctx android.RegistrationContext) {
ctx.BottomUp("sdk", sdkMutator).Parallel()
ctx.BottomUp("vndk", VndkMutator).Parallel()
ctx.BottomUp("link", LinkageMutator).Parallel()
ctx.BottomUp("ndk_api", NdkApiMutator).Parallel()
ctx.BottomUp("test_per_src", TestPerSrcMutator).Parallel()
ctx.BottomUp("version_selector", versionSelectorMutator).Parallel()
ctx.BottomUp("version", versionMutator).Parallel()
@@ -1688,7 +1687,7 @@ func GetCrtVariations(ctx android.BottomUpMutatorContext,
if m.UseSdk() {
return []blueprint.Variation{
{Mutator: "sdk", Variation: "sdk"},
{Mutator: "ndk_api", Variation: m.SdkVersion()},
{Mutator: "version", Variation: m.SdkVersion()},
}
}
return []blueprint.Variation{
@@ -1954,11 +1953,10 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
actx.AddDependency(c, depTag, gen)
}
actx.AddVariationDependencies(nil, objDepTag, deps.ObjFiles...)
vendorSnapshotObjects := vendorSnapshotObjects(actx.Config())
crtVariations := GetCrtVariations(ctx, c)
actx.AddVariationDependencies(crtVariations, objDepTag, deps.ObjFiles...)
if deps.CrtBegin != "" {
actx.AddVariationDependencies(crtVariations, CrtBeginDepTag,
rewriteSnapshotLibs(deps.CrtBegin, vendorSnapshotObjects))

View File

@@ -1611,6 +1611,21 @@ func createVersionVariations(mctx android.BottomUpMutatorContext, versions []str
mctx.CreateAliasVariation("latest", latestVersion)
}
func createPerApiVersionVariations(mctx android.BottomUpMutatorContext, minSdkVersion string) {
from, err := nativeApiLevelFromUser(mctx, minSdkVersion)
if err != nil {
mctx.PropertyErrorf("min_sdk_version", err.Error())
return
}
versionStrs := ndkLibraryVersions(mctx, from)
modules := mctx.CreateLocalVariations(versionStrs...)
for i, module := range modules {
module.(*Module).Properties.Sdk_version = StringPtr(versionStrs[i])
}
}
func CanBeOrLinkAgainstVersionVariants(module interface {
Host() bool
InRamdisk() bool
@@ -1646,6 +1661,23 @@ func versionSelectorMutator(mctx android.BottomUpMutatorContext) {
}
return
}
if compiler, ok := c.linker.(*stubDecorator); ok {
if mctx.Os() != android.Android {
// These modules are always android.DeviceEnabled only, but
// those include Fuchsia devices, which we don't support.
mctx.Module().Disable()
return
}
firstVersion, err := nativeApiLevelFromUser(mctx,
String(compiler.properties.First_version))
if err != nil {
mctx.PropertyErrorf("first_version", err.Error())
return
}
c.SetAllStubsVersions(ndkLibraryVersions(mctx, firstVersion))
return
}
}
if library.CcLibrary() && library.BuildSharedVariant() && len(library.StubsVersions()) > 0 && !library.UseSdk() {
@@ -1659,7 +1691,6 @@ func versionSelectorMutator(mctx android.BottomUpMutatorContext) {
library.SetAllStubsVersions(versions)
return
}
}
}
@@ -1668,6 +1699,16 @@ func versionSelectorMutator(mctx android.BottomUpMutatorContext) {
func versionMutator(mctx android.BottomUpMutatorContext) {
if library, ok := mctx.Module().(LinkableInterface); ok && CanBeVersionVariant(library) {
createVersionVariations(mctx, library.AllStubsVersions())
return
}
if m, ok := mctx.Module().(*Module); ok {
if m.SplitPerApiLevel() && m.IsSdkVariant() {
if mctx.Os() != android.Android {
return
}
createPerApiVersionVariations(mctx, m.MinSdkVersion())
}
}
}

View File

@@ -118,53 +118,6 @@ func ndkLibraryVersions(ctx android.BottomUpMutatorContext, from android.ApiLeve
return versionStrs
}
func generatePerApiVariants(ctx android.BottomUpMutatorContext,
from android.ApiLevel, perSplit func(*Module, android.ApiLevel)) {
versionStrs := ndkLibraryVersions(ctx, from)
modules := ctx.CreateVariations(versionStrs...)
for i, module := range modules {
perSplit(module.(*Module), android.ApiLevelOrPanic(ctx, versionStrs[i]))
}
}
func NdkApiMutator(ctx android.BottomUpMutatorContext) {
if m, ok := ctx.Module().(*Module); ok {
if m.Enabled() {
if compiler, ok := m.compiler.(*stubDecorator); ok {
if ctx.Os() != android.Android {
// These modules are always android.DeviceEnabled only, but
// those include Fuchsia devices, which we don't support.
ctx.Module().Disable()
return
}
firstVersion, err := nativeApiLevelFromUser(ctx,
String(compiler.properties.First_version))
if err != nil {
ctx.PropertyErrorf("first_version", err.Error())
return
}
m.SetAllStubsVersions(ndkLibraryVersions(ctx, firstVersion))
} else if m.SplitPerApiLevel() && m.IsSdkVariant() {
if ctx.Os() != android.Android {
return
}
from, err := nativeApiLevelFromUser(ctx, m.MinSdkVersion())
if err != nil {
ctx.PropertyErrorf("min_sdk_version", err.Error())
return
}
generatePerApiVariants(ctx, from,
func(m *Module, version android.ApiLevel) {
m.Properties.Sdk_version = StringPtr(version.String())
})
}
}
}
}
func (this *stubDecorator) initializeProperties(ctx BaseModuleContext) bool {
this.apiLevel = nativeApiLevelOrPanic(ctx, this.stubsVersion())