Loading apex/androidmk.go +2 −2 Original line number Diff line number Diff line Loading @@ -226,8 +226,8 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { if len(moduleNames) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " ")) } if len(a.externalDeps) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.externalDeps, " ")) if len(a.requiredDeps) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.requiredDeps, " ")) } a.writeRequiredModules(w) var postInstallCommands []string Loading apex/apex.go +26 −5 Original line number Diff line number Diff line Loading @@ -341,6 +341,8 @@ type apexBundleProperties struct { // Whether this APEX should support Android10. Default is false. If this is set true, then apex_manifest.json is bundled as well // because Android10 requires legacy apex_manifest.json instead of apex_manifest.pb Legacy_android10_support *bool IsCoverageVariant bool `blueprint:"mutated"` } type apexTargetBundleProperties struct { Loading Loading @@ -520,8 +522,13 @@ type apexBundle struct { // list of files to be included in this apex filesInfo []apexFile // list of module names that this APEX is depending on // list of module names that should be installed along with this APEX requiredDeps []string // list of module names that this APEX is depending on (to be shown via *-deps-info target) externalDeps []string // list of module names that this APEX is including (to be shown via *-deps-info target) internalDeps []string testApex bool vndkApex bool Loading Loading @@ -817,6 +824,10 @@ func (a *apexBundle) HideFromMake() { a.properties.HideFromMake = true } func (a *apexBundle) MarkAsCoverageVariant(coverage bool) { a.properties.IsCoverageVariant = coverage } // TODO(jiyong) move apexFileFor* close to the apexFile type definition func apexFileForNativeLibrary(ctx android.BaseModuleContext, ccMod *cc.Module, handleSpecialLibs bool) apexFile { // Decide the APEX-local directory by the multilib of the library Loading Loading @@ -945,7 +956,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.primaryApexType = true if ctx.Config().InstallExtraFlattenedApexes() { a.externalDeps = append(a.externalDeps, a.Name()+flattenedSuffix) a.requiredDeps = append(a.requiredDeps, a.Name()+flattenedSuffix) } } case zipApex: Loading Loading @@ -1004,6 +1015,9 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { depTag := ctx.OtherModuleDependencyTag(child) depName := ctx.OtherModuleName(child) if _, isDirectDep := parent.(*apexBundle); isDirectDep { if depTag != keyTag && depTag != certificateTag { a.internalDeps = append(a.internalDeps, depName) } switch depTag { case sharedLibTag: if cc, ok := child.(*cc.Module); ok { Loading Loading @@ -1134,9 +1148,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { // // Always include if we are a host-apex however since those won't have any // system libraries. if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.Name(), a.externalDeps) { a.externalDeps = append(a.externalDeps, cc.Name()) if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.Name(), a.requiredDeps) { a.requiredDeps = append(a.requiredDeps, cc.Name()) } a.externalDeps = append(a.externalDeps, depName) requireNativeLibs = append(requireNativeLibs, cc.OutputFile().Path().Base()) // Don't track further return false Loading @@ -1144,6 +1159,8 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { af := apexFileForNativeLibrary(ctx, cc, handleSpecialLibs) af.transitiveDep = true filesInfo = append(filesInfo, af) a.internalDeps = append(a.internalDeps, depName) a.internalDeps = append(a.internalDeps, cc.AllStaticDeps()...) return true // track transitive dependencies } } else if cc.IsTestPerSrcDepTag(depTag) { Loading @@ -1159,8 +1176,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { return true // track transitive dependencies } } else if java.IsJniDepTag(depTag) { // Do nothing for JNI dep. JNI libraries are always embedded in APK-in-APEX. a.externalDeps = append(a.externalDeps, depName) return true } else if java.IsStaticLibDepTag(depTag) { a.internalDeps = append(a.internalDeps, depName) } else if am.CanHaveApexVariants() && am.IsInstallableToApex() { ctx.ModuleErrorf("unexpected tag %q for indirect dependency %q", depTag, depName) } Loading Loading @@ -1257,6 +1276,8 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } a.compatSymlinks = makeCompatSymlinks(a.BaseModuleName(), ctx) a.buildApexDependencyInfo(ctx) } func newApexBundle() *apexBundle { Loading apex/apex_test.go +19 −6 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr "apex_manifest.json": nil, "AndroidManifest.xml": nil, "system/sepolicy/apex/myapex-file_contexts": nil, "system/sepolicy/apex/myapex2-file_contexts": nil, "system/sepolicy/apex/otherapex-file_contexts": nil, "system/sepolicy/apex/commonapex-file_contexts": nil, "system/sepolicy/apex/com.android.vndk-file_contexts": nil, Loading Loading @@ -520,6 +521,12 @@ func TestBasicApex(t *testing.T) { } ensureListContains(t, noticeInputs, "NOTICE") ensureListContains(t, noticeInputs, "custom_notice") depsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("myapex-deps-info.txt").Args["content"], "\\n") ensureListContains(t, depsInfo, "internal myjar") ensureListContains(t, depsInfo, "internal mylib") ensureListContains(t, depsInfo, "internal mylib2") ensureListContains(t, depsInfo, "internal myotherjar") } func TestDefaults(t *testing.T) { Loading Loading @@ -740,13 +747,13 @@ func TestApexWithStubs(t *testing.T) { func TestApexWithExplicitStubsDependency(t *testing.T) { ctx, _ := testApex(t, ` apex { name: "myapex", key: "myapex.key", name: "myapex2", key: "myapex2.key", native_shared_libs: ["mylib"], } apex_key { name: "myapex.key", name: "myapex2.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } Loading Loading @@ -779,7 +786,7 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { `) apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") apexRule := ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Rule("apexRule") copyCmds := apexRule.Args["copy_commands"] // Ensure that direct non-stubs dep is always included Loading @@ -791,7 +798,7 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { // Ensure that dependency of stubs is not included ensureNotContains(t, copyCmds, "image.apex/lib64/libbar.so") mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"] mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex2").Rule("ld").Args["libFlags"] // Ensure that mylib is linking with version 10 of libfoo ensureContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared_10/libfoo.so") Loading @@ -802,6 +809,12 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { // Ensure that libfoo stubs is not linking to libbar (since it is a stubs) ensureNotContains(t, libFooStubsLdFlags, "libbar.so") depsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("myapex2-deps-info.txt").Args["content"], "\\n") ensureListContains(t, depsInfo, "internal mylib") ensureListContains(t, depsInfo, "external libfoo") ensureListNotContains(t, depsInfo, "internal libfoo") ensureListNotContains(t, depsInfo, "external mylib") } func TestApexWithRuntimeLibsDependency(t *testing.T) { Loading Loading @@ -2652,7 +2665,7 @@ func TestInstallExtraFlattenedApexes(t *testing.T) { config.TestProductVariables.InstallExtraFlattenedApexes = proptools.BoolPtr(true) }) ab := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) ensureListContains(t, ab.externalDeps, "myapex.flattened") ensureListContains(t, ab.requiredDeps, "myapex.flattened") mk := android.AndroidMkDataForTest(t, config, "", ab) var builder strings.Builder mk.Custom(&builder, ab.Name(), "TARGET_", "", mk) Loading apex/builder.go +43 −0 Original line number Diff line number Diff line Loading @@ -554,3 +554,46 @@ func (a *apexBundle) getOverrideManifestPackageName(ctx android.ModuleContext) s } return "" } func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) { if !a.primaryApexType { return } if a.properties.IsCoverageVariant { // Otherwise, we will have duplicated rules for coverage and // non-coverage variants of the same APEX return } internalDeps := a.internalDeps externalDeps := a.externalDeps internalDeps = android.SortedUniqueStrings(internalDeps) externalDeps = android.SortedUniqueStrings(externalDeps) externalDeps = android.RemoveListFromList(externalDeps, internalDeps) var content strings.Builder for _, name := range internalDeps { fmt.Fprintf(&content, "internal %s\\n", name) } for _, name := range externalDeps { fmt.Fprintf(&content, "external %s\\n", name) } depsInfoFile := android.PathForOutput(ctx, a.Name()+"-deps-info.txt") ctx.Build(pctx, android.BuildParams{ Rule: android.WriteFile, Description: "Dependency Info", Output: depsInfoFile, Args: map[string]string{ "content": content.String(), }, }) ctx.Build(pctx, android.BuildParams{ Rule: android.Phony, Output: android.PathForPhony(ctx, a.Name()+"-deps-info"), Inputs: []android.Path{depsInfoFile}, }) } cc/cc.go +25 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,13 @@ func IsSharedDepTag(depTag blueprint.DependencyTag) bool { return ok && ccDepTag.Shared } func IsStaticDepTag(depTag blueprint.DependencyTag) bool { ccDepTag, ok := depTag.(DependencyTag) return ok && (ccDepTag == staticExportDepTag || ccDepTag == lateStaticDepTag || ccDepTag == wholeStaticDepTag) } func IsRuntimeDepTag(depTag blueprint.DependencyTag) bool { ccDepTag, ok := depTag.(DependencyTag) return ok && ccDepTag == runtimeDepTag Loading Loading @@ -463,6 +470,9 @@ type Module struct { makeLinkType string // Kythe (source file indexer) paths for this compilation module kytheFiles android.Paths // name of the modules that are direct or indirect static deps of this module allStaticDeps []string } func (c *Module) Toc() android.OptionalPath { Loading Loading @@ -1258,6 +1268,15 @@ func orderStaticModuleDeps(module LinkableInterface, staticDeps []LinkableInterf return results } func gatherTransitiveStaticDeps(staticDeps []LinkableInterface) []string { var ret []string for _, dep := range staticDeps { ret = append(ret, dep.Module().Name()) ret = append(ret, dep.AllStaticDeps()...) } return android.FirstUniqueStrings(ret) } func (c *Module) IsTestPerSrcAllTestsVariation() bool { test, ok := c.linker.(testPerSrc) return ok && test.isAllTestsVariation() Loading Loading @@ -2328,6 +2347,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { c.sabi.Properties.ReexportedIncludes = android.FirstUniqueStrings(c.sabi.Properties.ReexportedIncludes) } c.allStaticDeps = gatherTransitiveStaticDeps(directStaticDeps) return depPaths } Loading Loading @@ -2481,6 +2502,10 @@ func (c *Module) installable() bool { return false } func (c *Module) AllStaticDeps() []string { return c.allStaticDeps } func (c *Module) AndroidMkWriteAdditionalDependenciesForSourceAbiDiff(w io.Writer) { if c.linker != nil { if library, ok := c.linker.(*libraryDecorator); ok { Loading Loading
apex/androidmk.go +2 −2 Original line number Diff line number Diff line Loading @@ -226,8 +226,8 @@ func (a *apexBundle) androidMkForType() android.AndroidMkData { if len(moduleNames) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " ")) } if len(a.externalDeps) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.externalDeps, " ")) if len(a.requiredDeps) > 0 { fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(a.requiredDeps, " ")) } a.writeRequiredModules(w) var postInstallCommands []string Loading
apex/apex.go +26 −5 Original line number Diff line number Diff line Loading @@ -341,6 +341,8 @@ type apexBundleProperties struct { // Whether this APEX should support Android10. Default is false. If this is set true, then apex_manifest.json is bundled as well // because Android10 requires legacy apex_manifest.json instead of apex_manifest.pb Legacy_android10_support *bool IsCoverageVariant bool `blueprint:"mutated"` } type apexTargetBundleProperties struct { Loading Loading @@ -520,8 +522,13 @@ type apexBundle struct { // list of files to be included in this apex filesInfo []apexFile // list of module names that this APEX is depending on // list of module names that should be installed along with this APEX requiredDeps []string // list of module names that this APEX is depending on (to be shown via *-deps-info target) externalDeps []string // list of module names that this APEX is including (to be shown via *-deps-info target) internalDeps []string testApex bool vndkApex bool Loading Loading @@ -817,6 +824,10 @@ func (a *apexBundle) HideFromMake() { a.properties.HideFromMake = true } func (a *apexBundle) MarkAsCoverageVariant(coverage bool) { a.properties.IsCoverageVariant = coverage } // TODO(jiyong) move apexFileFor* close to the apexFile type definition func apexFileForNativeLibrary(ctx android.BaseModuleContext, ccMod *cc.Module, handleSpecialLibs bool) apexFile { // Decide the APEX-local directory by the multilib of the library Loading Loading @@ -945,7 +956,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { a.primaryApexType = true if ctx.Config().InstallExtraFlattenedApexes() { a.externalDeps = append(a.externalDeps, a.Name()+flattenedSuffix) a.requiredDeps = append(a.requiredDeps, a.Name()+flattenedSuffix) } } case zipApex: Loading Loading @@ -1004,6 +1015,9 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { depTag := ctx.OtherModuleDependencyTag(child) depName := ctx.OtherModuleName(child) if _, isDirectDep := parent.(*apexBundle); isDirectDep { if depTag != keyTag && depTag != certificateTag { a.internalDeps = append(a.internalDeps, depName) } switch depTag { case sharedLibTag: if cc, ok := child.(*cc.Module); ok { Loading Loading @@ -1134,9 +1148,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { // // Always include if we are a host-apex however since those won't have any // system libraries. if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.Name(), a.externalDeps) { a.externalDeps = append(a.externalDeps, cc.Name()) if !android.DirectlyInAnyApex(ctx, cc.Name()) && !android.InList(cc.Name(), a.requiredDeps) { a.requiredDeps = append(a.requiredDeps, cc.Name()) } a.externalDeps = append(a.externalDeps, depName) requireNativeLibs = append(requireNativeLibs, cc.OutputFile().Path().Base()) // Don't track further return false Loading @@ -1144,6 +1159,8 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { af := apexFileForNativeLibrary(ctx, cc, handleSpecialLibs) af.transitiveDep = true filesInfo = append(filesInfo, af) a.internalDeps = append(a.internalDeps, depName) a.internalDeps = append(a.internalDeps, cc.AllStaticDeps()...) return true // track transitive dependencies } } else if cc.IsTestPerSrcDepTag(depTag) { Loading @@ -1159,8 +1176,10 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { return true // track transitive dependencies } } else if java.IsJniDepTag(depTag) { // Do nothing for JNI dep. JNI libraries are always embedded in APK-in-APEX. a.externalDeps = append(a.externalDeps, depName) return true } else if java.IsStaticLibDepTag(depTag) { a.internalDeps = append(a.internalDeps, depName) } else if am.CanHaveApexVariants() && am.IsInstallableToApex() { ctx.ModuleErrorf("unexpected tag %q for indirect dependency %q", depTag, depName) } Loading Loading @@ -1257,6 +1276,8 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) { } a.compatSymlinks = makeCompatSymlinks(a.BaseModuleName(), ctx) a.buildApexDependencyInfo(ctx) } func newApexBundle() *apexBundle { Loading
apex/apex_test.go +19 −6 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr "apex_manifest.json": nil, "AndroidManifest.xml": nil, "system/sepolicy/apex/myapex-file_contexts": nil, "system/sepolicy/apex/myapex2-file_contexts": nil, "system/sepolicy/apex/otherapex-file_contexts": nil, "system/sepolicy/apex/commonapex-file_contexts": nil, "system/sepolicy/apex/com.android.vndk-file_contexts": nil, Loading Loading @@ -520,6 +521,12 @@ func TestBasicApex(t *testing.T) { } ensureListContains(t, noticeInputs, "NOTICE") ensureListContains(t, noticeInputs, "custom_notice") depsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("myapex-deps-info.txt").Args["content"], "\\n") ensureListContains(t, depsInfo, "internal myjar") ensureListContains(t, depsInfo, "internal mylib") ensureListContains(t, depsInfo, "internal mylib2") ensureListContains(t, depsInfo, "internal myotherjar") } func TestDefaults(t *testing.T) { Loading Loading @@ -740,13 +747,13 @@ func TestApexWithStubs(t *testing.T) { func TestApexWithExplicitStubsDependency(t *testing.T) { ctx, _ := testApex(t, ` apex { name: "myapex", key: "myapex.key", name: "myapex2", key: "myapex2.key", native_shared_libs: ["mylib"], } apex_key { name: "myapex.key", name: "myapex2.key", public_key: "testkey.avbpubkey", private_key: "testkey.pem", } Loading Loading @@ -779,7 +786,7 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { `) apexRule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexRule") apexRule := ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Rule("apexRule") copyCmds := apexRule.Args["copy_commands"] // Ensure that direct non-stubs dep is always included Loading @@ -791,7 +798,7 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { // Ensure that dependency of stubs is not included ensureNotContains(t, copyCmds, "image.apex/lib64/libbar.so") mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex").Rule("ld").Args["libFlags"] mylibLdFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_shared_myapex2").Rule("ld").Args["libFlags"] // Ensure that mylib is linking with version 10 of libfoo ensureContains(t, mylibLdFlags, "libfoo/android_arm64_armv8-a_shared_10/libfoo.so") Loading @@ -802,6 +809,12 @@ func TestApexWithExplicitStubsDependency(t *testing.T) { // Ensure that libfoo stubs is not linking to libbar (since it is a stubs) ensureNotContains(t, libFooStubsLdFlags, "libbar.so") depsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("myapex2-deps-info.txt").Args["content"], "\\n") ensureListContains(t, depsInfo, "internal mylib") ensureListContains(t, depsInfo, "external libfoo") ensureListNotContains(t, depsInfo, "internal libfoo") ensureListNotContains(t, depsInfo, "external mylib") } func TestApexWithRuntimeLibsDependency(t *testing.T) { Loading Loading @@ -2652,7 +2665,7 @@ func TestInstallExtraFlattenedApexes(t *testing.T) { config.TestProductVariables.InstallExtraFlattenedApexes = proptools.BoolPtr(true) }) ab := ctx.ModuleForTests("myapex", "android_common_myapex_image").Module().(*apexBundle) ensureListContains(t, ab.externalDeps, "myapex.flattened") ensureListContains(t, ab.requiredDeps, "myapex.flattened") mk := android.AndroidMkDataForTest(t, config, "", ab) var builder strings.Builder mk.Custom(&builder, ab.Name(), "TARGET_", "", mk) Loading
apex/builder.go +43 −0 Original line number Diff line number Diff line Loading @@ -554,3 +554,46 @@ func (a *apexBundle) getOverrideManifestPackageName(ctx android.ModuleContext) s } return "" } func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) { if !a.primaryApexType { return } if a.properties.IsCoverageVariant { // Otherwise, we will have duplicated rules for coverage and // non-coverage variants of the same APEX return } internalDeps := a.internalDeps externalDeps := a.externalDeps internalDeps = android.SortedUniqueStrings(internalDeps) externalDeps = android.SortedUniqueStrings(externalDeps) externalDeps = android.RemoveListFromList(externalDeps, internalDeps) var content strings.Builder for _, name := range internalDeps { fmt.Fprintf(&content, "internal %s\\n", name) } for _, name := range externalDeps { fmt.Fprintf(&content, "external %s\\n", name) } depsInfoFile := android.PathForOutput(ctx, a.Name()+"-deps-info.txt") ctx.Build(pctx, android.BuildParams{ Rule: android.WriteFile, Description: "Dependency Info", Output: depsInfoFile, Args: map[string]string{ "content": content.String(), }, }) ctx.Build(pctx, android.BuildParams{ Rule: android.Phony, Output: android.PathForPhony(ctx, a.Name()+"-deps-info"), Inputs: []android.Path{depsInfoFile}, }) }
cc/cc.go +25 −0 Original line number Diff line number Diff line Loading @@ -398,6 +398,13 @@ func IsSharedDepTag(depTag blueprint.DependencyTag) bool { return ok && ccDepTag.Shared } func IsStaticDepTag(depTag blueprint.DependencyTag) bool { ccDepTag, ok := depTag.(DependencyTag) return ok && (ccDepTag == staticExportDepTag || ccDepTag == lateStaticDepTag || ccDepTag == wholeStaticDepTag) } func IsRuntimeDepTag(depTag blueprint.DependencyTag) bool { ccDepTag, ok := depTag.(DependencyTag) return ok && ccDepTag == runtimeDepTag Loading Loading @@ -463,6 +470,9 @@ type Module struct { makeLinkType string // Kythe (source file indexer) paths for this compilation module kytheFiles android.Paths // name of the modules that are direct or indirect static deps of this module allStaticDeps []string } func (c *Module) Toc() android.OptionalPath { Loading Loading @@ -1258,6 +1268,15 @@ func orderStaticModuleDeps(module LinkableInterface, staticDeps []LinkableInterf return results } func gatherTransitiveStaticDeps(staticDeps []LinkableInterface) []string { var ret []string for _, dep := range staticDeps { ret = append(ret, dep.Module().Name()) ret = append(ret, dep.AllStaticDeps()...) } return android.FirstUniqueStrings(ret) } func (c *Module) IsTestPerSrcAllTestsVariation() bool { test, ok := c.linker.(testPerSrc) return ok && test.isAllTestsVariation() Loading Loading @@ -2328,6 +2347,8 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { c.sabi.Properties.ReexportedIncludes = android.FirstUniqueStrings(c.sabi.Properties.ReexportedIncludes) } c.allStaticDeps = gatherTransitiveStaticDeps(directStaticDeps) return depPaths } Loading Loading @@ -2481,6 +2502,10 @@ func (c *Module) installable() bool { return false } func (c *Module) AllStaticDeps() []string { return c.allStaticDeps } func (c *Module) AndroidMkWriteAdditionalDependenciesForSourceAbiDiff(w io.Writer) { if c.linker != nil { if library, ok := c.linker.(*libraryDecorator); ok { Loading