diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index 29030d69e..4ffe94428 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -174,10 +174,7 @@ func main() { build.SetupOutDir(buildCtx, config) // Set up files to be outputted in the log directory. - logsDir := config.OutDir() - if config.Dist() { - logsDir = filepath.Join(config.DistDir(), "logs") - } + logsDir := config.LogsDir() buildErrorFile := filepath.Join(logsDir, c.logsPrefix+"build_error") rbeMetricsFile := filepath.Join(logsDir, c.logsPrefix+"rbe_metrics.pb") diff --git a/shared/paths.go b/shared/paths.go index 24ba057aa..f5dc5dd2e 100644 --- a/shared/paths.go +++ b/shared/paths.go @@ -20,21 +20,23 @@ import ( "path/filepath" ) +// A SharedPaths represents a list of paths that are shared between +// soong_ui and soong. +type SharedPaths interface { + // BazelMetricsDir returns the path where a set of bazel profile + // files are stored for later processed by the metrics pipeline. + BazelMetricsDir() string +} + // Given the out directory, returns the root of the temp directory (to be cleared at the start of each execution of Soong) func TempDirForOutDir(outDir string) (tempPath string) { return filepath.Join(outDir, ".temp") } -// BazelMetricsDir returns the path where a set of bazel profile -// files are stored for later processed by the metrics pipeline. -func BazelMetricsDir(outDir string) string { - return filepath.Join(outDir, "bazel_metrics") -} - // BazelMetricsFilename returns the bazel profile filename based // on the action name. This is to help to store a set of bazel // profiles since bazel may execute multiple times during a single // build. -func BazelMetricsFilename(outDir, actionName string) string { - return filepath.Join(BazelMetricsDir(outDir), actionName+"_bazel_profile.gz") +func BazelMetricsFilename(s SharedPaths, actionName string) string { + return filepath.Join(s.BazelMetricsDir(), actionName+"_bazel_profile.gz") } diff --git a/ui/build/bazel.go b/ui/build/bazel.go index cc29aaf98..d9c226655 100644 --- a/ui/build/bazel.go +++ b/ui/build/bazel.go @@ -101,7 +101,7 @@ func runBazel(ctx Context, config Config) { // ninja_build target. "--output_groups="+outputGroups, // Generate a performance profile - "--profile="+filepath.Join(shared.BazelMetricsFilename(config.OutDir(), actionName)), + "--profile="+filepath.Join(shared.BazelMetricsFilename(config, actionName)), "--slim_profile=true", ) diff --git a/ui/build/config.go b/ui/build/config.go index c9911f3d1..72ae3fe75 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -275,7 +275,7 @@ func NewConfig(ctx Context, args ...string) Config { } } - bpd := shared.BazelMetricsDir(ret.OutDir()) + bpd := ret.BazelMetricsDir() if err := os.RemoveAll(bpd); err != nil { ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err) } @@ -1121,3 +1121,20 @@ func (c *configImpl) MetricsUploaderApp() string { } return "" } + +// LogsDir returns the logs directory where build log and metrics +// files are located. By default, the logs directory is the out +// directory. If the argument dist is specified, the logs directory +// is /logs. +func (c *configImpl) LogsDir() string { + if c.Dist() { + return filepath.Join(c.DistDir(), "logs") + } + return c.OutDir() +} + +// BazelMetricsDir returns the /bazel_metrics directory +// where the bazel profiles are located. +func (c *configImpl) BazelMetricsDir() string { + return filepath.Join(c.LogsDir(), "bazel_metrics") +}