Allow installing boot images outside of APEX.
After this change, `bootImageConfig.installDirOnDevice` can be set to a path outside of the APEX, in which case, the boot image will not be installed in the APEX. Instead, it will be installed to the given path by Make. This is a no-op change. Current behavior is not affected. Bug: 211973309 Test: m nothing Test: - 1. m com.android.art 2. See the boot image still being installed in the ART APEX. Test: - 1. Change `installDirOnDevice` of the ART boot image config to `system/framework`. 2. See the boot image being installed in `/system/framework/<arch>`. Change-Id: Ib13b17cc9e94dc5754c9b51b04df3307323b8783
This commit is contained in:
@@ -313,10 +313,13 @@ type bootImageVariant struct {
|
||||
// This is only set for a variant of an image that extends another image.
|
||||
primaryImagesDeps android.Paths
|
||||
|
||||
// Rules which should be used in make to install the outputs.
|
||||
// Rules which should be used in make to install the outputs on host.
|
||||
installs android.RuleBuilderInstalls
|
||||
vdexInstalls android.RuleBuilderInstalls
|
||||
unstrippedInstalls android.RuleBuilderInstalls
|
||||
|
||||
// Rules which should be used in make to install the outputs on device.
|
||||
deviceInstalls android.RuleBuilderInstalls
|
||||
}
|
||||
|
||||
// Get target-specific boot image variant for the given boot image config and target.
|
||||
@@ -388,6 +391,11 @@ func (image *bootImageConfig) apexVariants() []*bootImageVariant {
|
||||
return variants
|
||||
}
|
||||
|
||||
// Returns true if the boot image should be installed in the APEX.
|
||||
func (image *bootImageConfig) shouldInstallInApex() bool {
|
||||
return strings.HasPrefix(image.installDirOnDevice, "apex/")
|
||||
}
|
||||
|
||||
// Return boot image locations (as a list of symbolic paths).
|
||||
//
|
||||
// The image "location" is a symbolic path that, with multiarchitecture support, doesn't really
|
||||
@@ -710,6 +718,7 @@ func buildBootImageVariant(ctx android.ModuleContext, image *bootImageVariant, p
|
||||
|
||||
var vdexInstalls android.RuleBuilderInstalls
|
||||
var unstrippedInstalls android.RuleBuilderInstalls
|
||||
var deviceInstalls android.RuleBuilderInstalls
|
||||
|
||||
for _, artOrOat := range image.moduleFiles(ctx, outputDir, ".art", ".oat") {
|
||||
cmd.ImplicitOutput(artOrOat)
|
||||
@@ -735,12 +744,21 @@ func buildBootImageVariant(ctx android.ModuleContext, image *bootImageVariant, p
|
||||
android.RuleBuilderInstall{unstrippedOat, filepath.Join(installDir, unstrippedOat.Base())})
|
||||
}
|
||||
|
||||
if image.installDirOnHost != image.installDirOnDevice && !image.shouldInstallInApex() && !ctx.Config().UnbundledBuild() {
|
||||
installDirOnDevice := filepath.Join("/", image.installDirOnDevice, arch.String())
|
||||
for _, file := range image.moduleFiles(ctx, outputDir, ".art", ".oat", ".vdex") {
|
||||
deviceInstalls = append(deviceInstalls,
|
||||
android.RuleBuilderInstall{file, filepath.Join(installDirOnDevice, file.Base())})
|
||||
}
|
||||
}
|
||||
|
||||
rule.Build(image.name+"JarsDexpreopt_"+image.target.String(), "dexpreopt "+image.name+" jars "+arch.String())
|
||||
|
||||
// save output and installed files for makevars
|
||||
image.installs = rule.Installs()
|
||||
image.vdexInstalls = vdexInstalls
|
||||
image.unstrippedInstalls = unstrippedInstalls
|
||||
image.deviceInstalls = deviceInstalls
|
||||
}
|
||||
|
||||
const failureMessage = `ERROR: Dex2oat failed to compile a boot image.
|
||||
|
Reference in New Issue
Block a user