diff options
Diffstat (limited to 'sdk/sdk.go')
-rw-r--r-- | sdk/sdk.go | 72 |
1 files changed, 52 insertions, 20 deletions
diff --git a/sdk/sdk.go b/sdk/sdk.go index 18b0040b9..80dd088c8 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -27,6 +27,7 @@ import ( // registered before mutators in this package. See RegisterPostDepsMutators for more details. _ "android/soong/apex" "android/soong/cc" + "android/soong/java" ) func init() { @@ -37,6 +38,14 @@ func init() { android.RegisterModuleType("sdk_snapshot", SnapshotModuleFactory) android.PreDepsMutators(RegisterPreDepsMutators) android.PostDepsMutators(RegisterPostDepsMutators) + + // Populate the dependency tags for each member list property. This needs to + // be done here to break an initialization cycle. + for _, memberListProperty := range sdkMemberListProperties { + memberListProperty.dependencyTag = &sdkMemberDependencyTag{ + memberListProperty: memberListProperty, + } + } } type sdk struct { @@ -62,6 +71,45 @@ type sdkProperties struct { Snapshot bool `blueprint:"mutated"` } +type sdkMemberDependencyTag struct { + blueprint.BaseDependencyTag + memberListProperty *sdkMemberListProperty +} + +// Contains information about the sdk properties that list sdk members, e.g. +// Java_libs. +type sdkMemberListProperty struct { + // the name of the property as used in a .bp file + name string + + // getter for the list of member names + getter func(properties *sdkProperties) []string + + // the type of member referenced in the list + memberType android.SdkMemberType + + // the dependency tag used for items in this list. + dependencyTag *sdkMemberDependencyTag +} + +var sdkMemberListProperties = []*sdkMemberListProperty{ + { + name: "java_libs", + getter: func(properties *sdkProperties) []string { return properties.Java_libs }, + memberType: java.LibrarySdkMemberType, + }, + { + name: "stubs_sources", + getter: func(properties *sdkProperties) []string { return properties.Stubs_sources }, + memberType: java.DroidStubsSdkMemberType, + }, + { + name: "native_shared_libs", + getter: func(properties *sdkProperties) []string { return properties.Native_shared_libs }, + memberType: cc.LibrarySdkMemberType, + }, +} + // sdk defines an SDK which is a logical group of modules (e.g. native libs, headers, java libs, etc.) // which Mainline modules like APEX can choose to build with. func ModuleFactory() android.Module { @@ -145,10 +193,6 @@ type dependencyTag struct { blueprint.BaseDependencyTag } -// For dependencies from an SDK module to its members -// e.g. mysdk -> libfoo and libbar -var sdkMemberDepTag dependencyTag - // For dependencies from an in-development version of an SDK member to frozen versions of the same member // e.g. libfoo -> libfoo.mysdk.11 and libfoo.mysdk.12 type sdkMemberVesionedDepTag struct { @@ -160,22 +204,10 @@ type sdkMemberVesionedDepTag struct { // Step 1: create dependencies from an SDK module to its members. func memberMutator(mctx android.BottomUpMutatorContext) { if m, ok := mctx.Module().(*sdk); ok { - mctx.AddVariationDependencies(nil, sdkMemberDepTag, m.properties.Java_libs...) - mctx.AddVariationDependencies(nil, sdkMemberDepTag, m.properties.Stubs_sources...) - - targets := mctx.MultiTargets() - for _, target := range targets { - for _, lib := range m.properties.Native_shared_libs { - name, version := cc.StubsLibNameAndVersion(lib) - if version == "" { - version = cc.LatestStubsVersionFor(mctx.Config(), name) - } - mctx.AddFarVariationDependencies(append(target.Variations(), []blueprint.Variation{ - {Mutator: "image", Variation: android.CoreVariation}, - {Mutator: "link", Variation: "shared"}, - {Mutator: "version", Variation: version}, - }...), sdkMemberDepTag, name) - } + for _, memberListProperty := range sdkMemberListProperties { + names := memberListProperty.getter(&m.properties) + tag := memberListProperty.dependencyTag + memberListProperty.memberType.AddDependencies(mctx, tag, names) } } } |