From c11e0c5a39d71301cafe8cd5efd4c5f204c78d70 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 8 May 2019 15:18:22 -0700 Subject: [PATCH] Fix dangling rules on aosp_cf_x86_phone aosp_cf_x86_phone uses SecondArchIsTranslated, which was leaving a dangling rule from the oatdump rules to out/soong/vsoc_x86/dex_bootjars/system/framework/arm/boot.art. Consolidate the code to select targets for dexpreopting and use it in more places to prevent references to boot images that were not generated. Test: m checkbuild Change-Id: Ia4945a99ff5e575e759299106559c85f38489acc --- java/dexpreopt_bootjars.go | 14 ++++---------- java/dexpreopt_config.go | 27 +++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go index 092a1332e..f48428f46 100644 --- a/java/dexpreopt_bootjars.go +++ b/java/dexpreopt_bootjars.go @@ -56,6 +56,7 @@ type bootImageConfig struct { dexPaths android.WritablePaths dir android.OutputPath symbolsDir android.OutputPath + targets []android.Target images map[android.ArchType]android.OutputPath zip android.WritablePath } @@ -191,16 +192,9 @@ func buildBootImage(ctx android.SingletonContext, config bootImageConfig) *bootI var allFiles android.Paths if !global.DisablePreopt { - targets := ctx.Config().Targets[android.Android] - if ctx.Config().SecondArchIsTranslated() { - targets = targets[:1] - } - - for _, target := range targets { - if target.NativeBridge == android.NativeBridgeDisabled { - files := buildBootImageRuleForArch(ctx, image, target.Arch.ArchType, profile, missingDeps) - allFiles = append(allFiles, files.Paths()...) - } + for _, target := range image.targets { + files := buildBootImageRuleForArch(ctx, image, target.Arch.ArchType, profile, missingDeps) + allFiles = append(allFiles, files.Paths()...) } } diff --git a/java/dexpreopt_config.go b/java/dexpreopt_config.go index a0b1ea599..270fcb473 100644 --- a/java/dexpreopt_config.go +++ b/java/dexpreopt_config.go @@ -72,6 +72,23 @@ func systemServerClasspath(ctx android.PathContext) []string { var systemServerClasspathKey = android.NewOnceKey("systemServerClasspath") +// dexpreoptTargets returns the list of targets that are relevant to dexpreopting, which excludes architectures +// supported through native bridge. +func dexpreoptTargets(ctx android.PathContext) []android.Target { + var targets []android.Target + for i, target := range ctx.Config().Targets[android.Android] { + if ctx.Config().SecondArchIsTranslated() && i > 0 { + break + } + + if target.NativeBridge == android.NativeBridgeDisabled { + targets = append(targets, target) + } + } + + return targets +} + // defaultBootImageConfig returns the bootImageConfig that will be used to dexpreopt modules. It is computed once the // first time it is called for any ctx.Config(), and returns the same slice for all future calls with the same // ctx.Config(). @@ -113,7 +130,9 @@ func defaultBootImageConfig(ctx android.PathContext) bootImageConfig { images := make(map[android.ArchType]android.OutputPath) zip := dir.Join(ctx, "boot.zip") - for _, target := range ctx.Config().Targets[android.Android] { + targets := dexpreoptTargets(ctx) + + for _, target := range targets { images[target.Arch.ArchType] = dir.Join(ctx, "system/framework", target.Arch.ArchType.String()).Join(ctx, "boot.art") } @@ -126,6 +145,7 @@ func defaultBootImageConfig(ctx android.PathContext) bootImageConfig { dir: dir, symbolsDir: symbolsDir, images: images, + targets: targets, zip: zip, } }).(bootImageConfig) @@ -168,7 +188,9 @@ func apexBootImageConfig(ctx android.PathContext) bootImageConfig { symbolsDir := android.PathForOutput(ctx, ctx.Config().DeviceName(), "dex_apexjars_unstripped") images := make(map[android.ArchType]android.OutputPath) - for _, target := range ctx.Config().Targets[android.Android] { + targets := dexpreoptTargets(ctx) + + for _, target := range targets { images[target.Arch.ArchType] = dir.Join(ctx, "system/framework", target.Arch.ArchType.String(), "apex.art") } @@ -180,6 +202,7 @@ func apexBootImageConfig(ctx android.PathContext) bootImageConfig { dexPaths: bootDexPaths, dir: dir, symbolsDir: symbolsDir, + targets: targets, images: images, } }).(bootImageConfig)