From abecaaed2046e1ed9980b513aecc48a1858d8b0e Mon Sep 17 00:00:00 2001 From: Joey Riches Date: Tue, 22 Sep 2026 19:23:37 +0100 Subject: [PATCH] boulder: Clean out PGO profiling data between runs Before, stale profiling data would remain present in-between runs causing potentially stale data to affect optimization in the PGO use stage. --- boulder/src/build.rs | 12 ++++++------ boulder/src/build/job.rs | 4 ++++ boulder/src/build/job/phase.rs | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/boulder/src/build.rs b/boulder/src/build.rs index 9c49fd5d9..4097d1f38 100644 --- a/boulder/src/build.rs +++ b/boulder/src/build.rs @@ -19,7 +19,7 @@ use nix::{ use thiserror::Error; use tui::Styled; -use self::job::Job; +use self::job::{Job, pgo_dir}; use crate::{ Env, Macros, Paths, Recipe, Timing, architecture::BuildTarget, @@ -196,16 +196,16 @@ impl Builder { for (i, target) in self.targets.iter().enumerate() { println!("{}", build_target_prefix(target.build_target, i)); + // Clean out any pre-existing profiling data from PGO runs + if let Some(job) = target.jobs.iter().find(|job| job.pgo_stage.is_some()) { + util::recreate_dir(&pgo_dir(&job.build_dir))?; + } + for (i, job) in target.jobs.iter().enumerate() { let is_pgo = job.pgo_stage.is_some(); // Recreate work dir for each job util::recreate_dir(&job.work_dir)?; - // Ensure pgo dir exists - if is_pgo { - let pgo_dir = PathBuf::from(format!("{}-pgo", job.build_dir.display())); - util::ensure_dir_exists(&pgo_dir)?; - } if let Some(stage) = job.pgo_stage { println!("{}", pgo_stage_prefix(stage, i)); diff --git a/boulder/src/build/job.rs b/boulder/src/build/job.rs index 808716e7a..4b732fcd1 100644 --- a/boulder/src/build/job.rs +++ b/boulder/src/build/job.rs @@ -95,6 +95,10 @@ fn work_dir(build_dir: &Path, upstreams: &[Upstream]) -> PathBuf { work_dir } +pub fn pgo_dir(build_dir: &Path) -> PathBuf { + PathBuf::from(format!("{}-pgo", build_dir.display())) +} + #[derive(Debug, Error)] pub enum Error { #[error("missing arch macros: {0}")] diff --git a/boulder/src/build/job/phase.rs b/boulder/src/build/job/phase.rs index 9610183aa..507b268a5 100644 --- a/boulder/src/build/job/phase.rs +++ b/boulder/src/build/job/phase.rs @@ -13,7 +13,7 @@ use crate::build::pgo; use crate::build::script::ScriptBundle; use crate::{Macros, Paths, Recipe, architecture::BuildTarget}; -use super::{Error, work_dir}; +use super::{Error, pgo_dir, work_dir}; pub fn list(pgo_stage: Option) -> Vec { if matches!(pgo_stage, Some(pgo::Stage::One | pgo::Stage::Two)) { @@ -216,7 +216,7 @@ impl Phase { env.add_builtin_string("pgo_stage", "NONE"); } - env.add_builtin_string("pgo_dir", format!("{}-pgo", build_dir.display())); + env.add_builtin_string("pgo_dir", pgo_dir(&build_dir).display()); add_tuning(target, pgo_stage, recipe, macros, &mut env)?;