Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 405f2d44 authored by Spandan Das's avatar Spandan Das
Browse files

Use shared variant of dep for packaging

For native modules that have both static and shared variants (e.g.
cc_library), the deps mutator of android_filesystem would always create
a dep to the static variant. This is likely due to the fact that
`AddFarVariationDependencies` creates a dependency on the first variant
of the dep which matches the requested variations. `static` appears
before `shared` in linkMutator, and therefore android_filesystem would
always create a dep to the static variant.

This CL uses `OtherModuleFarDependencyVariantExists` to create a dep to
the shared variant. If a cc_library is listed in `PRODUCT_PACKAGES`, it
always means the shared variant.

Test: go test./filesystem
Test: diff in kati install files of vendor/ before and after this CL
https://diff.googleplex.com/#key=qrY73chVkwff

Change-Id: Iea9d6fde199ef95d43da2c041e2f84e5a7951285
parent 47c0826a
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -377,7 +377,17 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep
			if p.IgnoreMissingDependencies && !ctx.OtherModuleExists(dep) {
			if p.IgnoreMissingDependencies && !ctx.OtherModuleExists(dep) {
				continue
				continue
			}
			}
			ctx.AddFarVariationDependencies(t.Variations(), depTag, dep)
			targetVariation := t.Variations()
			sharedVariation := blueprint.Variation{
				Mutator:   "link",
				Variation: "shared",
			}
			// If a shared variation exists, use that. Static variants do not provide any standalone files
			// for packaging.
			if ctx.OtherModuleFarDependencyVariantExists([]blueprint.Variation{sharedVariation}, dep) {
				targetVariation = append(targetVariation, sharedVariation)
			}
			ctx.AddFarVariationDependencies(targetVariation, depTag, dep)
		}
		}
	}
	}
}
}
+19 −0
Original line number Original line Diff line number Diff line
@@ -610,3 +610,22 @@ func TestDoNotPackageCrossPartitionDependencies(t *testing.T) {
	fileList := android.ContentFromFileRuleForTests(t, result.TestContext, partition.Output("fileList"))
	fileList := android.ContentFromFileRuleForTests(t, result.TestContext, partition.Output("fileList"))
	android.AssertDeepEquals(t, "filesystem with dependencies on different partition", "bin/binfoo\n", fileList)
	android.AssertDeepEquals(t, "filesystem with dependencies on different partition", "bin/binfoo\n", fileList)
}
}

// If a cc_library is listed in `deps`, and it has a shared and static variant, then the shared variant
// should be installed.
func TestUseSharedVariationOfNativeLib(t *testing.T) {
	result := fixture.RunTestWithBp(t, `
		android_filesystem {
			name: "myfilesystem",
			deps: ["libfoo"],
		}
		// cc_library will create a static and shared variant.
		cc_library {
			name: "libfoo",
		}
	`)

	partition := result.ModuleForTests("myfilesystem", "android_common")
	fileList := android.ContentFromFileRuleForTests(t, result.TestContext, partition.Output("fileList"))
	android.AssertDeepEquals(t, "cc_library listed in deps", "lib64/libc++.so\nlib64/libc.so\nlib64/libdl.so\nlib64/libfoo.so\nlib64/libm.so\n", fileList)
}