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

Commit 1978fdf9 authored by Sam Delmerico's avatar Sam Delmerico Committed by Gerrit Code Review
Browse files

Merge "clean up CL for androidmk variables"

parents 24bfad66 5fb794ae
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -144,22 +144,28 @@ func setFromList[T comparable](l []T) map[T]bool {
	return m
}

// ListDifference checks if the two lists contain the same elements
func ListDifference[T comparable](l1, l2 []T) []T {
	diff := []T{}
// ListSetDifference checks if the two lists contain the same elements. It returns
// a boolean which is true if there is a difference, and then returns lists of elements
// that are in l1 but not l2, and l2 but not l1.
func ListSetDifference[T comparable](l1, l2 []T) (bool, []T, []T) {
	listsDiffer := false
	diff1 := []T{}
	diff2 := []T{}
	m1 := setFromList(l1)
	m2 := setFromList(l2)
	for _, t := range l1 {
	for t := range m1 {
		if _, ok := m2[t]; !ok {
			diff = append(diff, t)
			diff1 = append(diff1, t)
			listsDiffer = true
		}
	}
	for _, t := range l2 {
	for t := range m2 {
		if _, ok := m1[t]; !ok {
			diff = append(diff, t)
			diff2 = append(diff2, t)
			listsDiffer = true
		}
	}
	return diff
	return listsDiffer, diff1, diff2
}

// Returns true if the given string s is prefixed with any string in the given prefix list.
+2 −0
Original line number Diff line number Diff line
@@ -591,6 +591,8 @@ func (handler *ccBinaryBazelHandler) ProcessBazelQueryResponse(ctx android.Modul
	outputFilePath := android.PathForBazelOut(ctx, info.OutputFile)
	handler.module.outputFile = android.OptionalPathForPath(outputFilePath)
	handler.module.linker.(*binaryDecorator).unstrippedOutputFile = android.PathForBazelOut(ctx, info.UnstrippedOutput)

	handler.module.setAndroidMkVariablesFromCquery(info.CcAndroidMkInfo)
}

func binaryBp2buildAttrs(ctx android.TopDownMutatorContext, m *Module) binaryAttributes {
+7 −8
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import (
	"github.com/google/blueprint/proptools"

	"android/soong/android"
	"android/soong/bazel/cquery"
	"android/soong/cc/config"
	"android/soong/fuzz"
	"android/soong/genrule"
@@ -1891,14 +1892,6 @@ func (c *Module) ProcessBazelQueryResponse(ctx android.ModuleContext) {
	bazelCtx := ctx.Config().BazelContext
	if ccInfo, err := bazelCtx.GetCcInfo(bazelModuleLabel, android.GetConfigKey(ctx)); err == nil {
		c.tidyFiles = android.PathsForBazelOut(ctx, ccInfo.TidyFiles)
		c.Properties.AndroidMkSharedLibs = ccInfo.LocalSharedLibs
		c.Properties.AndroidMkStaticLibs = ccInfo.LocalStaticLibs
		c.Properties.AndroidMkWholeStaticLibs = ccInfo.LocalWholeStaticLibs
	}
	if unstrippedInfo, err := bazelCtx.GetCcUnstrippedInfo(bazelModuleLabel, android.GetConfigKey(ctx)); err == nil {
		c.Properties.AndroidMkSharedLibs = unstrippedInfo.LocalSharedLibs
		c.Properties.AndroidMkStaticLibs = unstrippedInfo.LocalStaticLibs
		c.Properties.AndroidMkWholeStaticLibs = unstrippedInfo.LocalWholeStaticLibs
	}

	c.bazelHandler.ProcessBazelQueryResponse(ctx, bazelModuleLabel)
@@ -2096,6 +2089,12 @@ func (c *Module) maybeInstall(ctx ModuleContext, apexInfo android.ApexInfo) {
	}
}

func (c *Module) setAndroidMkVariablesFromCquery(info cquery.CcAndroidMkInfo) {
	c.Properties.AndroidMkSharedLibs = info.LocalSharedLibs
	c.Properties.AndroidMkStaticLibs = info.LocalStaticLibs
	c.Properties.AndroidMkWholeStaticLibs = info.LocalWholeStaticLibs
}

func (c *Module) toolchain(ctx android.BaseModuleContext) config.Toolchain {
	if c.cachedToolchain == nil {
		c.cachedToolchain = config.FindToolchainWithContext(ctx)
+112 −41
Original line number Diff line number Diff line
@@ -3029,32 +3029,6 @@ func checkStaticLibs(t *testing.T, expected []string, module *Module) {
	}
}

func checkWholeStaticLibs(t *testing.T, expected []string, module *Module) {
	t.Helper()
	actual := module.Properties.AndroidMkWholeStaticLibs
	if !reflect.DeepEqual(actual, expected) {
		t.Errorf("incorrect whole_static_libs"+
			"\nactual:   %v"+
			"\nexpected: %v",
			actual,
			expected,
		)
	}
}

func checkSharedLibs(t *testing.T, expected []string, module *Module) {
	t.Helper()
	actual := module.Properties.AndroidMkSharedLibs
	if !reflect.DeepEqual(actual, expected) {
		t.Errorf("incorrect shared_libs"+
			"\nactual:   %v"+
			"\nexpected: %v",
			actual,
			expected,
		)
	}
}

const staticLibAndroidBp = `
	cc_library {
		name: "lib1",
@@ -3114,6 +3088,20 @@ func TestLibDepAndroidMkExportInMixedBuilds(t *testing.T) {
			whole_static_libs: ["whole_static_dep"],
			shared_libs: ["shared_dep"],
		}
		cc_library_headers {
			name: "lib_headers",
			bazel_module: { label: "//:lib_headers" },
			static_libs: ["static_dep"],
			whole_static_libs: ["whole_static_dep"],
			shared_libs: ["shared_dep"],
		}
		cc_prebuilt_library {
			name: "lib_prebuilt",
			bazel_module: { label: "//:lib_prebuilt" },
			static_libs: ["static_dep"],
			whole_static_libs: ["whole_static_dep"],
			shared_libs: ["shared_dep"],
		}
	`

	testCases := []struct {
@@ -3172,6 +3160,36 @@ func TestLibDepAndroidMkExportInMixedBuilds(t *testing.T) {
				LocalSharedLibs:      []string{"shared_dep"},
			},
		},
		{
			name:       "cc_library_headers",
			moduleName: "lib_headers",
			variant:    "android_arm64_armv8-a",
			androidMkInfo: cquery.CcAndroidMkInfo{
				LocalStaticLibs:      []string{"static_dep"},
				LocalWholeStaticLibs: []string{"whole_static_dep"},
				LocalSharedLibs:      []string{"shared_dep"},
			},
		},
		{
			name:       "prebuilt lib static",
			moduleName: "lib_prebuilt",
			variant:    "android_arm64_armv8-a_static",
			androidMkInfo: cquery.CcAndroidMkInfo{
				LocalStaticLibs:      []string{"static_dep"},
				LocalWholeStaticLibs: []string{"whole_static_dep"},
				LocalSharedLibs:      []string{"shared_dep"},
			},
		},
		{
			name:       "prebuilt lib shared",
			moduleName: "lib_prebuilt",
			variant:    "android_arm64_armv8-a_shared",
			androidMkInfo: cquery.CcAndroidMkInfo{
				LocalStaticLibs:      []string{"static_dep"},
				LocalWholeStaticLibs: []string{"whole_static_dep"},
				LocalSharedLibs:      []string{"shared_dep"},
			},
		},
	}

	outputBaseDir := "out/bazel"
@@ -3191,6 +3209,16 @@ func TestLibDepAndroidMkExportInMixedBuilds(t *testing.T) {
								CcAndroidMkInfo:    tc.androidMkInfo,
								RootStaticArchives: []string{""},
							},
							"//:lib_headers": cquery.CcInfo{
								CcAndroidMkInfo: tc.androidMkInfo,
								OutputFiles:     []string{""},
							},
							"//:lib_prebuilt": cquery.CcInfo{
								CcAndroidMkInfo: tc.androidMkInfo,
							},
							"//:lib_prebuilt_bp2build_cc_library_static": cquery.CcInfo{
								CcAndroidMkInfo: tc.androidMkInfo,
							},
						},
						LabelToCcBinary: map[string]cquery.CcUnstrippedInfo{
							"//:test": cquery.CcUnstrippedInfo{
@@ -3207,25 +3235,68 @@ func TestLibDepAndroidMkExportInMixedBuilds(t *testing.T) {

			module := ctx.ModuleForTests(tc.moduleName, tc.variant).Module().(*Module)
			entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
			checkStaticLibs(t, tc.androidMkInfo.LocalStaticLibs, module)
			missingStaticDeps := android.ListDifference(entries.EntryMap["LOCAL_STATIC_LIBRARIES"], tc.androidMkInfo.LocalStaticLibs)
			if len(missingStaticDeps) > 0 {
				t.Errorf("expected LOCAL_STATIC_LIBRARIES to be %q"+
					" but was %q; difference: %q", tc.androidMkInfo.LocalStaticLibs, entries.EntryMap["LOCAL_STATIC_LIBRARIES"], missingStaticDeps)
			if !reflect.DeepEqual(module.Properties.AndroidMkStaticLibs, tc.androidMkInfo.LocalStaticLibs) {
				t.Errorf("incorrect static_libs"+
					"\nactual:   %v"+
					"\nexpected: %v",
					module.Properties.AndroidMkStaticLibs,
					tc.androidMkInfo.LocalStaticLibs,
				)
			}
			staticDepsDiffer, missingStaticDeps, additionalStaticDeps := android.ListSetDifference(
				entries.EntryMap["LOCAL_STATIC_LIBRARIES"],
				tc.androidMkInfo.LocalStaticLibs,
			)
			if staticDepsDiffer {
				t.Errorf(
					"expected LOCAL_STATIC_LIBRARIES to be %q but was %q; missing: %q; extra %q",
					tc.androidMkInfo.LocalStaticLibs,
					entries.EntryMap["LOCAL_STATIC_LIBRARIES"],
					missingStaticDeps,
					additionalStaticDeps,
				)
			}

			checkWholeStaticLibs(t, tc.androidMkInfo.LocalWholeStaticLibs, module)
			missingWholeStaticDeps := android.ListDifference(entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"], tc.androidMkInfo.LocalWholeStaticLibs)
			if len(missingWholeStaticDeps) > 0 {
				t.Errorf("expected LOCAL_WHOLE_STATIC_LIBRARIES to be %q"+
					" but was %q; difference: %q", tc.androidMkInfo.LocalWholeStaticLibs, entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"], missingWholeStaticDeps)
			if !reflect.DeepEqual(module.Properties.AndroidMkWholeStaticLibs, tc.androidMkInfo.LocalWholeStaticLibs) {
				t.Errorf("expected module.Properties.AndroidMkWholeStaticLibs to be %q, but was %q",
					tc.androidMkInfo.LocalWholeStaticLibs,
					module.Properties.AndroidMkWholeStaticLibs,
				)
			}
			wholeStaticDepsDiffer, missingWholeStaticDeps, additionalWholeStaticDeps := android.ListSetDifference(
				entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"],
				tc.androidMkInfo.LocalWholeStaticLibs,
			)
			if wholeStaticDepsDiffer {
				t.Errorf(
					"expected LOCAL_WHOLE_STATIC_LIBRARIES to be %q but was %q; missing: %q; extra %q",
					tc.androidMkInfo.LocalWholeStaticLibs,
					entries.EntryMap["LOCAL_WHOLE_STATIC_LIBRARIES"],
					missingWholeStaticDeps,
					additionalWholeStaticDeps,
				)
			}

			checkSharedLibs(t, tc.androidMkInfo.LocalSharedLibs, module)
			missingSharedDeps := android.ListDifference(entries.EntryMap["LOCAL_SHARED_LIBRARIES"], tc.androidMkInfo.LocalSharedLibs)
			if len(missingSharedDeps) > 0 {
				t.Errorf("expected LOCAL_SHARED_LIBRARIES to be %q"+
					" but was %q; difference: %q", tc.androidMkInfo.LocalSharedLibs, entries.EntryMap["LOCAL_SHARED_LIBRARIES"], missingSharedDeps)
			if !reflect.DeepEqual(module.Properties.AndroidMkSharedLibs, tc.androidMkInfo.LocalSharedLibs) {
				t.Errorf("incorrect shared_libs"+
					"\nactual:   %v"+
					"\nexpected: %v",
					module.Properties.AndroidMkSharedLibs,
					tc.androidMkInfo.LocalSharedLibs,
				)
			}
			sharedDepsDiffer, missingSharedDeps, additionalSharedDeps := android.ListSetDifference(
				entries.EntryMap["LOCAL_SHARED_LIBRARIES"],
				tc.androidMkInfo.LocalSharedLibs,
			)
			if sharedDepsDiffer {
				t.Errorf(
					"expected LOCAL_SHARED_LIBRARIES to be %q but was %q; missing %q; extra %q",
					tc.androidMkInfo.LocalSharedLibs,
					entries.EntryMap["LOCAL_SHARED_LIBRARIES"],
					missingSharedDeps,
					additionalSharedDeps,
				)
			}
		})
	}
+2 −0
Original line number Diff line number Diff line
@@ -937,6 +937,8 @@ func (handler *ccLibraryBazelHandler) ProcessBazelQueryResponse(ctx android.Modu
		// implementation.
		i.(*libraryDecorator).collectedSnapshotHeaders = android.Paths{}
	}

	handler.module.setAndroidMkVariablesFromCquery(ccInfo.CcAndroidMkInfo)
}

func (library *libraryDecorator) setFlagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) {
Loading