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

Commit 8ecedd4d authored by Jooyung Han's avatar Jooyung Han Committed by Gerrit Code Review
Browse files

Merge "Prevent sdk variants from install"

parents 2760e81c 54f78050
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -124,15 +124,18 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries {
						}
					}
				}
				if c.Properties.IsSdkVariant && c.Properties.SdkAndPlatformVariantVisibleToMake {
				if c.Properties.IsSdkVariant {
					// Make the SDK variant uninstallable so that there are not two rules to install
					// to the same location.
					entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)

					if c.Properties.SdkAndPlatformVariantVisibleToMake {
						// Add the unsuffixed name to SOONG_SDK_VARIANT_MODULES so that Make can rewrite
						// dependencies to the .sdk suffix when building a module that uses the SDK.
						entries.SetString("SOONG_SDK_VARIANT_MODULES",
							"$(SOONG_SDK_VARIANT_MODULES) $(patsubst %.sdk,%,$(LOCAL_MODULE))")
					}
				}
			},
		},
		ExtraFooters: []android.AndroidMkExtraFootersFunc{
+7 −4
Original line number Diff line number Diff line
@@ -47,16 +47,16 @@ func sdkMutator(ctx android.BottomUpMutatorContext) {

			// Mark the SDK variant.
			modules[1].(*Module).Properties.IsSdkVariant = true
			// SDK variant is not supposed to be installed
			modules[1].(*Module).Properties.PreventInstall = true

			if ctx.Config().UnbundledBuildApps() {
				// For an unbundled apps build, hide the platform variant from Make.
				modules[0].(*Module).Properties.HideFromMake = true
				modules[0].(*Module).Properties.PreventInstall = true
			} else {
				// For a platform build, mark the SDK variant so that it gets a ".sdk" suffix when
				// exposed to Make.
				modules[1].(*Module).Properties.SdkAndPlatformVariantVisibleToMake = true
				modules[1].(*Module).Properties.PreventInstall = true
			}
			ctx.AliasVariation("")
		} else if isCcModule && ccModule.isImportedApiLibrary() {
@@ -64,16 +64,19 @@ func sdkMutator(ctx android.BottomUpMutatorContext) {
			if apiLibrary.hasNDKStubs() && ccModule.canUseSdk() {
				// Handle cc_api_library module with NDK stubs and variants only which can use SDK
				modules := ctx.CreateVariations("", "sdk")

				// Mark the SDK variant.
				modules[1].(*Module).Properties.IsSdkVariant = true
				// SDK variant is not supposed to be installed
				modules[1].(*Module).Properties.PreventInstall = true

				if ctx.Config().UnbundledBuildApps() {
					// For an unbundled apps build, hide the platform variant from Make.
					modules[0].(*Module).Properties.HideFromMake = true
					modules[0].(*Module).Properties.PreventInstall = true
				} else {
					// For a platform build, mark the SDK variant so that it gets a ".sdk" suffix when
					// exposed to Make.
					modules[1].(*Module).Properties.SdkAndPlatformVariantVisibleToMake = true
					modules[1].(*Module).Properties.PreventInstall = true
				}
			} else {
				ccModule.Properties.Sdk_version = nil
+92 −0
Original line number Diff line number Diff line
@@ -101,3 +101,95 @@ func TestSdkMutator(t *testing.T) {
	assertDep(t, libsdkNDK, libcxxNDK)
	assertDep(t, libsdkPlatform, libcxxPlatform)
}

func TestMakeModuleNameForSdkVariant(t *testing.T) {
	bp := `
		cc_library {
			name: "libfoo",
			srcs: ["main_test.cpp"],
			sdk_version: "current",
			stl: "none",
		}
	`
	platformVariant := "android_arm64_armv8-a_shared"
	sdkVariant := "android_arm64_armv8-a_sdk_shared"
	testCases := []struct {
		name              string
		unbundledApps     []string
		variant           string
		skipInstall       bool // soong skips install
		hideFromMake      bool // no make entry
		makeUninstallable bool // make skips install
		makeModuleName    string
	}{
		{
			name:          "platform variant in normal builds",
			unbundledApps: nil,
			variant:       platformVariant,
			// installable in soong
			skipInstall: false,
			// visiable in Make as "libfoo"
			hideFromMake:   false,
			makeModuleName: "libfoo",
			// installable in Make
			makeUninstallable: false,
		},
		{
			name:          "sdk variant in normal builds",
			unbundledApps: nil,
			variant:       sdkVariant,
			// soong doesn't install
			skipInstall: true,
			// visible in Make as "libfoo.sdk"
			hideFromMake:   false,
			makeModuleName: "libfoo.sdk",
			// but not installed
			makeUninstallable: true,
		},
		{
			name:          "platform variant in unbunded builds",
			unbundledApps: []string{"bar"},
			variant:       platformVariant,
			// installable in soong
			skipInstall: false,
			// hidden from make
			hideFromMake: true,
		},
		{
			name:          "sdk variant in unbunded builds",
			unbundledApps: []string{"bar"},
			variant:       sdkVariant,
			// soong doesn't install
			skipInstall: true,
			// visible in Make as "libfoo"
			hideFromMake:   false,
			makeModuleName: "libfoo",
			// but not installed
			makeUninstallable: true,
		},
	}
	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			fixture := android.GroupFixturePreparers(prepareForCcTest,
				android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
					variables.Unbundled_build_apps = tc.unbundledApps
				}),
			)
			ctx := fixture.RunTestWithBp(t, bp).TestContext
			module := ctx.ModuleForTests("libfoo", tc.variant).Module().(*Module)
			android.AssertBoolEquals(t, "IsSkipInstall", tc.skipInstall, module.IsSkipInstall())
			android.AssertBoolEquals(t, "HideFromMake", tc.hideFromMake, module.HiddenFromMake())
			if !tc.hideFromMake {
				entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
				android.AssertStringEquals(t, "LOCAL_MODULE",
					tc.makeModuleName, entries.EntryMap["LOCAL_MODULE"][0])
				actualUninstallable := false
				if actual, ok := entries.EntryMap["LOCAL_UNINSTALLABLE_MODULE"]; ok {
					actualUninstallable = "true" == actual[0]
				}
				android.AssertBoolEquals(t, "LOCAL_UNINSTALLABLE_MODULE",
					tc.makeUninstallable, actualUninstallable)
			}
		})
	}
}
+37 −0
Original line number Diff line number Diff line
@@ -188,3 +188,40 @@ func TestAvbAddHashFooter(t *testing.T) {
	android.AssertStringDoesContain(t, "Can't find --include_descriptors_from_image",
		cmd, "--include_descriptors_from_image ")
}

func TestFileSystemShouldInstallCoreVariantIfTargetBuildAppsIsSet(t *testing.T) {
	context := android.GroupFixturePreparers(
		fixture,
		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
			variables.Unbundled_build_apps = []string{"bar"}
		}),
	)
	result := context.RunTestWithBp(t, `
		android_system_image {
			name: "myfilesystem",
			deps: [
				"libfoo",
			],
			linker_config_src: "linker.config.json",
		}

		cc_library {
			name: "libfoo",
			shared_libs: [
				"libbar",
			],
			stl: "none",
		}

		cc_library {
			name: "libbar",
			sdk_version: "9",
			stl: "none",
		}
	`)

	inputs := result.ModuleForTests("myfilesystem", "android_common").Output("deps.zip").Implicits
	android.AssertStringListContains(t, "filesystem should have libbar even for unbundled build",
		inputs.Strings(),
		"out/soong/.intermediates/libbar/android_arm64_armv8-a_shared/libbar.so")
}