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

Commit c8a12a78 authored by Spandan Das's avatar Spandan Das Committed by Automerger Merge Worker
Browse files

Merge "Reland "Skip packaging cross container cc deps of apk-in-apex"" into main am: 5faf0f5c

parents 8c9c0ab6 5faf0f5c
Loading
Loading
Loading
Loading
+26 −28
Original line number Diff line number Diff line
@@ -12148,34 +12148,32 @@ func TestApexVerifyNativeImplementationLibs(t *testing.T) {
			},
			dependencyPath: []string{"myapex", "libjni", "libbar", "libplatform"},
		},
		// TODO: embedded JNI in apps should be checked too, but Soong currently just packages the transitive
		//  JNI libraries even if they came from another apex.
		//{
		//	name:           "app jni library dependency in other apex",
		//	bpModifier:     addToSharedLibs("libembeddedjni", "libotherapex#impl"),
		//	dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libotherapex"},
		//},
		//{
		//	name: "transitive app jni library dependency in other apex",
		//	bpModifier: func(bp *bpmodify.Blueprint) {
		//		addToSharedLibs("libembeddedjni", "libbar")(bp)
		//		addToSharedLibs("libbar", "libotherapex#impl")(bp)
		//	},
		//	dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libotherapex"},
		//},
		//{
		//	name:           "app jni library dependency in platform",
		//	bpModifier:     addToSharedLibs("libembeddedjni", "libplatform#impl"),
		//	dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libplatform"},
		//},
		//{
		//	name: "transitive app jni library dependency in platform",
		//	bpModifier: func(bp *bpmodify.Blueprint) {
		//		addToSharedLibs("libembeddedjni", "libbar")(bp)
		//		addToSharedLibs("libbar", "libplatform#impl")(bp)
		//	},
		//	dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libplatform"},
		//},
		{
			name:           "app jni library dependency in other apex",
			bpModifier:     addToSharedLibs("libembeddedjni", "libotherapex#impl"),
			dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libotherapex"},
		},
		{
			name: "transitive app jni library dependency in other apex",
			bpModifier: func(bp *bpmodify.Blueprint) {
				addToSharedLibs("libembeddedjni", "libbar")(bp)
				addToSharedLibs("libbar", "libotherapex#impl")(bp)
			},
			dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libotherapex"},
		},
		{
			name:           "app jni library dependency in platform",
			bpModifier:     addToSharedLibs("libembeddedjni", "libplatform#impl"),
			dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libplatform"},
		},
		{
			name: "transitive app jni library dependency in platform",
			bpModifier: func(bp *bpmodify.Blueprint) {
				addToSharedLibs("libembeddedjni", "libbar")(bp)
				addToSharedLibs("libbar", "libplatform#impl")(bp)
			},
			dependencyPath: []string{"myapex", "myapp", "libembeddedjni", "libbar", "libplatform"},
		},
		{
			name:           "binary dependency in other apex",
			bpModifier:     addToSharedLibs("mybin", "libotherapex#impl"),
+5 −5
Original line number Diff line number Diff line
@@ -3345,17 +3345,17 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
	return depPaths
}

func ShouldUseStubForApex(ctx android.ModuleContext, dep android.Module) bool {
func ShouldUseStubForApex(ctx android.ModuleContext, parent, dep android.Module) bool {
	inVendorOrProduct := false
	bootstrap := false
	if linkable, ok := ctx.Module().(LinkableInterface); !ok {
		panic(fmt.Errorf("Not a Linkable module: %q", ctx.ModuleName()))
	if linkable, ok := parent.(LinkableInterface); !ok {
		ctx.ModuleErrorf("Not a Linkable module: %q", ctx.ModuleName())
	} else {
		inVendorOrProduct = linkable.InVendorOrProduct()
		bootstrap = linkable.Bootstrap()
	}

	apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider)
	apexInfo, _ := android.OtherModuleProvider(ctx, parent, android.ApexInfoProvider)

	useStubs := false

@@ -3402,7 +3402,7 @@ func ChooseStubOrImpl(ctx android.ModuleContext, dep android.Module) (SharedLibr

	if !libDepTag.explicitlyVersioned && len(sharedLibraryStubsInfo.SharedStubLibraries) > 0 {
		// when to use (unspecified) stubs, use the latest one.
		if ShouldUseStubForApex(ctx, dep) {
		if ShouldUseStubForApex(ctx, ctx.Module(), dep) {
			stubs := sharedLibraryStubsInfo.SharedStubLibraries
			toUse := stubs[len(stubs)-1]
			sharedLibraryInfo = toUse.SharedLibraryInfo
+4 −0
Original line number Diff line number Diff line
@@ -135,6 +135,10 @@ type LinkableInterface interface {
	// IsNdk returns true if the library is in the configs known NDK list.
	IsNdk(config android.Config) bool

	// HasStubsVariants true if this module is a stub or has a sibling variant
	// that is a stub.
	HasStubsVariants() bool

	// IsStubs returns true if the this is a stubs library.
	IsStubs() bool

+14 −3
Original line number Diff line number Diff line
@@ -1082,7 +1082,18 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface,
			app.SdkVersion(ctx).Kind != android.SdkCorePlatform && !app.RequiresStableAPIs(ctx)
	}
	jniLib, prebuiltJniPackages := collectJniDeps(ctx, shouldCollectRecursiveNativeDeps,
		checkNativeSdkVersion, func(dep cc.LinkableInterface) bool { return !dep.IsNdk(ctx.Config()) && !dep.IsStubs() })
		checkNativeSdkVersion, func(parent, child android.Module) bool {
			apkInApex := ctx.Module().(android.ApexModule).NotInPlatform()
			childLinkable, _ := child.(cc.LinkableInterface)
			parentLinkable, _ := parent.(cc.LinkableInterface)
			useStubsOfDep := childLinkable.IsStubs()
			if apkInApex && parentLinkable != nil {
				// APK-in-APEX
				// If the parent is a linkable interface, use stubs if the dependency edge crosses an apex boundary.
				useStubsOfDep = useStubsOfDep || (childLinkable.HasStubsVariants() && cc.ShouldUseStubForApex(ctx, parent, child))
			}
			return !childLinkable.IsNdk(ctx.Config()) && !useStubsOfDep
		})

	var certificates []Certificate

@@ -1117,7 +1128,7 @@ func collectAppDeps(ctx android.ModuleContext, app appDepsInterface,
func collectJniDeps(ctx android.ModuleContext,
	shouldCollectRecursiveNativeDeps bool,
	checkNativeSdkVersion bool,
	filter func(cc.LinkableInterface) bool) ([]jniLib, android.Paths) {
	filter func(parent, child android.Module) bool) ([]jniLib, android.Paths) {
	var jniLibs []jniLib
	var prebuiltJniPackages android.Paths
	seenModulePaths := make(map[string]bool)
@@ -1128,7 +1139,7 @@ func collectJniDeps(ctx android.ModuleContext,

		if IsJniDepTag(tag) || cc.IsSharedDepTag(tag) {
			if dep, ok := module.(cc.LinkableInterface); ok {
				if filter != nil && !filter(dep) {
				if filter != nil && !filter(parent, module) {
					return false
				}

+4 −0
Original line number Diff line number Diff line
@@ -722,6 +722,10 @@ func (mod *Module) IsNdk(config android.Config) bool {
	return false
}

func (mod *Module) HasStubsVariants() bool {
	return false
}

func (mod *Module) IsStubs() bool {
	return false
}