diff options
author | Colin Cross <ccross@android.com> | 2019-02-21 05:03:00 +0000 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2019-02-21 05:03:00 +0000 |
commit | ab898dc4a4645166c469e5409d2f42282a72d777 (patch) | |
tree | 0f0f62f25cb4a546543d4faddd084fb18df8d09b /dexpreopt/dexpreopt.go | |
parent | acdd6940719125104dfd2f692990c99682f95f05 (diff) | |
download | build_soong-ab898dc4a4645166c469e5409d2f42282a72d777.tar.gz build_soong-ab898dc4a4645166c469e5409d2f42282a72d777.tar.bz2 build_soong-ab898dc4a4645166c469e5409d2f42282a72d777.zip |
Revert "Make RuleBuilder methods take Paths"
This reverts commit acdd6940719125104dfd2f692990c99682f95f05.
Reason for revert: broke ndk build
Change-Id: I5655e48c15eb8f5f0267afdd853fbc25765b8623
Diffstat (limited to 'dexpreopt/dexpreopt.go')
-rw-r--r-- | dexpreopt/dexpreopt.go | 105 |
1 files changed, 42 insertions, 63 deletions
diff --git a/dexpreopt/dexpreopt.go b/dexpreopt/dexpreopt.go index 9e333c10..7fdfb496 100644 --- a/dexpreopt/dexpreopt.go +++ b/dexpreopt/dexpreopt.go @@ -37,7 +37,6 @@ package dexpreopt import ( "fmt" "path/filepath" - "runtime" "strings" "android/soong/android" @@ -53,9 +52,7 @@ const SystemOtherPartition = "/system_other/" func GenerateStripRule(global GlobalConfig, module ModuleConfig) (rule *android.RuleBuilder, err error) { defer func() { if r := recover(); r != nil { - if _, ok := r.(runtime.Error); ok { - panic(r) - } else if e, ok := r.(error); ok { + if e, ok := r.(error); ok { err = e rule = nil } else { @@ -89,14 +86,10 @@ func GenerateStripRule(global GlobalConfig, module ModuleConfig) (rule *android. // GenerateDexpreoptRule generates a set of commands that will preopt a module based on a GlobalConfig and a // ModuleConfig. The produced files and their install locations will be available through rule.Installs(). -func GenerateDexpreoptRule(ctx android.PathContext, - global GlobalConfig, module ModuleConfig) (rule *android.RuleBuilder, err error) { - +func GenerateDexpreoptRule(global GlobalConfig, module ModuleConfig) (rule *android.RuleBuilder, err error) { defer func() { if r := recover(); r != nil { - if _, ok := r.(runtime.Error); ok { - panic(r) - } else if e, ok := r.(error); ok { + if e, ok := r.(error); ok { err = e rule = nil } else { @@ -107,11 +100,11 @@ func GenerateDexpreoptRule(ctx android.PathContext, rule = android.NewRuleBuilder() - generateProfile := module.ProfileClassListing.Valid() && !global.DisableGenerateProfile + generateProfile := module.ProfileClassListing != "" && !global.DisableGenerateProfile - var profile android.WritablePath + var profile string if generateProfile { - profile = profileCommand(ctx, global, module, rule) + profile = profileCommand(global, module, rule) } if !dexpreoptDisabled(global, module) { @@ -125,7 +118,7 @@ func GenerateDexpreoptRule(ctx android.PathContext, for i, arch := range module.Archs { image := module.DexPreoptImages[i] - dexpreoptCommand(ctx, global, module, rule, arch, profile, image, appImage, generateDM) + dexpreoptCommand(global, module, rule, arch, profile, image, appImage, generateDM) } } } @@ -150,10 +143,8 @@ func dexpreoptDisabled(global GlobalConfig, module ModuleConfig) bool { return false } -func profileCommand(ctx android.PathContext, global GlobalConfig, module ModuleConfig, - rule *android.RuleBuilder) android.WritablePath { - - profilePath := module.BuildPath.InSameDir(ctx, "profile.prof") +func profileCommand(global GlobalConfig, module ModuleConfig, rule *android.RuleBuilder) string { + profilePath := filepath.Join(filepath.Dir(module.BuildPath), "profile.prof") profileInstalledPath := module.DexLocation + ".prof" if !module.ProfileIsTextListing { @@ -167,13 +158,13 @@ func profileCommand(ctx android.PathContext, global GlobalConfig, module ModuleC if module.ProfileIsTextListing { // The profile is a test listing of classes (used for framework jars). // We need to generate the actual binary profile before being able to compile. - cmd.FlagWithInput("--create-profile-from=", module.ProfileClassListing.Path()) + cmd.FlagWithInput("--create-profile-from=", module.ProfileClassListing) } else { // The profile is binary profile (used for apps). Run it through profman to // ensure the profile keys match the apk. cmd. Flag("--copy-and-update-profile-key"). - FlagWithInput("--profile-file=", module.ProfileClassListing.Path()) + FlagWithInput("--profile-file=", module.ProfileClassListing) } cmd. @@ -189,8 +180,8 @@ func profileCommand(ctx android.PathContext, global GlobalConfig, module ModuleC return profilePath } -func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module ModuleConfig, rule *android.RuleBuilder, - arch android.ArchType, profile, bootImage android.Path, appImage, generateDM bool) { +func dexpreoptCommand(global GlobalConfig, module ModuleConfig, rule *android.RuleBuilder, + arch android.ArchType, profile, bootImage string, appImage, generateDM bool) { // HACK: make soname in Soong-generated .odex files match Make. base := filepath.Base(module.DexLocation) @@ -208,21 +199,21 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul pathtools.ReplaceExtension(filepath.Base(path), "odex")) } - odexPath := module.BuildPath.InSameDir(ctx, "oat", arch.String(), pathtools.ReplaceExtension(base, "odex")) + odexPath := toOdexPath(filepath.Join(filepath.Dir(module.BuildPath), base)) odexInstallPath := toOdexPath(module.DexLocation) if odexOnSystemOther(module, global) { odexInstallPath = strings.Replace(odexInstallPath, SystemPartition, SystemOtherPartition, 1) } - vdexPath := odexPath.ReplaceExtension(ctx, "vdex") + vdexPath := pathtools.ReplaceExtension(odexPath, "vdex") vdexInstallPath := pathtools.ReplaceExtension(odexInstallPath, "vdex") - invocationPath := odexPath.ReplaceExtension(ctx, "invocation") + invocationPath := pathtools.ReplaceExtension(odexPath, "invocation") // 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 != nil { + if bootImage != "" { bootImageLocation = PathToLocation(bootImage, arch) } @@ -236,21 +227,19 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul var filteredOptionalUsesLibs []string // The class loader context using paths in the build - var classLoaderContextHost android.Paths + var classLoaderContextHost []string // The class loader context using paths as they will be on the device var classLoaderContextTarget []string // Extra paths that will be appended to the class loader if the APK manifest has targetSdkVersion < 28 - var conditionalClassLoaderContextHost28 android.Paths + var conditionalClassLoaderContextHost28 []string var conditionalClassLoaderContextTarget28 []string // Extra paths that will be appended to the class loader if the APK manifest has targetSdkVersion < 29 - var conditionalClassLoaderContextHost29 android.Paths + var conditionalClassLoaderContextHost29 []string var conditionalClassLoaderContextTarget29 []string - var classLoaderContextHostString string - if module.EnforceUsesLibraries { verifyUsesLibs = copyOf(module.UsesLibraries) verifyOptionalUsesLibs = copyOf(module.OptionalUsesLibraries) @@ -292,41 +281,31 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul pathForLibrary(module, hidlBase)) conditionalClassLoaderContextTarget29 = append(conditionalClassLoaderContextTarget29, filepath.Join("/system/framework", hidlBase+".jar")) - - classLoaderContextHostString = strings.Join(classLoaderContextHost.Strings(), ":") } else { // Pass special class loader context to skip the classpath and collision check. // This will get removed once LOCAL_USES_LIBRARIES is enforced. // Right now LOCAL_USES_LIBRARIES is opt in, for the case where it's not specified we still default // to the &. - classLoaderContextHostString = `\&` + classLoaderContextHost = []string{`\&`} } - rule.Command().FlagWithArg("mkdir -p ", filepath.Dir(odexPath.String())) + rule.Command().FlagWithArg("mkdir -p ", filepath.Dir(odexPath)) rule.Command().FlagWithOutput("rm -f ", odexPath) // Set values in the environment of the rule. These may be modified by construct_context.sh. - rule.Command().FlagWithArg("class_loader_context_arg=--class-loader-context=", classLoaderContextHostString) + rule.Command().FlagWithArg("class_loader_context_arg=--class-loader-context=", + strings.Join(classLoaderContextHost, ":")) rule.Command().Text(`stored_class_loader_context_arg=""`) if module.EnforceUsesLibraries { rule.Command().Textf(`uses_library_names="%s"`, strings.Join(verifyUsesLibs, " ")) rule.Command().Textf(`optional_uses_library_names="%s"`, strings.Join(verifyOptionalUsesLibs, " ")) rule.Command().Textf(`aapt_binary="%s"`, global.Tools.Aapt) - rule.Command().Textf(`dex_preopt_host_libraries="%s"`, - strings.Join(classLoaderContextHost.Strings(), " ")). - Implicits(classLoaderContextHost) - rule.Command().Textf(`dex_preopt_target_libraries="%s"`, - strings.Join(classLoaderContextTarget, " ")) - rule.Command().Textf(`conditional_host_libs_28="%s"`, - strings.Join(conditionalClassLoaderContextHost28.Strings(), " ")). - Implicits(conditionalClassLoaderContextHost28) - rule.Command().Textf(`conditional_target_libs_28="%s"`, - strings.Join(conditionalClassLoaderContextTarget28, " ")) - rule.Command().Textf(`conditional_host_libs_29="%s"`, - strings.Join(conditionalClassLoaderContextHost29.Strings(), " ")). - Implicits(conditionalClassLoaderContextHost29) - rule.Command().Textf(`conditional_target_libs_29="%s"`, - strings.Join(conditionalClassLoaderContextTarget29, " ")) + rule.Command().Textf(`dex_preopt_host_libraries="%s"`, strings.Join(classLoaderContextHost, " ")) + rule.Command().Textf(`dex_preopt_target_libraries="%s"`, strings.Join(classLoaderContextTarget, " ")) + rule.Command().Textf(`conditional_host_libs_28="%s"`, strings.Join(conditionalClassLoaderContextHost28, " ")) + rule.Command().Textf(`conditional_target_libs_28="%s"`, strings.Join(conditionalClassLoaderContextTarget28, " ")) + rule.Command().Textf(`conditional_host_libs_29="%s"`, strings.Join(conditionalClassLoaderContextHost29, " ")) + rule.Command().Textf(`conditional_target_libs_29="%s"`, strings.Join(conditionalClassLoaderContextTarget29, " ")) rule.Command().Text("source").Tool(global.Tools.VerifyUsesLibraries).Input(module.DexPath) rule.Command().Text("source").Tool(global.Tools.ConstructContext) } @@ -385,7 +364,7 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul // Apps loaded into system server, and apps the product default to being compiled with the // 'speed' compiler filter. compilerFilter = "speed" - } else if profile != nil { + } else if profile != "" { // For non system server jars, use speed-profile when we have a profile. compilerFilter = "speed-profile" } else if global.DefaultCompilerFilter != "" { @@ -398,9 +377,9 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul if generateDM { cmd.FlagWithArg("--copy-dex-files=", "false") - dmPath := module.BuildPath.InSameDir(ctx, "generated.dm") + dmPath := filepath.Join(filepath.Dir(module.BuildPath), "generated.dm") dmInstalledPath := pathtools.ReplaceExtension(module.DexLocation, "dm") - tmpPath := module.BuildPath.InSameDir(ctx, "primary.vdex") + tmpPath := filepath.Join(filepath.Dir(module.BuildPath), "primary.vdex") rule.Command().Text("cp -f").Input(vdexPath).Output(tmpPath) rule.Command().Tool(global.Tools.SoongZip). FlagWithArg("-L", "9"). @@ -449,15 +428,15 @@ func dexpreoptCommand(ctx android.PathContext, global GlobalConfig, module Modul cmd.FlagWithArg("--compilation-reason=", "prebuilt") if appImage { - appImagePath := odexPath.ReplaceExtension(ctx, "art") + appImagePath := pathtools.ReplaceExtension(odexPath, "art") appImageInstallPath := pathtools.ReplaceExtension(odexInstallPath, "art") cmd.FlagWithOutput("--app-image-file=", appImagePath). FlagWithArg("--image-format=", "lz4") rule.Install(appImagePath, appImageInstallPath) } - if profile != nil { - cmd.FlagWithInput("--profile-file=", profile) + if profile != "" { + cmd.FlagWithArg("--profile-file=", profile) } rule.Install(odexPath, odexInstallPath) @@ -543,17 +522,17 @@ func odexOnSystemOther(module ModuleConfig, global GlobalConfig) bool { } // PathToLocation converts .../system/framework/arm64/boot.art to .../system/framework/boot.art -func PathToLocation(path android.Path, arch android.ArchType) string { - pathArch := filepath.Base(filepath.Dir(path.String())) +func PathToLocation(path string, arch android.ArchType) string { + pathArch := filepath.Base(filepath.Dir(path)) if pathArch != arch.String() { panic(fmt.Errorf("last directory in %q must be %q", path, arch.String())) } - return filepath.Join(filepath.Dir(filepath.Dir(path.String())), filepath.Base(path.String())) + return filepath.Join(filepath.Dir(filepath.Dir(path)), filepath.Base(path)) } -func pathForLibrary(module ModuleConfig, lib string) android.Path { - path, ok := module.LibraryPaths[lib] - if !ok { +func pathForLibrary(module ModuleConfig, lib string) string { + path := module.LibraryPaths[lib] + if path == "" { panic(fmt.Errorf("unknown library path for %q", lib)) } return path |