Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5ffe242 authored by Colin Cross's avatar Colin Cross Committed by Gerrit Code Review
Browse files

Merge "Move dexpreopt image selection out of dexpreopt package"

parents a0f23ad2 c7e40aa5
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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

+19 −13
Original line number Diff line number Diff line
@@ -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 == "" {
+23 −27
Original line number Diff line number Diff line
@@ -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"

+7 −2
Original line number Diff line number Diff line
@@ -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,