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

Commit 8c04f3fd authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes Ie081e153,If9745083 into main

* changes:
  Stub/Impl selection for sdk variants
  bp2build converter for ndk_library
parents 46465666 1f65f9e9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ const (

	AndroidAndInApex = "android-in_apex"
	AndroidPlatform  = "system"
	Unbundled_app    = "unbundled_app"

	InApex  = "in_apex"
	NonApex = "non_apex"
@@ -207,6 +208,7 @@ var (
	osAndInApexMap = map[string]string{
		AndroidAndInApex:           "//build/bazel/rules/apex:android-in_apex",
		AndroidPlatform:            "//build/bazel/rules/apex:system",
		Unbundled_app:              "//build/bazel/rules/apex:unbundled_app",
		OsDarwin:                   "//build/bazel/platforms/os:darwin",
		OsLinux:                    "//build/bazel/platforms/os:linux_glibc",
		osLinuxMusl:                "//build/bazel/platforms/os:linux_musl",
+36 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ func registerCcLibraryModuleTypes(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("cc_prebuilt_library_static", cc.PrebuiltStaticLibraryFactory)
	ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
	ctx.RegisterModuleType("aidl_library", aidl_library.AidlLibraryFactory)
	ctx.RegisterModuleType("ndk_library", cc.NdkLibraryFactory)
}

func TestCcLibrarySimple(t *testing.T) {
@@ -5131,3 +5132,38 @@ cc_library {
	}
	runCcLibraryTestCase(t, tc)
}

func TestNdkLibraryConversion(t *testing.T) {
	tc := Bp2buildTestCase{
		Description:                "ndk_library conversion",
		ModuleTypeUnderTest:        "cc_library",
		ModuleTypeUnderTestFactory: cc.LibraryFactory,
		Blueprint: `
cc_library {
	name: "libfoo",
	bazel_module: { bp2build_available: false },
}
ndk_library {
	name: "libfoo",
	first_version: "29",
	symbol_file: "libfoo.map.txt",
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_stub_suite", "libfoo.ndk_stub_libs", AttrNameToString{
				"api_surface":          `"publicapi"`,
				"soname":               `"libfoo.so"`,
				"source_library_label": `"//:libfoo"`,
				"symbol_file":          `"libfoo.map.txt"`,
				"versions": `[
        "29",
        "30",
        "S",
        "Tiramisu",
        "current",
    ]`,
			}),
		},
	}
	runCcLibraryTestCase(t, tc)
}
+60 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ func registerCcLibrarySharedModuleTypes(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
	ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory)
	ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
	ctx.RegisterModuleType("ndk_library", cc.NdkLibraryFactory)
}

func runCcLibrarySharedTestCase(t *testing.T, tc Bp2buildTestCase) {
@@ -1593,3 +1594,62 @@ cc_library_shared{
    ]`,
			})}})
}

