From b1f0f2aa804d058ac666a41decefca355eb4852b Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Thu, 9 Sep 2021 17:06:07 +0100 Subject: [PATCH] Extract handling of image variations from target loop This separates the selection of the image variations to depend upon from the main target loop. Follow up changes will add additional image variations. Bug: 195754365 Test: m nothing Change-Id: Ia1a61b1efbc96d92cb2faf1e2c4d1c5c752b8083 --- cc/library_sdk_member.go | 78 +++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 20 deletions(-) diff --git a/cc/library_sdk_member.go b/cc/library_sdk_member.go index bed7954b2..73187bd62 100644 --- a/cc/library_sdk_member.go +++ b/cc/library_sdk_member.go @@ -102,27 +102,65 @@ func (mt *librarySdkMemberType) AddDependencies(ctx android.SdkDependencyContext // Include the native bridge targets as well. targets = includeNativeBridgeTargets } - for _, target := range targets { - name, version := StubsLibNameAndVersion(lib) - if version == "" { - version = "latest" - } - variations := target.Variations() - if ctx.Device() { - variations = append(variations, - blueprint.Variation{Mutator: "image", Variation: android.CoreVariation}) - } - if mt.linkTypes == nil { - ctx.AddFarVariationDependencies(variations, dependencyTag, name) - } else { - for _, linkType := range mt.linkTypes { - libVariations := append(variations, - blueprint.Variation{Mutator: "link", Variation: linkType}) - if ctx.Device() && linkType == "shared" { - libVariations = append(libVariations, - blueprint.Variation{Mutator: "version", Variation: version}) + + // memberDependency encapsulates information about the dependencies to add for this member. + type memberDependency struct { + // The targets to depend upon. + targets []android.Target + + // Additional image variations to depend upon, is either nil for no image variation or + // contains a single image variation. + imageVariations []blueprint.Variation + } + + // Extract the name and version from the module name. + name, version := StubsLibNameAndVersion(lib) + if version == "" { + version = "latest" + } + + // Compute the set of dependencies to add. + var memberDependencies []memberDependency + if ctx.Host() { + // Host does not support image variations so add a dependency without any. + memberDependencies = append(memberDependencies, memberDependency{ + targets: targets, + }) + } else { + // Otherwise, this is targeting the device so add a dependency on the core image variation + // (image:""). + memberDependencies = append(memberDependencies, memberDependency{ + imageVariations: []blueprint.Variation{{Mutator: "image", Variation: android.CoreVariation}}, + targets: targets, + }) + } + + // For each dependency in the list add dependencies on the targets with the correct variations. + for _, dependency := range memberDependencies { + // For each target add a dependency on the target with any additional dependencies. + for _, target := range dependency.targets { + // Get the variations for the target. + variations := target.Variations() + + // Add any additional dependencies needed. + variations = append(variations, dependency.imageVariations...) + + if mt.linkTypes == nil { + // No link types are supported so add a dependency directly. + ctx.AddFarVariationDependencies(variations, dependencyTag, name) + } else { + // Otherwise, add a dependency on each supported link type in turn. + for _, linkType := range mt.linkTypes { + libVariations := append(variations, + blueprint.Variation{Mutator: "link", Variation: linkType}) + // If this is for the device and a shared link type then add a dependency onto the + // appropriate version specific variant of the module. + if ctx.Device() && linkType == "shared" { + libVariations = append(libVariations, + blueprint.Variation{Mutator: "version", Variation: version}) + } + ctx.AddFarVariationDependencies(libVariations, dependencyTag, name) } - ctx.AddFarVariationDependencies(libVariations, dependencyTag, name) } } }