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

Commit c8e7005b authored by Colin Cross's avatar Colin Cross Committed by android-build-merger
Browse files

Merge "Move dexpreopt image selection out of dexpreopt package"

am: a5ffe242

Change-Id: Ia6a12a33bf59630191a0c0bd97cea5bf040bcf6f
parents 7a6a06be a5ffe242
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,