diff options
author | Jiakai Zhang <jiakaiz@google.com> | 2023-05-08 16:28:38 +0000 |
---|---|---|
committer | Jiakai Zhang <jiakaiz@google.com> | 2023-05-09 21:47:31 +0100 |
commit | 1d99986d30518b711d6716fc26fa380881647023 (patch) | |
tree | 92fc13fcd1dbefcb448c8b460a11241be20fb8c5 | |
parent | e792debb72bb9dce95ebcfb4d9fce2cc36bc05c7 (diff) | |
download | soong-1d99986d30518b711d6716fc26fa380881647023.tar.gz |
Generate boot image profiles even if dexpreopt is disabled.
Bug: 280440941
Test: -
1. Patch ag/22302622 to disable dexpreopt.
2. See boot image profiles still generated.
(cherry picked from https://android-review.googlesource.com/q/commit:bc698cd28aa2ee17af208bfd56f003347116ddb0)
Merged-In: I5f7f746ca1d4da660fe0c40115e6c71750dfdccc
Change-Id: I1bf05ade53fa83f3dba46f28a8f9246ba1fdf664
-rw-r--r-- | apex/apex.go | 2 | ||||
-rw-r--r-- | apex/bootclasspath_fragment_test.go | 20 | ||||
-rw-r--r-- | dexpreopt/config.go | 9 | ||||
-rw-r--r-- | dexpreopt/testing.go | 7 | ||||
-rw-r--r-- | java/bootclasspath_fragment.go | 13 | ||||
-rw-r--r-- | java/dexpreopt_bootjars.go | 9 | ||||
-rw-r--r-- | java/platform_bootclasspath.go | 13 | ||||
-rw-r--r-- | sdk/java_sdk_test.go | 2 |
8 files changed, 59 insertions, 16 deletions
diff --git a/apex/apex.go b/apex/apex.go index 4fda5058f..d2c535c5e 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2670,7 +2670,7 @@ func apexBootclasspathFragmentFiles(ctx android.ModuleContext, module blueprint. } pathInApex := bootclasspathFragmentInfo.ProfileInstallPathInApex() - if pathInApex != "" && !java.SkipDexpreoptBootJars(ctx) { + if pathInApex != "" { pathOnHost := bootclasspathFragmentInfo.ProfilePathOnHost() tempPath := android.PathForModuleOut(ctx, "boot_image_profile", pathInApex) diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index 2ddfd0305..4a661d4ea 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -497,6 +497,26 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) { }) }) + t.Run("generate boot image profile even if dexpreopt is disabled", func(t *testing.T) { + result := android.GroupFixturePreparers( + commonPreparer, + + // Configure some libraries in the art bootclasspath_fragment that match the source + // bootclasspath_fragment's contents property. + java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), + addSource("foo", "bar"), + java.FixtureSetBootImageInstallDirOnDevice("art", "system/framework"), + dexpreopt.FixtureDisableDexpreoptBootImages(true), + ).RunTest(t) + + ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{ + "etc/boot-image.prof", + "etc/classpaths/bootclasspath.pb", + "javalib/bar.jar", + "javalib/foo.jar", + }) + }) + t.Run("boot image disable generate profile", func(t *testing.T) { result := android.GroupFixturePreparers( commonPreparer, diff --git a/dexpreopt/config.go b/dexpreopt/config.go index 609a29c2d..0cc3bd63b 100644 --- a/dexpreopt/config.go +++ b/dexpreopt/config.go @@ -475,7 +475,16 @@ func RegisterToolDeps(ctx android.BottomUpMutatorContext) { ctx.AddFarVariationDependencies(v, Dex2oatDepTag, dex2oatBin) } +func IsDex2oatNeeded(ctx android.PathContext) bool { + global := GetGlobalConfig(ctx) + return !global.DisablePreopt || !global.DisablePreoptBootImages +} + func dex2oatPathFromDep(ctx android.ModuleContext) android.Path { + if !IsDex2oatNeeded(ctx) { + return nil + } + dex2oatBin := dex2oatModuleName(ctx.Config()) // Find the right dex2oat module, trying to follow PrebuiltDepTag from source diff --git a/dexpreopt/testing.go b/dexpreopt/testing.go index 47ae494e3..b3dd3cca2 100644 --- a/dexpreopt/testing.go +++ b/dexpreopt/testing.go @@ -174,3 +174,10 @@ func FixtureDisableGenerateProfile(disable bool) android.FixturePreparer { dexpreoptConfig.DisableGenerateProfile = disable }) } + +// FixtureDisableDexpreoptBootImages sets the DisablePreoptBootImages property in the global config. +func FixtureDisableDexpreoptBootImages(disable bool) android.FixturePreparer { + return FixtureModifyGlobalConfig(func(_ android.PathContext, dexpreoptConfig *GlobalConfig) { + dexpreoptConfig.DisablePreoptBootImages = disable + }) +} diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go index f69256347..6ccf5a331 100644 --- a/java/bootclasspath_fragment.go +++ b/java/bootclasspath_fragment.go @@ -506,7 +506,7 @@ func (b *BootclasspathFragmentModule) DepsMutator(ctx android.BottomUpMutatorCon } } - if SkipDexpreoptBootJars(ctx) { + if !dexpreopt.IsDex2oatNeeded(ctx) { return } @@ -901,10 +901,6 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC // produceBootImageFiles builds the boot image files from the source if it is required. func (b *BootclasspathFragmentModule) produceBootImageFiles(ctx android.ModuleContext, imageConfig *bootImageConfig) bootImageOutputs { - if SkipDexpreoptBootJars(ctx) { - return bootImageOutputs{} - } - // Only generate the boot image if the configuration does not skip it. return b.generateBootImageBuildActions(ctx, imageConfig) } @@ -929,6 +925,13 @@ func (b *BootclasspathFragmentModule) generateBootImageBuildActions(ctx android. // Build a profile for the image config and then use that to build the boot image. profile := bootImageProfileRule(ctx, imageConfig) + // If dexpreopt of boot image jars should be skipped, generate only a profile. + if SkipDexpreoptBootJars(ctx) { + return bootImageOutputs{ + profile: profile, + } + } + // Build boot image files for the host variants. buildBootImageVariantsForBuildOs(ctx, imageConfig, profile) diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index f4827ea3a..a0364d28b 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -500,9 +500,6 @@ func (d *dexpreoptBootJars) GenerateAndroidBuildActions(ctx android.ModuleContex // Generate build rules for boot images. func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonContext) { - if SkipDexpreoptBootJars(ctx) { - return - } if dexpreopt.GetCachedGlobalSoongConfig(ctx) == nil { // No module has enabled dexpreopting, so we assume there will be no boot image to make. return @@ -1002,7 +999,7 @@ func writeGlobalConfigForMake(ctx android.SingletonContext, path android.Writabl // (make/core/dex_preopt_libart.mk) to generate install rules that copy boot image files to the // correct output directories. func (d *dexpreoptBootJars) MakeVars(ctx android.MakeVarsContext) { - if d.dexpreoptConfigForMake != nil { + if d.dexpreoptConfigForMake != nil && !SkipDexpreoptBootJars(ctx) { ctx.Strict("DEX_PREOPT_CONFIG_FOR_MAKE", d.dexpreoptConfigForMake.String()) ctx.Strict("DEX_PREOPT_SOONG_CONFIG_FOR_MAKE", android.PathForOutput(ctx, "dexpreopt_soong.config").String()) } @@ -1014,6 +1011,10 @@ func (d *dexpreoptBootJars) MakeVars(ctx android.MakeVarsContext) { ctx.Strict("DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA", image.profileLicenseMetadataFile.String()) } + if SkipDexpreoptBootJars(ctx) { + return + } + global := dexpreopt.GetGlobalConfig(ctx) dexPaths, dexLocations := bcpForDexpreopt(ctx, global.PreoptWithUpdatableBcp) ctx.Strict("DEXPREOPT_BOOTCLASSPATH_DEX_FILES", strings.Join(dexPaths.Strings(), " ")) diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go index 0ea360979..d5779f75b 100644 --- a/java/platform_bootclasspath.go +++ b/java/platform_bootclasspath.go @@ -103,7 +103,7 @@ func (b *platformBootclasspathModule) OutputFiles(tag string) (android.Paths, er func (b *platformBootclasspathModule) DepsMutator(ctx android.BottomUpMutatorContext) { b.hiddenAPIDepsMutator(ctx) - if SkipDexpreoptBootJars(ctx) { + if !dexpreopt.IsDex2oatNeeded(ctx) { return } @@ -187,11 +187,6 @@ func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.Mo bootDexJarByModule := b.generateHiddenAPIBuildActions(ctx, b.configuredModules, b.fragments) buildRuleForBootJarsPackageCheck(ctx, bootDexJarByModule) - // Nothing to do if skipping the dexpreopt of boot image jars. - if SkipDexpreoptBootJars(ctx) { - return - } - b.generateBootImageBuildActions(ctx, platformModules, apexModules) } @@ -429,6 +424,12 @@ func (b *platformBootclasspathModule) generateBootImage(ctx android.ModuleContex // Build a profile for the image config and then use that to build the boot image. profile := bootImageProfileRule(ctx, imageConfig) + // If dexpreopt of boot image jars should be skipped, generate only a profile. + global := dexpreopt.GetGlobalConfig(ctx) + if global.DisablePreoptBootImages { + return + } + // Build boot image files for the android variants. androidBootImageFiles := buildBootImageVariantsForAndroidOs(ctx, imageConfig, profile) diff --git a/sdk/java_sdk_test.go b/sdk/java_sdk_test.go index 3a2ecc00c..6159ea9c2 100644 --- a/sdk/java_sdk_test.go +++ b/sdk/java_sdk_test.go @@ -19,12 +19,14 @@ import ( "testing" "android/soong/android" + "android/soong/dexpreopt" "android/soong/java" ) var prepareForSdkTestWithJava = android.GroupFixturePreparers( java.PrepareForTestWithJavaBuildComponents, PrepareForTestWithSdkBuildComponents, + dexpreopt.PrepareForTestWithFakeDex2oatd, // Ensure that all source paths are provided. This helps ensure that the snapshot generation is // consistent and all files referenced from the snapshot's Android.bp file have actually been |