diff --git a/android/sdk.go b/android/sdk.go index 063091e86..8b23d63a9 100644 --- a/android/sdk.go +++ b/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 - // @ - 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 diff --git a/sdk/sdk.go b/sdk/sdk.go index aeeedb428..66a1b54ae 100644 --- a/sdk/sdk.go +++ b/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 @. "+ - "Did you manually modify Android.bp?") - } - if !s.snapshot() && !mySdkRef.Unversioned() { - mctx.PropertyErrorf("name", "sdk shouldn't be named as @.") - } - 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 -}