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

Commit 0f81762d authored by Spandan Das's avatar Spandan Das Committed by Gerrit Code Review
Browse files

Merge "Replace ndk_libs.bzl with an attr in cc_stub_suite" into main

parents cdd6a47b 17a27f0c
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -5178,6 +5178,7 @@ ndk_library {
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_stub_suite", "libfoo.ndk_stub_libs", AttrNameToString{
				"api_surface":          `"publicapi"`,
				"included_in_ndk":      `True`,
				"soname":               `"libfoo.so"`,
				"source_library_label": `"//:libfoo"`,
				"symbol_file":          `"libfoo.map.txt"`,
@@ -5305,3 +5306,61 @@ cc_library_static {
		},
	})
}

func TestPropertiesIfStubLibraryIsInNdk(t *testing.T) {
	tc := Bp2buildTestCase{
		Description:                "If an equivalent ndk_library exists, set included_in_ndk=true for module-libapi stubs",
		ModuleTypeUnderTest:        "cc_library",
		ModuleTypeUnderTestFactory: cc.LibraryFactory,
		Blueprint: `
// libfoo is an ndk library and contributes to module-libapi
cc_library {
	name: "libfoo",
	stubs: {symbol_file: "libfoo.map.txt"},
}
ndk_library {
	name: "libfoo",
	first_version: "29",
	symbol_file: "libfoo.map.txt",
}
// libbar is not an ndk library, but contributes to module-libapi
cc_library {
	name: "libbar",
	stubs: {symbol_file: "libbar.map.txt"},
}
`,
		StubbedBuildDefinitions: []string{"libfoo.ndk"},
		ExpectedBazelTargets: []string{
			MakeBazelTarget("cc_library_static", "libfoo_bp2build_cc_library_static", AttrNameToString{
				"local_includes": `["."]`,
			}),
			MakeBazelTarget("cc_library_shared", "libfoo", AttrNameToString{
				"local_includes":    `["."]`,
				"stubs_symbol_file": `"libfoo.map.txt"`,
			}),
			MakeBazelTarget("cc_stub_suite", "libfoo_stub_libs", AttrNameToString{
				"api_surface":          `"module-libapi"`,
				"soname":               `"libfoo.so"`,
				"source_library_label": `"//:libfoo"`,
				"symbol_file":          `"libfoo.map.txt"`,
				"versions":             `["current"]`,
				"included_in_ndk":      `True`,
			}),
			MakeBazelTarget("cc_library_static", "libbar_bp2build_cc_library_static", AttrNameToString{
				"local_includes": `["."]`,
			}),
			MakeBazelTarget("cc_library_shared", "libbar", AttrNameToString{
				"local_includes":    `["."]`,
				"stubs_symbol_file": `"libbar.map.txt"`,
			}),
			MakeBazelTarget("cc_stub_suite", "libbar_stub_libs", AttrNameToString{
				"api_surface":          `"module-libapi"`,
				"soname":               `"libbar.so"`,
				"source_library_label": `"//:libbar"`,
				"symbol_file":          `"libbar.map.txt"`,
				"versions":             `["current"]`,
			}),
		},
	}
	runCcLibraryTestCase(t, tc)
}
+0 −11
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ import (
	rust_config "android/soong/rust/config"
	"android/soong/starlark_fmt"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)

@@ -34,19 +33,9 @@ func createSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) (
	files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package.
	files = append(files, newFile("android", "constants.bzl", android.BazelCcToolchainVars(cfg)))

	// Visit all modules to determine the list of ndk libraries
	// This list will be used to add additional flags for cc stub generation
	ndkLibsStringFormatted := []string{}
	ctx.Context().VisitAllModules(func(m blueprint.Module) {
		if ctx.Context().ModuleType(m) == "ndk_library" {
			ndkLibsStringFormatted = append(ndkLibsStringFormatted, fmt.Sprintf(`"%s"`, m.Name())) // name will be `"libc.ndk"`
		}
	})

	files = append(files, newFile("cc_toolchain", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package.
	files = append(files, newFile("cc_toolchain", "config_constants.bzl", cc_config.BazelCcToolchainVars(cfg)))
	files = append(files, newFile("cc_toolchain", "sanitizer_constants.bzl", cc.BazelCcSanitizerToolchainVars(cfg)))
	files = append(files, newFile("cc_toolchain", "ndk_libs.bzl", fmt.Sprintf("ndk_libs = [%v]", strings.Join(ndkLibsStringFormatted, ", "))))

	files = append(files, newFile("java_toolchain", GeneratedBuildFileName, "")) // Creates a //java_toolchain package.
	files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg)))
+0 −4
Original line number Diff line number Diff line
@@ -105,10 +105,6 @@ func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) {
			dir:      "cc_toolchain",
			basename: "config_constants.bzl",
		},
		{
			dir:      "cc_toolchain",
			basename: "ndk_libs.bzl",
		},
		{
			dir:      "cc_toolchain",
			basename: "sanitizer_constants.bzl",
+11 −0
Original line number Diff line number Diff line
@@ -500,6 +500,10 @@ func createStubsBazelTargetIfNeeded(ctx android.Bp2buildMutatorContext, m *Modul
			Deps:                 baseAttributes.deps,
			Api_surface:          proptools.StringPtr("module-libapi"),
		}
		if _, isNdk := ctx.ModuleFromName(m.Name() + ".ndk"); isNdk {
			stubSuitesAttrs.Included_in_ndk = proptools.BoolPtr(true)
		}

		ctx.CreateBazelTargetModule(stubSuitesProps, android.CommonAttributes{
			Name: m.Name() + "_stub_libs",
			// TODO: b/303307456 - Remove this when data is properly supported in cc rules.
@@ -3023,6 +3027,13 @@ type bazelCcStubSuiteAttributes struct {
	Soname               *string
	Deps                 bazel.LabelListAttribute
	Api_surface          *string

	// Unless the library is in the NDK, module-libapi stubs should *not* include the public symbols
	// Soong uses a global variable to determine if the library is in the NDK
	// Since Bazel does not have global analysis, create an explicit property
	// This property is only relevant if `api_surface = module-libapi`
	// https://cs.android.com/android/_/android/platform/build/soong/+/main:cc/library.go;l=1214-1219;drc=7123cc5370a38983ee6325b5f5f6df19f4e4f10b;bpv=1;bpt=0
	Included_in_ndk *bool
}

type bazelCcHeaderAbiCheckerAttributes struct {
+4 −3
Original line number Diff line number Diff line
@@ -597,6 +597,7 @@ func ndkLibraryBp2build(ctx android.Bp2buildMutatorContext, c *Module) {
		Symbol_file:     proptools.StringPtr(symbolFileLabel.Label),
		Soname:          proptools.StringPtr(sourceLibraryName + ".so"),
		Api_surface:     proptools.StringPtr(android.PublicApi.String()),
		Included_in_ndk: proptools.BoolPtr(true),
	}
	if sourceLibrary, exists := ctx.ModuleFromName(sourceLibraryName); exists {
		// the source library might not exist in minimal/unbuildable branches like kernel-build-tools.