Loading android/sdk.go +0 −131 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading sdk/sdk.go +0 −35 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package sdk import ( "fmt" "io" "strconv" "github.com/google/blueprint" "github.com/google/blueprint/proptools" Loading Loading @@ -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 { Loading Loading @@ -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 } Loading
android/sdk.go +0 −131 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
sdk/sdk.go +0 −35 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package sdk import ( "fmt" "io" "strconv" "github.com/google/blueprint" "github.com/google/blueprint/proptools" Loading Loading @@ -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 { Loading Loading @@ -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 }