summaryrefslogtreecommitdiff
path: root/sdk/sdk.go
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/sdk.go')
-rw-r--r--sdk/sdk.go72
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)
}
}
}