this is stupid. fatfs was leaking byteorder/std from xtask into efi-bin.
This commit is contained in:
parent
7b93a2a301
commit
5b9f765be0
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "rust-fatfs"]
|
||||
path = rust-fatfs
|
||||
url = https://github.com/rafalh/rust-fatfs
|
163
Cargo.lock
generated
163
Cargo.lock
generated
|
@ -2,6 +2,15 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "android-tzdata"
|
||||
version = "0.1.1"
|
||||
|
@ -26,6 +35,17 @@ dependencies = [
|
|||
"critical-section",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.3.0"
|
||||
|
@ -44,12 +64,6 @@ version = "0.10.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.5.0"
|
||||
|
@ -88,9 +102,7 @@ checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
|
|||
dependencies = [
|
||||
"android-tzdata",
|
||||
"iana-time-zone",
|
||||
"js-sys",
|
||||
"num-traits",
|
||||
"wasm-bindgen",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
|
@ -110,7 +122,6 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
|
|||
name = "efigife"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"embedded-graphics",
|
||||
"tinygif",
|
||||
"uefi",
|
||||
|
@ -141,14 +152,26 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "fatfs"
|
||||
version = "0.3.6"
|
||||
name = "env_logger"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05669f8e7e2d7badc545c513710f0eba09c2fbef683eb859fd79c46c355048e0"
|
||||
checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"byteorder",
|
||||
"atty",
|
||||
"humantime",
|
||||
"log",
|
||||
"regex",
|
||||
"termcolor",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fatfs"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"chrono",
|
||||
"env_logger",
|
||||
"fscommon",
|
||||
"log",
|
||||
]
|
||||
|
||||
|
@ -161,6 +184,15 @@ dependencies = [
|
|||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fscommon"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "315ce685aca5ddcc5a3e7e436ef47d4a5d0064462849b6f0f628c28140103531"
|
||||
dependencies = [
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hash32"
|
||||
version = "0.2.1"
|
||||
|
@ -183,6 +215,21 @@ dependencies = [
|
|||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||
|
||||
[[package]]
|
||||
name = "iana-time-zone"
|
||||
version = "0.1.60"
|
||||
|
@ -237,6 +284,12 @@ version = "0.4.21"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
||||
|
||||
[[package]]
|
||||
name = "micromath"
|
||||
version = "2.1.0"
|
||||
|
@ -296,6 +349,35 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-automata",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.4.0"
|
||||
|
@ -354,6 +436,15 @@ dependencies = [
|
|||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tinygif"
|
||||
version = "0.0.4"
|
||||
|
@ -379,7 +470,7 @@ version = "0.28.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9c0a56dc9fed2589aad6ddca11c2584968fc21f227b5d7083bb8961d26a69fa"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
"log",
|
||||
"ptr_meta",
|
||||
|
@ -416,7 +507,7 @@ version = "0.5.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "efa8716f52e8cab8bcedfd5052388a0f263b69fe5cc2561548dc6a530678333c"
|
||||
dependencies = [
|
||||
"bitflags 2.5.0",
|
||||
"bitflags",
|
||||
"ptr_meta",
|
||||
"uguid",
|
||||
]
|
||||
|
@ -487,6 +578,37 @@ version = "0.2.92"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.52.0"
|
||||
|
@ -496,6 +618,15 @@ dependencies = [
|
|||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.5"
|
||||
|
|
16
Cargo.toml
16
Cargo.toml
|
@ -3,11 +3,15 @@ members = ["efi-bin", "xtask"]
|
|||
resolver = "2"
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
opt-level = "z"
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
#strip = true
|
||||
#opt-level = "z"
|
||||
#lto = true
|
||||
#codegen-units = 1
|
||||
#panic = "abort"
|
||||
|
||||
[workspace.dependencies]
|
||||
byteorder = { version = "*", default-features = false }
|
||||
fatfs = { path = "rust-fatfs", default-features = false, features = ["alloc", "chrono"] }
|
||||
embedded-graphics = "0.8.1"
|
||||
tinygif = { version = "0.0.4", features = ["8k"] }
|
||||
uefi = { version = "0.28.0", features = ["global_allocator", "panic_handler", "alloc"] }
|
||||
uefi-graphics2 = "0.1.3"
|
||||
|
|
|
@ -6,8 +6,7 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
byteorder.workspace = true
|
||||
embedded-graphics = "0.8.1"
|
||||
tinygif = { version = "0.0.4", features = ["8k"] }
|
||||
uefi = { version = "0.28.0", features = ["global_allocator", "panic_handler", "alloc"] }
|
||||
uefi-graphics2 = "0.1.3"
|
||||
embedded-graphics.workspace = true
|
||||
tinygif.workspace = true
|
||||
uefi.workspace = true
|
||||
uefi-graphics2.workspace = true
|
||||
|
|
1
rust-fatfs
Submodule
1
rust-fatfs
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 85f06e08edbd3368e1b0562f2fc1b6d178bf7b8a
|
|
@ -6,4 +6,4 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
fatfs = "0.3.6"
|
||||
fatfs.workspace = true
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
use std::{
|
||||
collections::VecDeque,
|
||||
fs::File,
|
||||
io::{Cursor, Read, Write},
|
||||
io::{Cursor, Read, Seek, Write},
|
||||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
use fatfs::{FileSystem, FormatVolumeOptions, FsOptions};
|
||||
use fatfs::{
|
||||
FileSystem, FormatVolumeOptions, FsOptions, IoBase, IoError, Read as FatRead, Seek as FatSeek,
|
||||
Write as FatWrite,
|
||||
};
|
||||
|
||||
fn main() {
|
||||
let mut args: VecDeque<_> = std::env::args().skip(1).collect();
|
||||
|
@ -20,8 +23,58 @@ fn main() {
|
|||
}
|
||||
}
|
||||
|
||||
fn do_build(mut args: VecDeque<String>) {
|
||||
let build_success = Command::new(env!("CARGO"))
|
||||
struct MyStdIoWrapper<T: Read + Write + Seek>(T);
|
||||
#[derive(Debug)]
|
||||
struct MyStdIoError(std::io::Error);
|
||||
impl IoError for MyStdIoError {
|
||||
fn is_interrupted(&self) -> bool {
|
||||
self.0.kind() == std::io::ErrorKind::Interrupted
|
||||
}
|
||||
|
||||
fn new_unexpected_eof_error() -> Self {
|
||||
Self(std::io::Error::new(
|
||||
std::io::ErrorKind::UnexpectedEof,
|
||||
"failed to fill whole buffer",
|
||||
))
|
||||
}
|
||||
|
||||
fn new_write_zero_error() -> Self {
|
||||
Self(std::io::Error::new(
|
||||
std::io::ErrorKind::WriteZero,
|
||||
"failed to write whole buffer",
|
||||
))
|
||||
}
|
||||
}
|
||||
impl<T: Read + Write + Seek> IoBase for MyStdIoWrapper<T> {
|
||||
type Error = MyStdIoError;
|
||||
}
|
||||
impl<T: Read + Write + Seek> FatSeek for MyStdIoWrapper<T> {
|
||||
fn seek(&mut self, pos: fatfs::SeekFrom) -> Result<u64, Self::Error> {
|
||||
let pos = match pos {
|
||||
fatfs::SeekFrom::Start(x) => std::io::SeekFrom::Start(x),
|
||||
fatfs::SeekFrom::End(x) => std::io::SeekFrom::End(x),
|
||||
fatfs::SeekFrom::Current(x) => std::io::SeekFrom::Current(x),
|
||||
};
|
||||
Seek::seek(&mut self.0, pos).map_err(MyStdIoError)
|
||||
}
|
||||
}
|
||||
impl<T: Read + Write + Seek> FatRead for MyStdIoWrapper<T> {
|
||||
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
|
||||
Read::read(&mut self.0, buf).map_err(MyStdIoError)
|
||||
}
|
||||
}
|
||||
impl<T: Read + Write + Seek> FatWrite for MyStdIoWrapper<T> {
|
||||
fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
|
||||
Write::write(&mut self.0, buf).map_err(MyStdIoError)
|
||||
}
|
||||
|
||||
fn flush(&mut self) -> Result<(), Self::Error> {
|
||||
Write::flush(&mut self.0).map_err(MyStdIoError)
|
||||
}
|
||||
}
|
||||
|
||||
fn do_build(args: VecDeque<String>) {
|
||||
let build_success = Command::new("cargo")
|
||||
.arg("build")
|
||||
.arg("--bin")
|
||||
.arg("efigife")
|
||||
|
@ -49,13 +102,14 @@ fn do_build(mut args: VecDeque<String>) {
|
|||
|
||||
let fat_disk_size = 256 * 1024; // todo!("get size from efi_bin_size");
|
||||
|
||||
let mut fat_disk = Cursor::new(vec![0; fat_disk_size]);
|
||||
let mut fat_disk_buf = vec![0; fat_disk_size];
|
||||
let mut fat_disk = MyStdIoWrapper(Cursor::new(&mut fat_disk_buf));
|
||||
fatfs::format_volume(
|
||||
&mut fat_disk,
|
||||
FormatVolumeOptions::new().fat_type(fatfs::FatType::Fat12),
|
||||
)
|
||||
.unwrap();
|
||||
let fat_fs = FileSystem::new(&mut fat_disk, FsOptions::new()).unwrap();
|
||||
let fat_fs = FileSystem::new(fat_disk, FsOptions::new()).unwrap();
|
||||
let boot_efi_name = "BOOTAA64.EFI"; // TODO: parameterize on arg
|
||||
let mut boot_efi = fat_fs
|
||||
.root_dir()
|
||||
|
@ -66,7 +120,7 @@ fn do_build(mut args: VecDeque<String>) {
|
|||
.create_file(boot_efi_name)
|
||||
.unwrap();
|
||||
|
||||
boot_efi.write_all(&efi_bin_buf).unwrap();
|
||||
FatWrite::write_all(&mut boot_efi, &efi_bin_buf).unwrap();
|
||||
drop(boot_efi);
|
||||
fat_fs.unmount().unwrap();
|
||||
|
||||
|
@ -78,7 +132,7 @@ fn do_build(mut args: VecDeque<String>) {
|
|||
drop(src_gif_file);
|
||||
let fat_start_sector = (src_gif_size + 511) / 512;
|
||||
buf.extend(std::iter::repeat(0).take(fat_start_sector * 512 - buf.len()));
|
||||
buf.extend(fat_disk.into_inner());
|
||||
buf.extend(fat_disk_buf);
|
||||
|
||||
let out_img_path = format!(
|
||||
"{}/../target/bad-apple.{}-efi.raw.gif",
|
||||
|
|
Loading…
Reference in a new issue