diff --git a/.gitignore b/.gitignore
index 173b3ff..54e7505 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
/target
/targets
/results
-/db.sqlite
+/db.sqlite*
diff --git a/build.rs b/build.rs
index 232ad4d..ba68507 100644
--- a/build.rs
+++ b/build.rs
@@ -31,6 +31,10 @@ fn try_get_commit() -> color_eyre::Result {
}
fn has_no_changes() -> color_eyre::Result {
+ if std::env::var("DOES_IT_BUILD_OVERRIDE_VERSION").is_ok() {
+ return Ok(true);
+ }
+
Ok(std::process::Command::new("git")
.args(["diff", "--no-ext-diff", "--quiet", "--exit-code"])
.output()?
diff --git a/migrations/20250704160556_reset-missing-target-cpu.sql b/migrations/20250704160556_reset-missing-target-cpu.sql
new file mode 100644
index 0000000..76d96a5
--- /dev/null
+++ b/migrations/20250704160556_reset-missing-target-cpu.sql
@@ -0,0 +1,8 @@
+-- Add migration script here
+
+ALTER TABLE build_info
+ ADD COLUMN rustflags VARCHAR;
+
+DELETE FROM build_info WHERE target IN ('avr-none', 'amdgcn-amd-amdhsa') AND mode = 'core';
+
+DELETE FROM finished_nightly WHERE nightly > '2025-02-11';
diff --git a/src/build.rs b/src/build.rs
index 32fa1e1..e2d35f2 100644
--- a/src/build.rs
+++ b/src/build.rs
@@ -15,9 +15,25 @@ use tracing::{debug, error, info};
use crate::{
db::{BuildMode, Db, FullBuildInfo, Status},
- nightlies::{Nightlies, NightlyCache},
+ nightlies::Nightlies,
};
+struct CustomBuildFlags {
+ target: &'static str,
+ flags: &'static [&'static str],
+}
+
+const CUSTOM_CORE_FLAGS: &[CustomBuildFlags] = &[
+ CustomBuildFlags {
+ target: "avr-none",
+ flags: &["-Ctarget-cpu=atmega328p"],
+ },
+ CustomBuildFlags {
+ target: "amdgcn-amd-amdhsa",
+ flags: &["-Ctarget-cpu=gfx1100"],
+ },
+];
+
pub struct Toolchain(String);
impl Toolchain {
pub fn from_nightly(nightly: &str) -> Self {
@@ -36,18 +52,15 @@ impl Display for Toolchain {
}
pub async fn background_builder(db: Db) -> Result<()> {
- let mut nightly_cache = NightlyCache::default();
loop {
- if let Err(err) = background_builder_inner(&db, &mut nightly_cache).await {
+ if let Err(err) = background_builder_inner(&db).await {
error!("error in background builder: {err}");
}
}
}
-async fn background_builder_inner(db: &Db, nightly_cache: &mut NightlyCache) -> Result<()> {
- let nightlies = Nightlies::fetch(nightly_cache)
- .await
- .wrap_err("fetching nightlies")?;
+async fn background_builder_inner(db: &Db) -> Result<()> {
+ let nightlies = Nightlies::fetch().await.wrap_err("fetching nightlies")?;
let already_finished = db
.finished_nightlies()
.await
@@ -244,6 +257,7 @@ async fn build_single_target(db: &Db, nightly: &str, target: &str, mode: BuildMo
status: result.status,
stderr: result.stderr,
mode,
+ rustflags: result.rustflags,
})
.await?;
@@ -253,6 +267,7 @@ async fn build_single_target(db: &Db, nightly: &str, target: &str, mode: BuildMo
struct BuildResult {
status: Status,
stderr: String,
+ rustflags: Option,
}
/// Build a target core in a temporary directory and see whether it passes or not.
@@ -262,6 +277,8 @@ async fn build_target(
target: &str,
mode: BuildMode,
) -> Result {
+ let mut rustflags = None;
+
let output = match mode {
BuildMode::Core => {
let init = Command::new("cargo")
@@ -278,11 +295,22 @@ async fn build_target(
std::fs::write(&librs, "#![no_std]\n")
.wrap_err_with(|| format!("writing to {}", librs.display()))?;
- Command::new("cargo")
- .arg(format!("+{toolchain}"))
+ let mut cmd = Command::new("cargo");
+ cmd.arg(format!("+{toolchain}"))
.args(["build", "-Zbuild-std=core", "--release"])
- .args(["--target", target])
- .current_dir(tmpdir)
+ .args(["--target", target]);
+
+ let extra_flags = CUSTOM_CORE_FLAGS
+ .iter()
+ .find(|flags| flags.target == target);
+
+ if let Some(extra_flags) = extra_flags {
+ let flags = extra_flags.flags.join(" ");
+ cmd.env("RUSTFLAGS", &flags);
+ rustflags = Some(flags);
+ }
+
+ cmd.current_dir(tmpdir)
.output()
.await
.wrap_err("spawning cargo build")?
@@ -308,5 +336,9 @@ async fn build_target(
info!("Finished build");
- Ok(BuildResult { status, stderr })
+ Ok(BuildResult {
+ status,
+ stderr,
+ rustflags,
+ })
}
diff --git a/src/db.rs b/src/db.rs
index 42c1811..73aa95f 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -48,6 +48,7 @@ pub struct FullBuildInfo {
pub status: Status,
pub stderr: String,
pub mode: BuildMode,
+ pub rustflags: Option,
}
#[derive(Debug, PartialEq, Clone, Copy, sqlx::Type, Serialize, Deserialize)]
@@ -95,13 +96,14 @@ impl Db {
pub async fn insert(&self, info: FullBuildInfo) -> Result<()> {
sqlx::query(
- "INSERT INTO build_info (nightly, target, status, stderr, mode) VALUES (?, ?, ?, ?, ?);",
+ "INSERT INTO build_info (nightly, target, status, stderr, mode, rustflags) VALUES (?, ?, ?, ?, ?, ?);",
)
.bind(info.nightly)
.bind(info.target)
.bind(info.status)
.bind(info.stderr)
.bind(info.mode)
+ .bind(info.rustflags)
.execute(&self.conn)
.await
.wrap_err("inserting build info into database")?;
@@ -173,7 +175,7 @@ impl Db {
mode: BuildMode,
) -> Result
+ {% if showing_failures %}
+
+ show all
+
+ {% else %}
+
+ filter failures
+
+ {% endif %}
| nightly |
- core |
- std |
+ core codegen |
+ std check |
{% for build in builds %}
diff --git a/templates/target.html b/templates/target.html
index af2ba20..37aafb5 100644
--- a/templates/target.html
+++ b/templates/target.html
@@ -1,4 +1,4 @@
-
+
@@ -13,7 +13,7 @@
Target build history for {{target}}
- Back
+ Home
{{status}}
@@ -28,11 +28,20 @@
std builds (on targets that have it) but does not check whether
codegen/linking works.
+ {% if showing_failures %}
+
+ show all
+
+ {% else %}
+
+ filter failures
+
+ {% endif %}
| nightly |
- core |
- std |
+ core codegen |
+ std check |
{% for build in builds %}