Make RuleBuilder methods take Paths
There are no more Make paths being used in Soong now that dexpreopting and hiddenapi are in Soong. Use the Path types in the inputs to RuleBuilder, and fix all users of RuleBuilder. This reapplies I886f803d9a3419a43b2cae412537645f94c5dfbf with fixes to disable preopt for Soong-only builds when the global dexpreopt.config doesn't exist. Test: all soong tests Test: m checkbuild Change-Id: I4dae9ecd5de22f062f9478ec8f0747f099cf8190
This commit is contained in:
@@ -240,7 +240,7 @@ func (dexpreoptBootJars) GenerateBuildActions(ctx android.SingletonContext) {
|
||||
|
||||
profile := bootImageProfileRule(ctx, info, missingDeps)
|
||||
|
||||
if !ctx.Config().DisableDexPreopt() {
|
||||
if !info.global.DisablePreopt {
|
||||
targets := ctx.Config().Targets[android.Android]
|
||||
if ctx.Config().SecondArchIsTranslated() {
|
||||
targets = targets[:1]
|
||||
@@ -259,7 +259,7 @@ func dexPreoptBootImageRule(ctx android.SingletonContext, info *bootJarsInfo,
|
||||
symbolsFile := symbolsDir.Join(ctx, "boot.oat")
|
||||
outputDir := info.dir.Join(ctx, "system/framework", arch.String())
|
||||
outputPath := info.images[arch]
|
||||
oatLocation := pathtools.ReplaceExtension(dexpreopt.PathToLocation(outputPath.String(), arch), "oat")
|
||||
oatLocation := pathtools.ReplaceExtension(dexpreopt.PathToLocation(outputPath, arch), "oat")
|
||||
|
||||
rule := android.NewRuleBuilder()
|
||||
rule.MissingDeps(missingDeps)
|
||||
@@ -289,31 +289,31 @@ func dexPreoptBootImageRule(ctx android.SingletonContext, info *bootJarsInfo,
|
||||
|
||||
cmd.Tool(info.global.Tools.Dex2oat).
|
||||
Flag("--avoid-storing-invocation").
|
||||
FlagWithOutput("--write-invocation-to=", invocationPath.String()).ImplicitOutput(invocationPath.String()).
|
||||
FlagWithOutput("--write-invocation-to=", invocationPath).ImplicitOutput(invocationPath).
|
||||
Flag("--runtime-arg").FlagWithArg("-Xms", info.global.Dex2oatImageXms).
|
||||
Flag("--runtime-arg").FlagWithArg("-Xmx", info.global.Dex2oatImageXmx)
|
||||
|
||||
if profile == nil {
|
||||
cmd.FlagWithArg("--image-classes=", info.global.PreloadedClasses)
|
||||
} else {
|
||||
if profile != nil {
|
||||
cmd.FlagWithArg("--compiler-filter=", "speed-profile")
|
||||
cmd.FlagWithInput("--profile-file=", profile.String())
|
||||
cmd.FlagWithInput("--profile-file=", profile)
|
||||
} else if info.global.PreloadedClasses.Valid() {
|
||||
cmd.FlagWithInput("--image-classes=", info.global.PreloadedClasses.Path())
|
||||
}
|
||||
|
||||
if info.global.DirtyImageObjects != "" {
|
||||
cmd.FlagWithArg("--dirty-image-objects=", info.global.DirtyImageObjects)
|
||||
if info.global.DirtyImageObjects.Valid() {
|
||||
cmd.FlagWithInput("--dirty-image-objects=", info.global.DirtyImageObjects.Path())
|
||||
}
|
||||
|
||||
cmd.
|
||||
FlagForEachInput("--dex-file=", info.preoptBootDex.Strings()).
|
||||
FlagForEachInput("--dex-file=", info.preoptBootDex.Paths()).
|
||||
FlagForEachArg("--dex-location=", info.preoptBootLocations).
|
||||
Flag("--generate-debug-info").
|
||||
Flag("--generate-build-id").
|
||||
FlagWithArg("--oat-symbols=", symbolsFile.String()).
|
||||
FlagWithOutput("--oat-symbols=", symbolsFile).
|
||||
Flag("--strip").
|
||||
FlagWithOutput("--oat-file=", outputPath.ReplaceExtension(ctx, "oat").String()).
|
||||
FlagWithOutput("--oat-file=", outputPath.ReplaceExtension(ctx, "oat")).
|
||||
FlagWithArg("--oat-location=", oatLocation).
|
||||
FlagWithOutput("--image=", outputPath.String()).
|
||||
FlagWithOutput("--image=", outputPath).
|
||||
FlagWithArg("--base=", ctx.Config().LibartImgDeviceBaseAddress()).
|
||||
FlagWithArg("--instruction-set=", arch.String()).
|
||||
FlagWithArg("--instruction-set-variant=", info.global.CpuVariant[arch]).
|
||||
@@ -358,21 +358,21 @@ func dexPreoptBootImageRule(ctx android.SingletonContext, info *bootJarsInfo,
|
||||
extraFiles = append(extraFiles, art, oat, vdex, unstrippedOat)
|
||||
|
||||
// Install the .oat and .art files.
|
||||
rule.Install(art.String(), filepath.Join(installDir, art.Base()))
|
||||
rule.Install(oat.String(), filepath.Join(installDir, oat.Base()))
|
||||
rule.Install(art, filepath.Join(installDir, art.Base()))
|
||||
rule.Install(oat, filepath.Join(installDir, oat.Base()))
|
||||
|
||||
// The vdex files are identical between architectures, install them to a shared location. The Make rules will
|
||||
// only use the install rules for one architecture, and will create symlinks into the architecture-specific
|
||||
// directories.
|
||||
vdexInstalls = append(vdexInstalls,
|
||||
android.RuleBuilderInstall{vdex.String(), filepath.Join(vdexInstallDir, vdex.Base())})
|
||||
android.RuleBuilderInstall{vdex, filepath.Join(vdexInstallDir, vdex.Base())})
|
||||
|
||||
// Install the unstripped oat files. The Make rules will put these in $(TARGET_OUT_UNSTRIPPED)
|
||||
unstrippedInstalls = append(unstrippedInstalls,
|
||||
android.RuleBuilderInstall{unstrippedOat.String(), filepath.Join(installDir, unstrippedOat.Base())})
|
||||
android.RuleBuilderInstall{unstrippedOat, filepath.Join(installDir, unstrippedOat.Base())})
|
||||
}
|
||||
|
||||
cmd.ImplicitOutputs(extraFiles.Strings())
|
||||
cmd.ImplicitOutputs(extraFiles)
|
||||
|
||||
rule.Build(pctx, ctx, "bootJarsDexpreopt_"+arch.String(), "dexpreopt boot jars "+arch.String())
|
||||
|
||||
@@ -387,7 +387,7 @@ It is likely that the boot classpath is inconsistent.
|
||||
Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifier" to see verification errors.`
|
||||
|
||||
func bootImageProfileRule(ctx android.SingletonContext, info *bootJarsInfo, missingDeps []string) android.WritablePath {
|
||||
if len(info.global.BootImageProfiles) == 0 {
|
||||
if !info.global.UseProfileForBootImage || ctx.Config().IsPdkBuild() || ctx.Config().UnbundledBuild() {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -396,13 +396,25 @@ func bootImageProfileRule(ctx android.SingletonContext, info *bootJarsInfo, miss
|
||||
rule := android.NewRuleBuilder()
|
||||
rule.MissingDeps(missingDeps)
|
||||
|
||||
var bootImageProfile string
|
||||
var bootImageProfile android.Path
|
||||
if len(info.global.BootImageProfiles) > 1 {
|
||||
combinedBootImageProfile := info.dir.Join(ctx, "boot-image-profile.txt")
|
||||
rule.Command().Text("cat").Inputs(info.global.BootImageProfiles).Text(">").Output(combinedBootImageProfile.String())
|
||||
bootImageProfile = combinedBootImageProfile.String()
|
||||
} else {
|
||||
rule.Command().Text("cat").Inputs(info.global.BootImageProfiles).Text(">").Output(combinedBootImageProfile)
|
||||
bootImageProfile = combinedBootImageProfile
|
||||
} else if len(info.global.BootImageProfiles) == 1 {
|
||||
bootImageProfile = info.global.BootImageProfiles[0]
|
||||
} else {
|
||||
// If not set, use the default. Some branches like master-art-host don't have frameworks/base, so manually
|
||||
// handle the case that the default is missing. Those branches won't attempt to build the profile rule,
|
||||
// and if they do they'll get a missing deps error.
|
||||
defaultProfile := "frameworks/base/config/boot-image-profile.txt"
|
||||
path := android.ExistentPathForSource(ctx, defaultProfile)
|
||||
if path.Valid() {
|
||||
bootImageProfile = path.Path()
|
||||
} else {
|
||||
missingDeps = append(missingDeps, defaultProfile)
|
||||
bootImageProfile = android.PathForOutput(ctx, "missing")
|
||||
}
|
||||
}
|
||||
|
||||
profile := info.dir.Join(ctx, "boot.prof")
|
||||
@@ -410,12 +422,12 @@ func bootImageProfileRule(ctx android.SingletonContext, info *bootJarsInfo, miss
|
||||
rule.Command().
|
||||
Text(`ANDROID_LOG_TAGS="*:e"`).
|
||||
Tool(tools.Profman).
|
||||
FlagWithArg("--create-profile-from=", bootImageProfile).
|
||||
FlagForEachInput("--apk=", info.preoptBootDex.Strings()).
|
||||
FlagWithInput("--create-profile-from=", bootImageProfile).
|
||||
FlagForEachInput("--apk=", info.preoptBootDex.Paths()).
|
||||
FlagForEachArg("--dex-location=", info.preoptBootLocations).
|
||||
FlagWithOutput("--reference-profile-file=", profile.String())
|
||||
FlagWithOutput("--reference-profile-file=", profile)
|
||||
|
||||
rule.Install(profile.String(), "/system/etc/boot-image.prof")
|
||||
rule.Install(profile, "/system/etc/boot-image.prof")
|
||||
|
||||
rule.Build(pctx, ctx, "bootJarsProfile", "profile boot jars")
|
||||
|
||||
@@ -439,16 +451,6 @@ func bootImageMakeVars(ctx android.MakeVarsContext) {
|
||||
for arch, _ := range info.images {
|
||||
ctx.Strict("DEXPREOPT_IMAGE_"+arch.String(), info.images[arch].String())
|
||||
|
||||
var builtInstalled []string
|
||||
for _, install := range info.installs[arch] {
|
||||
builtInstalled = append(builtInstalled, install.From+":"+install.To)
|
||||
}
|
||||
|
||||
var unstrippedBuiltInstalled []string
|
||||
for _, install := range info.unstrippedInstalls[arch] {
|
||||
unstrippedBuiltInstalled = append(unstrippedBuiltInstalled, install.From+":"+install.To)
|
||||
}
|
||||
|
||||
ctx.Strict("DEXPREOPT_IMAGE_BUILT_INSTALLED_"+arch.String(), info.installs[arch].String())
|
||||
ctx.Strict("DEXPREOPT_IMAGE_UNSTRIPPED_BUILT_INSTALLED_"+arch.String(), info.unstrippedInstalls[arch].String())
|
||||
ctx.Strict("DEXPREOPT_IMAGE_VDEX_BUILT_INSTALLED_"+arch.String(), info.vdexInstalls[arch].String())
|
||||
|
Reference in New Issue
Block a user