diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/bootclasspath_fragment.go | 13 | ||||
| -rw-r--r-- | java/dex.go | 2 | ||||
| -rw-r--r-- | java/dex_test.go | 10 | ||||
| -rw-r--r-- | java/dexpreopt.go | 12 | ||||
| -rw-r--r-- | java/dexpreopt_bootjars.go | 9 | ||||
| -rw-r--r-- | java/dexpreopt_test.go | 25 | ||||
| -rw-r--r-- | java/platform_bootclasspath.go | 13 |
7 files changed, 54 insertions, 30 deletions
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/dex.go b/java/dex.go index 4d6aa3456..f7c1361e2 100644 --- a/java/dex.go +++ b/java/dex.go @@ -140,7 +140,7 @@ var r8, r8RE = pctx.MultiCommandRemoteStaticRules("r8", `$r8Template${config.R8Cmd} ${config.R8Flags} -injars $tmpJar --output $outDir ` + `--no-data-resources ` + `-printmapping ${outDict} ` + - `--pg-conf-output ${outConfig} ` + + `-printconfiguration ${outConfig} ` + `-printusage ${outUsage} ` + `--deps-file ${out}.d ` + `$r8Flags && ` + diff --git a/java/dex_test.go b/java/dex_test.go index 97fc3d0dd..2ba3831f4 100644 --- a/java/dex_test.go +++ b/java/dex_test.go @@ -23,7 +23,7 @@ import ( ) func TestR8(t *testing.T) { - result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` + result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, ` android_app { name: "app", srcs: ["foo.java"], @@ -191,7 +191,7 @@ func TestR8TransitiveDeps(t *testing.T) { for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { - fixturePreparer := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd + fixturePreparer := PrepareForTestWithJavaDefaultModules if tc.unbundled { fixturePreparer = android.GroupFixturePreparers( fixturePreparer, @@ -258,7 +258,7 @@ func TestR8TransitiveDeps(t *testing.T) { } func TestR8Flags(t *testing.T) { - result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` + result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, ` android_app { name: "app", srcs: ["foo.java"], @@ -287,7 +287,7 @@ func TestR8Flags(t *testing.T) { } func TestD8(t *testing.T) { - result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` + result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, ` java_library { name: "foo", srcs: ["foo.java"], @@ -328,7 +328,7 @@ func TestD8(t *testing.T) { } func TestProguardFlagsInheritance(t *testing.T) { - result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, ` + result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, ` android_app { name: "app", static_libs: [ diff --git a/java/dexpreopt.go b/java/dexpreopt.go index 0ffedf6c4..a96b31281 100644 --- a/java/dexpreopt.go +++ b/java/dexpreopt.go @@ -180,6 +180,8 @@ func moduleName(ctx android.BaseModuleContext) string { return android.RemoveOptionalPrebuiltPrefix(ctx.ModuleName()) } +// Returns whether dexpreopt is applicable to the module. +// When it returns true, neither profile nor dexpreopt artifacts will be generated. func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool { if !ctx.Device() { return true @@ -205,14 +207,6 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool { global := dexpreopt.GetGlobalConfig(ctx) - if global.DisablePreopt { - return true - } - - if inList(moduleName(ctx), global.DisablePreoptModules) { - return true - } - isApexSystemServerJar := global.AllApexSystemServerJars(ctx).ContainsJar(moduleName(ctx)) if isApexVariant(ctx) { // Don't preopt APEX variant module unless the module is an APEX system server jar. @@ -232,7 +226,7 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool { } func dexpreoptToolDepsMutator(ctx android.BottomUpMutatorContext) { - if d, ok := ctx.Module().(DexpreopterInterface); !ok || d.dexpreoptDisabled(ctx) { + if d, ok := ctx.Module().(DexpreopterInterface); !ok || d.dexpreoptDisabled(ctx) || !dexpreopt.IsDex2oatNeeded(ctx) { return } dexpreopt.RegisterToolDeps(ctx) diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index f4c093510..8e79674fb 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/dexpreopt_test.go b/java/dexpreopt_test.go index 3d2c5c3a1..f91ac5cc3 100644 --- a/java/dexpreopt_test.go +++ b/java/dexpreopt_test.go @@ -438,3 +438,28 @@ func TestAndroidMkEntriesForApex(t *testing.T) { android.AssertIntEquals(t, "entries count", 0, len(entriesList)) } + +func TestGenerateProfileEvenIfDexpreoptIsDisabled(t *testing.T) { + preparers := android.GroupFixturePreparers( + PrepareForTestWithJavaDefaultModules, + PrepareForTestWithFakeApexMutator, + dexpreopt.FixtureDisableDexpreopt(true), + ) + + result := preparers.RunTestWithBp(t, ` + java_library { + name: "foo", + installable: true, + dex_preopt: { + profile: "art-profile", + }, + srcs: ["a.java"], + }`) + + ctx := result.TestContext + dexpreopt := ctx.ModuleForTests("foo", "android_common").MaybeRule("dexpreopt") + + expected := []string{"out/soong/.intermediates/foo/android_common/dexpreopt/profile.prof"} + + android.AssertArrayString(t, "outputs", expected, dexpreopt.AllOutputs()) +} 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) |