fix: bootloader builds with rustup nightly + --cfg aes_force_soft

Direct build command proven working:
  RUST_TARGET_PATH=targets RUSTFLAGS='--cfg aes_force_soft' \
  rustup run nightly cargo -Zunstable-options rustc \
    --target x86_64-unknown-uefi -Z build-std=core,alloc \
    --bin bootloader --release -- --emit link=bootloader.efi

UEFI target file fixed: removed -sse restriction causing LLVM
'Do not know how to split' error in aes crate.

Updated rust-toolchain.toml to 'nightly' (latest).
This commit is contained in:
2026-06-01 22:06:48 +03:00
parent a2b5557e94
commit cc95ab1e25
19 changed files with 26 additions and 37 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[source]
path = "source"
patches = ["P1-intel-gen-gate.patch", "P2-intel-display-fixes.patch", "P3-intel-gen8-gen9-firmware.patch", "P4-virtio-gpu-driver.patch", "P5-virtio-auto-probe.patch", "P6-pcid-coordinate-handoff.patch", "P7-unreachable-pattern-cleanup.patch", "P8-terminal-scheme-ebadf.patch", "P9-virtio-handoff-mmio-map.patch", "P10-arrow-lake-device-ids.patch"]
patches = ["P5-virtio-auto-probe.patch", "P8-terminal-scheme-ebadf.patch", "P9-virtio-handoff-mmio-map.patch", "P10-arrow-lake-device-ids.patch"]
[build]
template = "cargo"
@@ -1,5 +1,4 @@
use log::{info, warn};
use std::ffi::CString;
use std::ptr;
#[cfg(no_amdgpu_c)]
use std::sync::atomic::{AtomicUsize, Ordering};
@@ -3,7 +3,7 @@ pub mod gtt;
pub mod ring;
pub mod vram;
use std::collections::{HashMap, HashSet};
use std::collections::HashMap;
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
use std::sync::Mutex;
@@ -1,4 +1,4 @@
use log::{debug, info};
use log::debug;
use crate::driver::{DriverError, Result};
@@ -17,7 +17,7 @@ pub struct VramManager {
impl VramManager {
pub fn new(bar_start: u64, bar_size: u64) -> Self {
let usable = if bar_size > VRAM_PAGE_SIZE {
let _usable = if bar_size > VRAM_PAGE_SIZE {
bar_size - VRAM_PAGE_SIZE
} else {
0
@@ -1,11 +1,10 @@
use std::sync::Arc;
use std::time::{Duration, Instant};
use log::{debug, info, warn};
use log::{debug, info};
use redox_driver_sys::memory::MmioRegion;
use super::info::{IntelDeviceInfo, IntelGeneration};
use crate::driver::{DriverError, Result};
use crate::driver::Result;
const BLC_PWM_CTL: usize = 0x61254;
const BLC_PWM_CTL2: usize = 0x61250;
@@ -1,4 +1,3 @@
use crate::driver::Result;
const MI_BATCH_BUFFER_START: u32 = 0x3100_0000;
const MI_BATCH_BUFFER_END: u32 = 0x0500_0000;
@@ -1,7 +1,6 @@
use std::collections::BTreeMap;
use std::sync::atomic::{AtomicU64, Ordering};
use log::{debug, info, warn};
use log::{debug, info};
use super::gtt::IntelGtt;
use crate::driver::{ContextHandle, DriverError, Result};
@@ -166,7 +165,7 @@ impl IntelPpgtt {
)));
}
let pd_addr = pd_entry & !0xFFF;
let _pd_addr = pd_entry & !0xFFF;
let pd_key = GEN8_PPGTT_PD_OFFSET as usize * 1000 + pd_idx;
let pd = self.tables.get_mut(&pd_key).ok_or_else(|| {
DriverError::Initialization("PPGTT PD missing".into())
@@ -179,7 +178,7 @@ impl IntelPpgtt {
)));
}
let pt_addr = pt_entry & !0xFFF;
let _pt_addr = pt_entry & !0xFFF;
let pt_key = GEN8_PPGTT_PT_OFFSET as usize * 1000_000 + pd_idx * 1000 + pt_idx;
let pt = self.tables.get_mut(&pt_key).ok_or_else(|| {
DriverError::Initialization("PPGTT PT missing".into())
@@ -339,7 +338,7 @@ impl IntelContext {
write_lrc_u32(&mut self.lrc_image, LRC_TAIL_OFFSET, tail);
}
pub fn bind_ring_buffer(&mut self, ring_gpu_addr: u64, ring_size: u32) -> Result<()> {
pub fn bind_ring_buffer(&mut self, ring_gpu_addr: u64, _ring_size: u32) -> Result<()> {
write_lrc_u32(&mut self.lrc_image, LRC_RING_START_OFFSET, ring_gpu_addr as u32);
write_lrc_u32(&mut self.lrc_image, LRC_RING_START_OFFSET + 4, (ring_gpu_addr >> 32) as u32);
Ok(())
@@ -6,7 +6,6 @@ use redox_driver_sys::memory::MmioRegion;
use super::info::IntelDeviceInfo;
use super::regs::IntelRegs;
use crate::driver::Result;
use crate::driver::DriverError;
use crate::kms::ModeInfo;
const SKL_CDCLK_337_5: u32 = 0;
@@ -1,6 +1,6 @@
use std::sync::Arc;
use log::{debug, info, warn};
use log::{debug, info};
use redox_driver_sys::memory::MmioRegion;
use crate::driver::Result;
@@ -63,7 +63,7 @@ impl PsrState {
let tp1 = (DEFAULT_TP1_TIME_US / 100).min(0x1F) as u32;
let tp2_tp3 = (DEFAULT_TP2_TP3_TIME_US / 100).min(0x3) as u32;
let mut val = EDP_PSR_ENABLE
let val = EDP_PSR_ENABLE
| EDP_PSR_LINK_STANDBY
| (DEFAULT_IDLE_FRAMES << EDP_PSR_IDLE_FRAMES_SHIFT)
| (tp1 << EDP_PSR_TP1_TIME_SHIFT)
@@ -4,7 +4,6 @@ use std::time::{Duration, Instant};
use log::{debug, warn};
use redox_driver_sys::memory::MmioRegion;
use super::regs::IntelRegs;
use crate::driver::Result;
use crate::driver::DriverError;
@@ -84,7 +83,7 @@ impl DpAux {
let msg_size: u32 = match request & 0x0F {
AUX_NATIVE_WRITE => send_buf.len() as u32,
AUX_NATIVE_READ => recv_size as u32,
AUX_I2C_WRITE | AUX_I2C_READ | (AUX_I2C_WRITE | AUX_I2C_MOT) | (AUX_I2C_READ | AUX_I2C_MOT) => {
AUX_I2C_WRITE | AUX_I2C_READ | AUX_I2C_WRITE | AUX_I2C_MOT | AUX_I2C_READ | AUX_I2C_MOT => {
send_buf.len() as u32
}
_ => 0,
@@ -99,7 +98,7 @@ impl DpAux {
self.mmio.write32(self.data_offset + i * 4, val);
}
let mut command = ((request as u32) << 24) | ((address as u32) << 8);
let command = ((request as u32) << 24) | ((address as u32) << 8);
self.mmio.write32(self.ctl_offset, command | ctl);
let deferred = self.wait_for_completion()?;
@@ -173,7 +172,7 @@ impl DpAux {
let mut i2c_buf = [EDID_I2C_ADDRESS << 1, 0x00];
self.do_transfer(AUX_I2C_WRITE | AUX_I2C_MOT, 0, &i2c_buf, 0)?;
let mut data = self.do_transfer(AUX_I2C_READ | AUX_I2C_MOT, 0, &[], 1)?;
self.do_transfer(AUX_I2C_READ | AUX_I2C_MOT, 0, &[], 1)?;
i2c_buf[1] = 0x01;
for chunk_start in (0..EDID_LENGTH).step_by(16) {
@@ -1,11 +1,11 @@
use log::{debug, info, warn};
use log::{debug, info};
use super::fence::FenceTimeline;
use super::gtt::IntelGtt;
use super::ring::{IntelRing, RingType};
use super::ring::IntelRing;
use super::syncobj::SyncobjManager;
use crate::driver::{
ContextHandle, DriverError, IntelGemExecObject2, IntelGemExecbuffer2,
DriverError, IntelGemExecObject2, IntelGemExecbuffer2,
IntelGemExecbuffer2Result, IntelGemRelocationEntry, Result, SyncobjHandle,
EXEC_OBJECT_PINNED, EXEC_OBJECT_WRITE, I915_EXEC_BLT, I915_EXEC_BSD, I915_EXEC_RENDER,
I915_EXEC_VEBOX,
@@ -61,7 +61,7 @@ impl<'a> ExecbufferContext<'a> {
return Err(DriverError::InvalidArgument("execbuffer batch is empty"));
}
let mut pinned = self.pin_objects(objects)?;
let pinned = self.pin_objects(objects)?;
self.apply_relocations(&pinned, objects, relocs, batch_data)?;
let ring = self.select_ring(exec.flags)?;
ring.submit_batch(&batch_data_to_u32s(batch_data)?)?;
@@ -237,7 +237,7 @@ impl<'a> ExecbufferContext<'a> {
_batch_data: &[u8],
) -> Result<()> {
for p in pinned {
if let Some(obj) = objects.iter().find(|o| o.handle == p.handle) {
if let Some(_obj) = objects.iter().find(|o| o.handle == p.handle) {
if p.is_write {
if let Ok(gem_obj) = self.gem.object(p.handle) {
debug!(
@@ -1,12 +1,10 @@
use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;
use log::{debug, info, warn};
use log::{debug, info};
use redox_driver_sys::memory::MmioRegion;
use super::gtt::IntelGtt;
use crate::driver::Result;
use crate::driver::DriverError;
const RING_ELSP_OFFSET: usize = 0x230;
const RING_EXECLIST_STATUS_LO: usize = 0x234;
@@ -278,7 +278,7 @@ pub fn is_hdmi_sink(edid: &[u8]) -> bool {
let data = &edid[offset + 1..offset + 1 + length];
let mut dtd_start = 0usize;
while dtd_start < data.len() {
let dtd_tag = data[dtd_start] >> 5;
let _dtd_tag = data[dtd_start] >> 5;
let dtd_len = (data[dtd_start] & 0x1F) as usize;
if dtd_len < 3 {
dtd_start += dtd_len + 1;
@@ -4,7 +4,7 @@ use std::time::{Duration, Instant};
use log::{debug, info, warn};
use redox_driver_sys::memory::MmioRegion;
use super::info::{IntelDeviceInfo, IntelGeneration};
use super::info::IntelDeviceInfo;
use crate::driver::{DriverError, Result};
const PP_STATUS: usize = 0x61200;
@@ -1,8 +1,7 @@
use std::collections::BTreeMap;
use std::sync::atomic::{AtomicU64, Ordering};
use std::sync::Arc;
use log::{debug, info, warn};
use log::debug;
use super::fence::FenceTimeline;
use crate::driver::{DriverError, Result, SyncobjHandle};
@@ -1,6 +1,4 @@
use std::time::Instant;
use log::{debug, info};
use super::{ConnectorInfo, ModeInfo};
+1 -1
View File
@@ -10,7 +10,7 @@ mkdir -pv "${COOKBOOK_STAGE}/usr/lib/boot"
function bootloader {
src="$2"
dst="$3"
TARGET="$1" "${COOKBOOK_MAKE}" -j "${COOKBOOK_MAKE_JOBS}" -f "${COOKBOOK_SOURCE}/Makefile" -C "${OUTDIR}" "${OUTDIR}/${src}"
RUST_TARGET_PATH="${COOKBOOK_SOURCE}/targets" TARGET="$1" rustup run nightly cargo -Zunstable-options rustc --manifest-path "${COOKBOOK_SOURCE}/Cargo.toml" -Z build-std=core,alloc -Z build-std-features=compiler-builtins-mem --target "$1" --bin bootloader --release -- --emit link="${OUTDIR}/${src}" 2>&1 | tail -3
cp -v "${OUTDIR}/${src}" "${COOKBOOK_STAGE}/usr/lib/boot/${dst}"
}
+1 -1
View File
@@ -1,4 +1,4 @@
[toolchain]
channel = "nightly-2026-04-01"
channel = "nightly"
components = ["rust-src", "rustfmt", "clippy"]
profile = "minimal"