func TestCcLibrarySdkVariantUsesStubs(t *testing.T) {
	runCcLibrarySharedTestCase(t, Bp2buildTestCase{
		Description:                "cc_library_shared stubs",
		ModuleTypeUnderTest:        "cc_library_shared",
		ModuleTypeUnderTestFactory: cc.LibrarySharedFactory,
		Blueprint: soongCcLibrarySharedPreamble + `
cc_library_shared {
	name: "libUsesSdk",
	sdk_version: "current",
	shared_libs: [
		"libNoStubs",
		"libHasApexStubs",
		"libHasApexAndNdkStubs",
	]
}
cc_library_shared {
	name: "libNoStubs",
	bazel_module: { bp2build_available: false },
}
cc_library_shared {
	name: "libHasApexStubs",
	stubs: { symbol_file: "a.map.txt", versions: ["28", "29", "current"] },
	bazel_module: { bp2build_available: false },
	apex_available: ["apex_a"],
}
cc_library_shared {
	name: "libHasApexAndNdkStubs",
	stubs: { symbol_file: "b.map.txt", versions: ["28", "29", "current"] },
	bazel_module: { bp2build_available: false },
	apex_available: ["apex_b"],
}
ndk_library {
	name: "libHasApexAndNdkStubs",
	bazel_module: { bp2build_available: false },
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_shared", "libUsesSdk", AttrNameToString{
				"implementation_dynamic_deps": `[":libNoStubs"] + select({
        "//build/bazel/rules/apex:system": [
            "@api_surfaces//module-libapi/current:libHasApexStubs",
            "@api_surfaces//module-libapi/current:libHasApexAndNdkStubs",
        ],
        "//build/bazel/rules/apex:unbundled_app": [
            ":libHasApexStubs",
            "//.:libHasApexAndNdkStubs.ndk_stub_libs",
        ],
        "//conditions:default": [
            ":libHasApexStubs",
            ":libHasApexAndNdkStubs",
        ],
    })`,
				"local_includes": `["."]`,
				"sdk_version":    `"current"`,
			}),
		},
	})
}
+27 −0
Original line number Diff line number Diff line
@@ -1578,6 +1578,12 @@ func useStubOrImplInApexWithName(ssi stubSelectionInfo) {
	}
}

// hasNdkStubs returns true for libfoo if there exists a libfoo.ndk of type ndk_library
func hasNdkStubs(ctx android.BazelConversionPathContext, c *Module) bool {
	mod, exists := ctx.ModuleFromName(c.Name() + ndkLibrarySuffix)
	return exists && ctx.OtherModuleType(mod) == "ndk_library"
}

func SetStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.ConfigurationAxis,
	config string, apexAvailable []string, dynamicLibs bazel.LabelList, dynamicDeps *bazel.LabelListAttribute, ind int, buildNonApexWithStubs bool) {

@@ -1638,6 +1644,27 @@ func SetStubsForDynamicDeps(ctx android.BazelConversionPathContext, axis bazel.C
			useStubOrImplInApexWithName(ssi)
		}
	}

	// If the library has an sdk variant, create additional selects to build this variant against the ndk
	// The config setting for this variant will be //build/bazel/rules/apex:unbundled_app
	if c, ok := ctx.Module().(*Module); ok && c.Properties.Sdk_version != nil {
		for _, l := range dynamicLibs.Includes {
			dep, _ := ctx.ModuleFromName(l.OriginalModuleName)
			label := l // use the implementation by default
			if depC, ok := dep.(*Module); ok && hasNdkStubs(ctx, depC) {
				// If the dependency has ndk stubs, build against the ndk stubs
				// https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/cc.go;l=2642-2643;drc=e12d252e22dd8afa654325790d3298a0d67bd9d6;bpv=1;bpt=0
				ndkLibModule, _ := ctx.ModuleFromName(dep.Name() + ndkLibrarySuffix)
				label = bazel.Label{
					Label: "//" + ctx.OtherModuleDir(ndkLibModule) + ":" + ndkLibModule.Name() + "_stub_libs",
				}
			}
			// add the ndk lib label to this axis
			existingValue := dynamicDeps.SelectValue(bazel.OsAndInApexAxis, "unbundled_app")
			existingValue.Append(bazel.MakeLabelList([]bazel.Label{label}))
			dynamicDeps.SetSelectValue(bazel.OsAndInApexAxis, "unbundled_app", bazel.FirstUniqueBazelLabelList(existingValue))
		}
	}
}

func (la *linkerAttributes) convertStripProps(ctx android.BazelConversionPathContext, module *Module) {
+2 −0
Original line number Diff line number Diff line
@@ -4255,6 +4255,8 @@ func (c *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
		}
	case ndkPrebuiltStl:
		ndkPrebuiltStlBp2build(ctx, c)
	case ndkLibrary:
		ndkLibraryBp2build(ctx, c)
	default:
		ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_TYPE_UNSUPPORTED, "")
	}
Loading