diff --git a/Android.bp b/Android.bp index b944941ad..8d1280cc0 100644 --- a/Android.bp +++ b/Android.bp @@ -104,7 +104,6 @@ cc_genrule { // Instantiate the dex_bootjars singleton module. dex_bootjars { name: "dex_bootjars", - no_full_install: true, } // Pseudo-test that's run on checkbuilds to ensure that get_clang_version can diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 794924401..ddb89e92f 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -616,10 +616,8 @@ func getModuleInstallPathInfo(ctx android.ModuleContext, fullInstallPath string) return installPath, relDir, installBase } -// RuleBuilder.Install() adds output-to-install copy pairs to a list for Make. To share this -// information with PackagingSpec in soong, call PackageFile for them. -// The install path and the target install partition of the module must be the same. -func packageFile(ctx android.ModuleContext, install android.RuleBuilderInstall) { +// installFile will install the file if `install` path and the target install partition are the same. +func installFile(ctx android.ModuleContext, install android.RuleBuilderInstall) { installPath, relDir, name := getModuleInstallPathInfo(ctx, install.To) // Empty name means the install partition is not for the target image. // For the system image, files for "apex" and "system_other" are skipped here. @@ -628,7 +626,7 @@ func packageFile(ctx android.ModuleContext, install android.RuleBuilderInstall) // TODO(b/320196894): Files for "system_other" are skipped because soong creates the system // image only for now. if name != "" { - ctx.PackageFile(installPath.Join(ctx, relDir), name, install.From) + ctx.InstallFile(installPath.Join(ctx, relDir), name, install.From) } } diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 2be40583c..56e007bbf 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -491,6 +491,11 @@ type dexpreoptBootJars struct { // Build path to a config file that Soong writes for Make (to be used in makefiles that install // the default boot image). dexpreoptConfigForMake android.WritablePath + + // Build path to the boot framework profile. + // This is used as the `OutputFile` in `AndroidMkEntries`. + // A non-nil value ensures that this singleton module does not get skipped in AndroidMkEntries processing. + bootFrameworkProfile android.WritablePath } func (dbj *dexpreoptBootJars) DepsMutator(ctx android.BottomUpMutatorContext) { @@ -603,7 +608,8 @@ func (d *dexpreoptBootJars) GenerateAndroidBuildActions(ctx android.ModuleContex installs := generateBootImage(ctx, config) profileInstalls = append(profileInstalls, installs...) if config == d.defaultBootImage { - _, installs := bootFrameworkProfileRule(ctx, config) + bootProfile, installs := bootFrameworkProfileRule(ctx, config) + d.bootFrameworkProfile = bootProfile profileInstalls = append(profileInstalls, installs...) } } @@ -613,7 +619,7 @@ func (d *dexpreoptBootJars) GenerateAndroidBuildActions(ctx android.ModuleContex profileLicenseMetadataFile: android.OptionalPathForPath(ctx.LicenseMetadataFile()), }) for _, install := range profileInstalls { - packageFile(ctx, install) + installFile(ctx, install) } } } @@ -939,7 +945,7 @@ func packageFileForTargetImage(ctx android.ModuleContext, image *bootImageVarian } for _, install := range image.installs { - packageFile(ctx, install) + installFile(ctx, install) } for _, install := range image.vdexInstalls { @@ -1231,7 +1237,7 @@ func bootImageProfileRule(ctx android.ModuleContext, image *bootImageConfig) (an profile := bootImageProfileRuleCommon(ctx, image.name, image.dexPathsDeps.Paths(), image.getAnyAndroidVariant().dexLocationsDeps) - if image == defaultBootImageConfig(ctx) { + if image == defaultBootImageConfig(ctx) && profile != nil { rule := android.NewRuleBuilder(pctx, ctx) rule.Install(profile, "/system/etc/boot-image.prof") return profile, rule.Installs() @@ -1377,3 +1383,12 @@ func (d *dexpreoptBootJars) MakeVars(ctx android.MakeVarsContext) { ctx.Strict("DEXPREOPT_IMAGE_NAMES", strings.Join(getImageNames(), " ")) } } + +// Add one of the outputs in `OutputFile` +// This ensures that this singleton module does not get skipped when writing out/soong/Android-*.mk +func (d *dexpreoptBootJars) AndroidMkEntries() []android.AndroidMkEntries { + return []android.AndroidMkEntries{{ + Class: "ETC", + OutputFile: android.OptionalPathForPath(d.bootFrameworkProfile), + }} +}