Merge "Move dexpreopt image selection out of dexpreopt package"
This commit is contained in:
commit
a5ffe2426f
4 changed files with 54 additions and 47 deletions
|
@ -66,7 +66,7 @@ type GlobalConfig struct {
|
|||
|
||||
EmptyDirectory string // path to an empty directory
|
||||
|
||||
DefaultDexPreoptImageLocation map[string]string // default boot image location for each architecture
|
||||
DefaultDexPreoptImage map[string]string // default boot image location for each architecture
|
||||
CpuVariant map[string]string // cpu variant for each architecture
|
||||
InstructionSetFeatures map[string]string // instruction set for each architecture
|
||||
|
||||
|
@ -104,7 +104,7 @@ type ModuleConfig struct {
|
|||
LibraryPaths map[string]string
|
||||
|
||||
Archs []string
|
||||
DexPreoptImageLocation string
|
||||
DexPreoptImages []string
|
||||
|
||||
PreoptExtractedApk bool // Overrides OnlyPreoptModules
|
||||
|
||||
|
|
|
@ -113,12 +113,9 @@ func GenerateDexpreoptRule(global GlobalConfig, module ModuleConfig) (rule *andr
|
|||
|
||||
generateDM := shouldGenerateDM(module, global)
|
||||
|
||||
for _, arch := range module.Archs {
|
||||
imageLocation := module.DexPreoptImageLocation
|
||||
if imageLocation == "" {
|
||||
imageLocation = global.DefaultDexPreoptImageLocation[arch]
|
||||
}
|
||||
dexpreoptCommand(global, module, rule, profile, arch, imageLocation, appImage, generateDM)
|
||||
for i, arch := range module.Archs {
|
||||
image := module.DexPreoptImages[i]
|
||||
dexpreoptCommand(global, module, rule, profile, arch, image, appImage, generateDM)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -181,7 +178,7 @@ func profileCommand(global GlobalConfig, module ModuleConfig, rule *android.Rule
|
|||
}
|
||||
|
||||
func dexpreoptCommand(global GlobalConfig, module ModuleConfig, rule *android.RuleBuilder,
|
||||
profile, arch, bootImageLocation string, appImage, generateDM bool) {
|
||||
profile, arch, bootImage string, appImage, generateDM bool) {
|
||||
|
||||
// HACK: make soname in Soong-generated .odex files match Make.
|
||||
base := filepath.Base(module.DexLocation)
|
||||
|
@ -213,11 +210,11 @@ func dexpreoptCommand(global GlobalConfig, module ModuleConfig, rule *android.Ru
|
|||
|
||||
invocationPath := pathtools.ReplaceExtension(odexPath, "invocation")
|
||||
|
||||
// bootImageLocation is $OUT/dex_bootjars/system/framework/boot.art, but dex2oat actually reads
|
||||
// $OUT/dex_bootjars/system/framework/arm64/boot.art
|
||||
var bootImagePath string
|
||||
if bootImageLocation != "" {
|
||||
bootImagePath = filepath.Join(filepath.Dir(bootImageLocation), arch, filepath.Base(bootImageLocation))
|
||||
// bootImage is .../dex_bootjars/system/framework/arm64/boot.art, but dex2oat wants
|
||||
// .../dex_bootjars/system/framework/boot.art on the command line
|
||||
var bootImageLocation string
|
||||
if bootImage != "" {
|
||||
bootImageLocation = PathToLocation(bootImage, arch)
|
||||
}
|
||||
|
||||
// Lists of used and optional libraries from the build config to be verified against the manifest in the APK
|
||||
|
@ -325,7 +322,7 @@ func dexpreoptCommand(global GlobalConfig, module ModuleConfig, rule *android.Ru
|
|||
Flag("--runtime-arg").FlagWithArg("-Xbootclasspath-locations:", bcp_locations).
|
||||
Flag("${class_loader_context_arg}").
|
||||
Flag("${stored_class_loader_context_arg}").
|
||||
FlagWithArg("--boot-image=", bootImageLocation).Implicit(bootImagePath).
|
||||
FlagWithArg("--boot-image=", bootImageLocation).Implicit(bootImage).
|
||||
FlagWithInput("--dex-file=", module.DexPath).
|
||||
FlagWithArg("--dex-location=", module.DexLocation).
|
||||
FlagWithOutput("--oat-file=", odexPath).ImplicitOutput(vdexPath).
|
||||
|
@ -521,6 +518,15 @@ func odexOnSystemOther(module ModuleConfig, global GlobalConfig) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
// PathToLocation converts .../system/framework/arm64/boot.art to .../system/framework/boot.art
|
||||
func PathToLocation(path, arch string) string {
|
||||
pathArch := filepath.Base(filepath.Dir(path))
|
||||
if pathArch != arch {
|
||||
panic(fmt.Errorf("last directory in %q must be %q", path, arch))
|
||||
}
|
||||
return filepath.Join(filepath.Dir(filepath.Dir(path)), filepath.Base(path))
|
||||
}
|
||||
|
||||
func pathForLibrary(module ModuleConfig, lib string) string {
|
||||
path := module.LibraryPaths[lib]
|
||||
if path == "" {
|
||||
|
|
|
@ -48,7 +48,7 @@ var testGlobalConfig = GlobalConfig{
|
|||
Dex2oatXmx: "",
|
||||
Dex2oatXms: "",
|
||||
EmptyDirectory: "",
|
||||
DefaultDexPreoptImageLocation: nil,
|
||||
DefaultDexPreoptImage: nil,
|
||||
CpuVariant: nil,
|
||||
InstructionSetFeatures: nil,
|
||||
Tools: Tools{
|
||||
|
@ -76,8 +76,8 @@ var testModuleConfig = ModuleConfig{
|
|||
OptionalUsesLibraries: nil,
|
||||
UsesLibraries: nil,
|
||||
LibraryPaths: nil,
|
||||
Archs: nil,
|
||||
DexPreoptImageLocation: "",
|
||||
Archs: []string{"arm"},
|
||||
DexPreoptImages: []string{"system/framework/arm/boot.art"},
|
||||
PreoptExtractedApk: false,
|
||||
NoCreateAppImage: false,
|
||||
ForceCreateAppImage: false,
|
||||
|
@ -93,7 +93,6 @@ func TestDexPreopt(t *testing.T) {
|
|||
module.Name = "test"
|
||||
module.DexLocation = "/system/app/test/test.apk"
|
||||
module.BuildPath = "out/test/test.apk"
|
||||
module.Archs = []string{"arm"}
|
||||
|
||||
rule, err := GenerateDexpreoptRule(global, module)
|
||||
if err != nil {
|
||||
|
@ -119,7 +118,6 @@ func TestDexPreoptSystemOther(t *testing.T) {
|
|||
module.Name = "test"
|
||||
module.DexLocation = "/system/app/test/test.apk"
|
||||
module.BuildPath = "out/test/test.apk"
|
||||
module.Archs = []string{"arm"}
|
||||
|
||||
rule, err := GenerateDexpreoptRule(global, module)
|
||||
if err != nil {
|
||||
|
@ -143,7 +141,6 @@ func TestDexPreoptProfile(t *testing.T) {
|
|||
module.DexLocation = "/system/app/test/test.apk"
|
||||
module.BuildPath = "out/test/test.apk"
|
||||
module.ProfileClassListing = "profile"
|
||||
module.Archs = []string{"arm"}
|
||||
|
||||
rule, err := GenerateDexpreoptRule(global, module)
|
||||
if err != nil {
|
||||
|
@ -193,7 +190,6 @@ func TestStripDex(t *testing.T) {
|
|||
module.Name = "test"
|
||||
module.DexLocation = "/system/app/test/test.apk"
|
||||
module.BuildPath = "out/test/test.apk"
|
||||
module.Archs = []string{"arm"}
|
||||
module.StripInputPath = "$1"
|
||||
module.StripOutputPath = "$2"
|
||||
|
||||
|
|
|
@ -119,6 +119,11 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
|
|||
archs = archs[:1]
|
||||
}
|
||||
|
||||
var images []string
|
||||
for _, arch := range archs {
|
||||
images = append(images, globalConfig.DefaultDexPreoptImage[arch])
|
||||
}
|
||||
|
||||
dexLocation := android.InstallPathToOnDevicePath(ctx, d.installPath)
|
||||
|
||||
strippedDexJarFile := android.PathForModuleOut(ctx, "dexpreopt", dexJarFile.Base())
|
||||
|
@ -162,7 +167,7 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
|
|||
LibraryPaths: nil,
|
||||
|
||||
Archs: archs,
|
||||
DexPreoptImageLocation: "",
|
||||
DexPreoptImages: images,
|
||||
|
||||
PreoptExtractedApk: false,
|
||||
|
||||
|
|
Loading…
Reference in a new issue