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

Commit ab31c828 authored by Yu Liu's avatar Yu Liu
Browse files

Some tweaks to the aconfig flag collection logic

1. Output the aconfig flags pb and storage files to /etc
2. Fix a bug where aconfig flags were not collected for java_sdk_library

Bug: None
Test: manual and unit tests.
Change-Id: I0896e91918c1b53c98ac9dc0f4a636f158200891
parent 88c21f56
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2075,8 +2075,10 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
				return true // track transitive dependencies
			case *java.AndroidAppImport:
				vctx.filesInfo = append(vctx.filesInfo, apexFilesForAndroidApp(ctx, ap)...)
				addAconfigFiles(vctx, ctx, child)
			case *java.AndroidTestHelperApp:
				vctx.filesInfo = append(vctx.filesInfo, apexFilesForAndroidApp(ctx, ap)...)
				addAconfigFiles(vctx, ctx, child)
			case *java.AndroidAppSet:
				appDir := "app"
				if ap.Privileged() {
@@ -2090,6 +2092,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
				af := newApexFile(ctx, ap.OutputFile(), ap.BaseModuleName(), appDirName, appSet, ap)
				af.certificate = java.PresignedCertificate
				vctx.filesInfo = append(vctx.filesInfo, af)
				addAconfigFiles(vctx, ctx, child)
			default:
				ctx.PropertyErrorf("apps", "%q is not an android_app module", depName)
			}
@@ -2118,6 +2121,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
		case prebuiltTag:
			if prebuilt, ok := child.(prebuilt_etc.PrebuiltEtcModule); ok {
				vctx.filesInfo = append(vctx.filesInfo, apexFileForPrebuiltEtc(ctx, prebuilt, depName))
				addAconfigFiles(vctx, ctx, child)
			} else {
				ctx.PropertyErrorf("prebuilts", "%q is not a prebuilt_etc module", depName)
			}
@@ -2141,6 +2145,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
					af := apexFileForExecutable(ctx, ccTest)
					af.class = nativeTest
					vctx.filesInfo = append(vctx.filesInfo, af)
					addAconfigFiles(vctx, ctx, child)
				}
				return true // track transitive dependencies
			} else {
@@ -2230,11 +2235,13 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
			}

			vctx.filesInfo = append(vctx.filesInfo, af)
			addAconfigFiles(vctx, ctx, child)
			return true // track transitive dependencies
		} else if rm, ok := child.(*rust.Module); ok {
			af := apexFileForRustLibrary(ctx, rm)
			af.transitiveDep = true
			vctx.filesInfo = append(vctx.filesInfo, af)
			addAconfigFiles(vctx, ctx, child)
			return true // track transitive dependencies
		}
	} else if cc.IsTestPerSrcDepTag(depTag) {
@@ -2263,6 +2270,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
			af := apexFileForRustLibrary(ctx, rustm)
			af.transitiveDep = true
			vctx.filesInfo = append(vctx.filesInfo, af)
			addAconfigFiles(vctx, ctx, child)
			return true // track transitive dependencies
		}
	} else if rust.IsRlibDepTag(depTag) {
@@ -2281,6 +2289,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
				return false
			}
			vctx.filesInfo = append(vctx.filesInfo, af)
			addAconfigFiles(vctx, ctx, child)
			return true // track transitive dependencies
		default:
			ctx.PropertyErrorf("bootclasspath_fragments",
@@ -2295,6 +2304,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext,
			if profileAf := apexFileForJavaModuleProfile(ctx, child.(javaModule)); profileAf != nil {
				vctx.filesInfo = append(vctx.filesInfo, *profileAf)
			}
			addAconfigFiles(vctx, ctx, child)
			return true // track transitive dependencies
		default:
			ctx.PropertyErrorf("systemserverclasspath_fragments",
+14 −12
Original line number Diff line number Diff line
@@ -11120,10 +11120,10 @@ func TestAconfigFilesJavaDeps(t *testing.T) {
		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$")
	ensureMatches(t, copyCmds[4], "^cp -f .*/aconfig_flags.pb .*/image.apex/etc$")
	ensureMatches(t, copyCmds[5], "^cp -f .*/package.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[6], "^cp -f .*/flag.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[7], "^cp -f .*/flag.val .*/image.apex/etc$")

	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
@@ -11244,10 +11244,10 @@ func TestAconfigFilesJavaAndCcDeps(t *testing.T) {
		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$")
	ensureMatches(t, copyCmds[8], "^cp -f .*/aconfig_flags.pb .*/image.apex/etc$")
	ensureMatches(t, copyCmds[9], "^cp -f .*/package.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[10], "^cp -f .*/flag.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[11], "^cp -f .*/flag.val .*/image.apex/etc$")

	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
@@ -11385,13 +11385,15 @@ func TestAconfigFilesRustDeps(t *testing.T) {
		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$")
	ensureMatches(t, copyCmds[22], "^cp -f .*/aconfig_flags.pb .*/image.apex/etc$")
	ensureMatches(t, copyCmds[23], "^cp -f .*/package.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[24], "^cp -f .*/flag.map .*/image.apex/etc$")
	ensureMatches(t, copyCmds[25], "^cp -f .*/flag.val .*/image.apex/etc$")

	inputs := []string{
		"my_aconfig_declarations_foo/intermediate.pb",
		"my_aconfig_declarations_bar/intermediate.pb",
		"my_aconfig_declarations_baz/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", "", "")
+5 −4
Original line number Diff line number Diff line
@@ -645,6 +645,7 @@ func (a *apexBundle) buildApex(ctx android.ModuleContext) {
	prebuiltSdkToolsBinDir := filepath.Join("prebuilts", "sdk", "tools", runtime.GOOS, "bin")

	defaultReadOnlyFiles := []string{"apex_manifest.json", "apex_manifest.pb"}
	aconfigDest := imageDir.Join(ctx, "etc").String()
	if len(a.aconfigFiles) > 0 {
		apexAconfigFile := android.PathForModuleOut(ctx, "aconfig_flags.pb")
		ctx.Build(pctx, android.BuildParams{
@@ -657,9 +658,9 @@ func (a *apexBundle) buildApex(ctx android.ModuleContext) {
			},
		})

		copyCommands = append(copyCommands, "cp -f "+apexAconfigFile.String()+" "+imageDir.String())
		copyCommands = append(copyCommands, "cp -f "+apexAconfigFile.String()+" "+aconfigDest)
		implicitInputs = append(implicitInputs, apexAconfigFile)
		defaultReadOnlyFiles = append(defaultReadOnlyFiles, apexAconfigFile.Base())
		defaultReadOnlyFiles = append(defaultReadOnlyFiles, "etc/"+apexAconfigFile.Base())

		for _, info := range createStorageInfo {
			outputFile := android.PathForModuleOut(ctx, info.Output_file)
@@ -675,9 +676,9 @@ func (a *apexBundle) buildApex(ctx android.ModuleContext) {
				},
			})

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