Merge "Remove memberDepsMutator, SdkAware et al" am: 351ca9aa81
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2314941 Change-Id: I1a2ba13d9d5989686a491d5de264e0a90b3bc9b2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
131
android/sdk.go
131
android/sdk.go
@@ -23,27 +23,6 @@ import (
|
||||
"github.com/google/blueprint/proptools"
|
||||
)
|
||||
|
||||
// sdkAwareWithoutModule is provided simply to improve code navigation with the IDE.
|
||||
type sdkAwareWithoutModule interface {
|
||||
sdkBase() *SdkBase
|
||||
MakeMemberOf(sdk SdkRef)
|
||||
IsInAnySdk() bool
|
||||
|
||||
// IsVersioned determines whether the module is versioned, i.e. has a name of the form
|
||||
// <name>@<version>
|
||||
IsVersioned() bool
|
||||
|
||||
ContainingSdk() SdkRef
|
||||
MemberName() string
|
||||
}
|
||||
|
||||
// SdkAware is the interface that must be supported by any module to become a member of SDK or to be
|
||||
// built with SDK
|
||||
type SdkAware interface {
|
||||
Module
|
||||
sdkAwareWithoutModule
|
||||
}
|
||||
|
||||
// minApiLevelForSdkSnapshot provides access to the min_sdk_version for MinApiLevelForSdkSnapshot
|
||||
type minApiLevelForSdkSnapshot interface {
|
||||
MinSdkVersion(ctx EarlyModuleContext) SdkSpec
|
||||
@@ -64,116 +43,6 @@ func MinApiLevelForSdkSnapshot(ctx EarlyModuleContext, module Module) ApiLevel {
|
||||
return minApiLevel
|
||||
}
|
||||
|
||||
// SdkRef refers to a version of an SDK
|
||||
type SdkRef struct {
|
||||
Name string
|
||||
Version string
|
||||
}
|
||||
|
||||
// Unversioned determines if the SdkRef is referencing to the unversioned SDK module
|
||||
func (s SdkRef) Unversioned() bool {
|
||||
return s.Version == ""
|
||||
}
|
||||
|
||||
// String returns string representation of this SdkRef for debugging purpose
|
||||
func (s SdkRef) String() string {
|
||||
if s.Name == "" {
|
||||
return "(No Sdk)"
|
||||
}
|
||||
if s.Unversioned() {
|
||||
return s.Name
|
||||
}
|
||||
return s.Name + string(SdkVersionSeparator) + s.Version
|
||||
}
|
||||
|
||||
// SdkVersionSeparator is a character used to separate an sdk name and its version
|
||||
const SdkVersionSeparator = '@'
|
||||
|
||||
// ParseSdkRef parses a `name@version` style string into a corresponding SdkRef struct
|
||||
func ParseSdkRef(ctx BaseModuleContext, str string, property string) SdkRef {
|
||||
tokens := strings.Split(str, string(SdkVersionSeparator))
|
||||
if len(tokens) < 1 || len(tokens) > 2 {
|
||||
ctx.PropertyErrorf(property, "%q does not follow name@version syntax", str)
|
||||
return SdkRef{Name: "invalid sdk name", Version: "invalid sdk version"}
|
||||
}
|
||||
|
||||
name := tokens[0]
|
||||
|
||||
var version string
|
||||
if len(tokens) == 2 {
|
||||
version = tokens[1]
|
||||
}
|
||||
|
||||
return SdkRef{Name: name, Version: version}
|
||||
}
|
||||
|
||||
type SdkRefs []SdkRef
|
||||
|
||||
// Contains tells if the given SdkRef is in this list of SdkRef's
|
||||
func (refs SdkRefs) Contains(s SdkRef) bool {
|
||||
for _, r := range refs {
|
||||
if r == s {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type sdkProperties struct {
|
||||
// The SDK that this module is a member of. nil if it is not a member of any SDK
|
||||
ContainingSdk *SdkRef `blueprint:"mutated"`
|
||||
|
||||
// Name of the module that this sdk member is representing
|
||||
Sdk_member_name *string
|
||||
}
|
||||
|
||||
// SdkBase is a struct that is expected to be included in module types to implement the SdkAware
|
||||
// interface. InitSdkAwareModule should be called to initialize this struct.
|
||||
type SdkBase struct {
|
||||
properties sdkProperties
|
||||
module SdkAware
|
||||
}
|
||||
|
||||
func (s *SdkBase) sdkBase() *SdkBase {
|
||||
return s
|
||||
}
|
||||
|
||||
// MakeMemberOf sets this module to be a member of a specific SDK
|
||||
func (s *SdkBase) MakeMemberOf(sdk SdkRef) {
|
||||
s.properties.ContainingSdk = &sdk
|
||||
}
|
||||
|
||||
// IsInAnySdk returns true if this module is a member of any SDK
|
||||
func (s *SdkBase) IsInAnySdk() bool {
|
||||
return s.properties.ContainingSdk != nil
|
||||
}
|
||||
|
||||
// IsVersioned returns true if this module is versioned.
|
||||
func (s *SdkBase) IsVersioned() bool {
|
||||
return strings.Contains(s.module.Name(), "@")
|
||||
}
|
||||
|
||||
// ContainingSdk returns the SDK that this module is a member of
|
||||
func (s *SdkBase) ContainingSdk() SdkRef {
|
||||
if s.properties.ContainingSdk != nil {
|
||||
return *s.properties.ContainingSdk
|
||||
}
|
||||
return SdkRef{Name: "", Version: ""}
|
||||
}
|
||||
|
||||
// MemberName returns the name of the module that this SDK member is overriding
|
||||
func (s *SdkBase) MemberName() string {
|
||||
return proptools.String(s.properties.Sdk_member_name)
|
||||
}
|
||||
|
||||
// InitSdkAwareModule initializes the SdkBase struct. This must be called by all modules including
|
||||
// SdkBase.
|
||||
func InitSdkAwareModule(m SdkAware) {
|
||||
base := m.sdkBase()
|
||||
base.module = m
|
||||
m.AddProperties(&base.properties)
|
||||
}
|
||||
|
||||
// SnapshotBuilder provides support for generating the build rules which will build the snapshot.
|
||||
type SnapshotBuilder interface {
|
||||
// CopyToSnapshot generates a rule that will copy the src to the dest (which is a snapshot
|
||||
|
35
sdk/sdk.go
35
sdk/sdk.go
@@ -17,7 +17,6 @@ package sdk
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"strconv"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
@@ -280,7 +279,6 @@ var _ android.SdkDependencyContext = (*dependencyContext)(nil)
|
||||
// outside of the sdk package
|
||||
func RegisterPreDepsMutators(ctx android.RegisterMutatorsContext) {
|
||||
ctx.BottomUp("SdkMember", memberMutator).Parallel()
|
||||
ctx.TopDown("SdkMember_deps", memberDepsMutator).Parallel()
|
||||
}
|
||||
|
||||
type dependencyTag struct {
|
||||
@@ -324,36 +322,3 @@ func memberMutator(mctx android.BottomUpMutatorContext) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Step 2: record that dependencies of SDK modules are members of the SDK modules
|
||||
func memberDepsMutator(mctx android.TopDownMutatorContext) {
|
||||
if s, ok := mctx.Module().(*sdk); ok {
|
||||
mySdkRef := android.ParseSdkRef(mctx, mctx.ModuleName(), "name")
|
||||
if s.snapshot() && mySdkRef.Unversioned() {
|
||||
mctx.PropertyErrorf("name", "sdk_snapshot should be named as <name>@<version>. "+
|
||||
"Did you manually modify Android.bp?")
|
||||
}
|
||||
if !s.snapshot() && !mySdkRef.Unversioned() {
|
||||
mctx.PropertyErrorf("name", "sdk shouldn't be named as <name>@<version>.")
|
||||
}
|
||||
if mySdkRef.Version != "" && mySdkRef.Version != "current" {
|
||||
if _, err := strconv.Atoi(mySdkRef.Version); err != nil {
|
||||
mctx.PropertyErrorf("name", "version %q is neither a number nor \"current\"", mySdkRef.Version)
|
||||
}
|
||||
}
|
||||
|
||||
mctx.VisitDirectDeps(func(child android.Module) {
|
||||
if member, ok := child.(android.SdkAware); ok {
|
||||
member.MakeMemberOf(mySdkRef)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// An interface that encapsulates all the functionality needed to manage the sdk dependencies.
|
||||
//
|
||||
// It is a mixture of apex and sdk module functionality.
|
||||
type sdkAndApexModule interface {
|
||||
android.Module
|
||||
android.DepIsInSameApex
|
||||
}
|
||||
|
Reference in New Issue
Block a user