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

Commit f133acae authored by Yu Liu's avatar Yu Liu Committed by Automerger Merge Worker
Browse files

Merge "Support aconfig stoage files for apex." into main am: 864fd2f1 am: cd72a638

parents 304fe339 cd72a638
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -83,6 +83,14 @@ var (
			},
		}, "cache_files")

	CreateStorageRule = pctx.AndroidStaticRule("aconfig_create_storage",
		blueprint.RuleParams{
			Command: `${aconfig} create-storage --container ${container} --file ${file_type} --out ${out} ${cache_files}`,
			CommandDeps: []string{
				"${aconfig}",
			},
		}, "container", "file_type", "cache_files")

	// For exported_java_aconfig_library: Generate a JAR from all
	// java_aconfig_libraries to be consumed by apps built outside the
	// platform
+53 −46
Original line number Diff line number Diff line
@@ -11123,25 +11123,23 @@ func TestAconfigFilesJavaDeps(t *testing.T) {
	mod := ctx.ModuleForTests("myapex", "android_common_myapex")
	s := mod.Rule("apexRule").Args["copy_commands"]
	copyCmds := regexp.MustCompile(" *&& *").Split(s, -1)
	if len(copyCmds) != 5 {
	if len(copyCmds) != 8 {
		t.Fatalf("Expected 5 commands, got %d in:\n%s", len(copyCmds), s)
	}

	ensureMatches(t, copyCmds[4], "^cp -f .*/aconfig_flags.pb .*/image.apex$")
	ensureMatches(t, copyCmds[5], "^cp -f .*/package.map .*/image.apex$")
	ensureMatches(t, copyCmds[6], "^cp -f .*/flag.map .*/image.apex$")
	ensureMatches(t, copyCmds[7], "^cp -f .*/flag.val .*/image.apex$")

	combineAconfigRule := mod.Rule("All_aconfig_declarations_dump")
	s = " " + combineAconfigRule.Args["cache_files"]
	aconfigArgs := regexp.MustCompile(" --cache ").Split(s, -1)[1:]
	if len(aconfigArgs) != 2 {
		t.Fatalf("Expected 2 commands, got %d in:\n%s", len(aconfigArgs), s)
	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
		"my_aconfig_declarations_bar/intermediate.pb",
	}
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_bar/intermediate.pb")

	buildParams := combineAconfigRule.BuildParams
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_bar/intermediate.pb")
	ensureContains(t, buildParams.Output.String(), "android_common_myapex/aconfig_flags.pb")
	VerifyAconfigRule(t, &mod, "combine_aconfig_declarations", inputs, "android_common_myapex/aconfig_flags.pb", "", "")
	VerifyAconfigRule(t, &mod, "create_aconfig_package_map_file", inputs, "android_common_myapex/package.map", "myapex", "package_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_map_file", inputs, "android_common_myapex/flag.map", "myapex", "flag_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_val_file", inputs, "android_common_myapex/flag.val", "myapex", "flag_val")
}

func TestAconfigFilesJavaAndCcDeps(t *testing.T) {
@@ -11249,30 +11247,24 @@ func TestAconfigFilesJavaAndCcDeps(t *testing.T) {
	mod := ctx.ModuleForTests("myapex", "android_common_myapex")
	s := mod.Rule("apexRule").Args["copy_commands"]
	copyCmds := regexp.MustCompile(" *&& *").Split(s, -1)
	if len(copyCmds) != 9 {
		t.Fatalf("Expected 9 commands, got %d in:\n%s", len(copyCmds), s)
	if len(copyCmds) != 12 {
		t.Fatalf("Expected 12 commands, got %d in:\n%s", len(copyCmds), s)
	}

	ensureMatches(t, copyCmds[8], "^cp -f .*/aconfig_flags.pb .*/image.apex$")
	ensureMatches(t, copyCmds[9], "^cp -f .*/package.map .*/image.apex$")
	ensureMatches(t, copyCmds[10], "^cp -f .*/flag.map .*/image.apex$")
	ensureMatches(t, copyCmds[11], "^cp -f .*/flag.val .*/image.apex$")

	combineAconfigRule := mod.Rule("All_aconfig_declarations_dump")
	s = " " + combineAconfigRule.Args["cache_files"]
	aconfigArgs := regexp.MustCompile(" --cache ").Split(s, -1)[1:]
	if len(aconfigArgs) != 3 {
		t.Fatalf("Expected 3 commands, got %d in:\n%s", len(aconfigArgs), s)
	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
		"my_cc_library_bar/android_arm64_armv8-a_shared_apex10000/myapex/aconfig_merged.pb",
		"my_aconfig_declarations_baz/intermediate.pb",
	}
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_cc_library_bar/android_arm64_armv8-a_shared_apex10000/myapex/aconfig_merged.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_baz/intermediate.pb")

	buildParams := combineAconfigRule.BuildParams
	if len(buildParams.Inputs) != 3 {
		t.Fatalf("Expected 3 input, got %d", len(buildParams.Inputs))
	}
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_cc_library_bar/android_arm64_armv8-a_shared_apex10000/myapex/aconfig_merged.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_baz/intermediate.pb")
	ensureContains(t, buildParams.Output.String(), "android_common_myapex/aconfig_flags.pb")
	VerifyAconfigRule(t, &mod, "combine_aconfig_declarations", inputs, "android_common_myapex/aconfig_flags.pb", "", "")
	VerifyAconfigRule(t, &mod, "create_aconfig_package_map_file", inputs, "android_common_myapex/package.map", "myapex", "package_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_map_file", inputs, "android_common_myapex/flag.map", "myapex", "flag_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_val_file", inputs, "android_common_myapex/flag.val", "myapex", "flag_val")
}

func TestAconfigFilesRustDeps(t *testing.T) {
@@ -11396,28 +11388,43 @@ func TestAconfigFilesRustDeps(t *testing.T) {
	mod := ctx.ModuleForTests("myapex", "android_common_myapex")
	s := mod.Rule("apexRule").Args["copy_commands"]
	copyCmds := regexp.MustCompile(" *&& *").Split(s, -1)
	if len(copyCmds) != 23 {
		t.Fatalf("Expected 23 commands, got %d in:\n%s", len(copyCmds), s)
	if len(copyCmds) != 26 {
		t.Fatalf("Expected 26 commands, got %d in:\n%s", len(copyCmds), s)
	}

	ensureMatches(t, copyCmds[22], "^cp -f .*/aconfig_flags.pb .*/image.apex$")
	ensureMatches(t, copyCmds[23], "^cp -f .*/package.map .*/image.apex$")
	ensureMatches(t, copyCmds[24], "^cp -f .*/flag.map .*/image.apex$")
	ensureMatches(t, copyCmds[25], "^cp -f .*/flag.val .*/image.apex$")

	combineAconfigRule := mod.Rule("All_aconfig_declarations_dump")
	s = " " + combineAconfigRule.Args["cache_files"]
	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
		"my_rust_binary/android_arm64_armv8-a_apex10000/myapex/aconfig_merged.pb",
	}
	VerifyAconfigRule(t, &mod, "combine_aconfig_declarations", inputs, "android_common_myapex/aconfig_flags.pb", "", "")
	VerifyAconfigRule(t, &mod, "create_aconfig_package_map_file", inputs, "android_common_myapex/package.map", "myapex", "package_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_map_file", inputs, "android_common_myapex/flag.map", "myapex", "flag_map")
	VerifyAconfigRule(t, &mod, "create_aconfig_flag_val_file", inputs, "android_common_myapex/flag.val", "myapex", "flag_val")
}

func VerifyAconfigRule(t *testing.T, mod *android.TestingModule, desc string, inputs []string, output string, container string, file_type string) {
	aconfigRule := mod.Description(desc)
	s := " " + aconfigRule.Args["cache_files"]
	aconfigArgs := regexp.MustCompile(" --cache ").Split(s, -1)[1:]
	if len(aconfigArgs) != 2 {
		t.Fatalf("Expected 2 commands, got %d in:\n%s", len(aconfigArgs), s)
	if len(aconfigArgs) != len(inputs) {
		t.Fatalf("Expected %d commands, got %d in:\n%s", len(inputs), len(aconfigArgs), s)
	}
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, aconfigArgs, "my_rust_binary/android_arm64_armv8-a_apex10000/myapex/aconfig_merged.pb")

	buildParams := combineAconfigRule.BuildParams
	if len(buildParams.Inputs) != 2 {
		t.Fatalf("Expected 3 input, got %d", len(buildParams.Inputs))
	ensureEquals(t, container, aconfigRule.Args["container"])
	ensureEquals(t, file_type, aconfigRule.Args["file_type"])

	buildParams := aconfigRule.BuildParams
	for _, input := range inputs {
		android.EnsureListContainsSuffix(t, aconfigArgs, input)
		android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), input)
	}
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_aconfig_declarations_foo/intermediate.pb")
	android.EnsureListContainsSuffix(t, buildParams.Inputs.Strings(), "my_rust_binary/android_arm64_armv8-a_apex10000/myapex/aconfig_merged.pb")
	ensureContains(t, buildParams.Output.String(), "android_common_myapex/aconfig_flags.pb")

	ensureContains(t, buildParams.Output.String(), output)
}

func TestAconfigFilesOnlyMatchCurrentApex(t *testing.T) {
+31 −0
Original line number Diff line number Diff line
@@ -85,6 +85,18 @@ func init() {
	pctx.HostBinToolVariable("aconfig", "aconfig")
}

type createStorageStruct struct {
	Output_file string
	Desc        string
	File_type   string
}

var createStorageInfo = []createStorageStruct{
	{"package.map", "create_aconfig_package_map_file", "package_map"},
	{"flag.map", "create_aconfig_flag_map_file", "flag_map"},
	{"flag.val", "create_aconfig_flag_val_file", "flag_val"},
}

var (
	apexManifestRule = pctx.StaticRule("apexManifestRule", blueprint.RuleParams{
		Command: `rm -f $out && ${jsonmodify} $in ` +
@@ -648,6 +660,25 @@ func (a *apexBundle) buildApex(ctx android.ModuleContext) {
		copyCommands = append(copyCommands, "cp -f "+apexAconfigFile.String()+" "+imageDir.String())
		implicitInputs = append(implicitInputs, apexAconfigFile)
		defaultReadOnlyFiles = append(defaultReadOnlyFiles, apexAconfigFile.Base())

		for _, info := range createStorageInfo {
			outputFile := android.PathForModuleOut(ctx, info.Output_file)
			ctx.Build(pctx, android.BuildParams{
				Rule:        aconfig.CreateStorageRule,
				Inputs:      a.aconfigFiles,
				Output:      outputFile,
				Description: info.Desc,
				Args: map[string]string{
					"container":   ctx.ModuleName(),
					"file_type":   info.File_type,
					"cache_files": android.JoinPathsWithPrefix(a.aconfigFiles, "--cache "),
				},
			})

			copyCommands = append(copyCommands, "cp -f "+outputFile.String()+" "+imageDir.String())
			implicitInputs = append(implicitInputs, outputFile)
			defaultReadOnlyFiles = append(defaultReadOnlyFiles, outputFile.Base())
		}
	}

	////////////////////////////////////////////////////////////////////////////////////