|
@@ -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
|