asdf
This commit is contained in:
parent
83d1f95e37
commit
7b93a2a301
|
@ -1,5 +1,2 @@
|
|||
[build]
|
||||
target = "aarch64-unknown-uefi"
|
||||
|
||||
[alias]
|
||||
xtask = "run --package xtask --"
|
||||
|
|
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -110,6 +110,7 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
|
|||
name = "efigife"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"embedded-graphics",
|
||||
"tinygif",
|
||||
"uefi",
|
||||
|
|
|
@ -2,3 +2,12 @@
|
|||
members = ["efi-bin", "xtask"]
|
||||
resolver = "2"
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
opt-level = "z"
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
|
||||
[workspace.dependencies]
|
||||
byteorder = { version = "*", default-features = false }
|
||||
|
|
|
@ -6,14 +6,8 @@ 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"
|
||||
|
||||
[profile.release]
|
||||
strip = true
|
||||
opt-level = "z"
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
|
|
|
@ -5,10 +5,10 @@ use std::{
|
|||
process::{Command, Stdio},
|
||||
};
|
||||
|
||||
use fatfs::{FileSystem, FsOptions};
|
||||
use fatfs::{FileSystem, FormatVolumeOptions, FsOptions};
|
||||
|
||||
fn main() {
|
||||
let mut args: VecDeque<_> = std::env::args().collect();
|
||||
let mut args: VecDeque<_> = std::env::args().skip(1).collect();
|
||||
|
||||
match args.pop_front() {
|
||||
Some(cmd) => match cmd.as_str() {
|
||||
|
@ -16,26 +16,32 @@ fn main() {
|
|||
"run" => do_run(args),
|
||||
x => eprintln!("unknown command {:?}", x),
|
||||
},
|
||||
None => eprintln!("usage: cargo xtask [build|run]"),
|
||||
None => eprintln!("usage: cargo xtask [build|run] [x86_64|aarch64]"),
|
||||
}
|
||||
}
|
||||
|
||||
fn do_build(mut args: VecDeque<String>) {
|
||||
let mut cmd = Command::new(env!("CARGO"));
|
||||
cmd.arg("build")
|
||||
let build_success = Command::new(env!("CARGO"))
|
||||
.arg("build")
|
||||
.arg("--bin")
|
||||
.arg("efi-bin")
|
||||
.arg("--release") // TODO: target according to arg
|
||||
.arg("efigife")
|
||||
.arg("--release")
|
||||
.arg("--target")
|
||||
.arg("aarch64-unknown-uefi") // TODO: target according to arg
|
||||
.stdin(Stdio::inherit())
|
||||
.stdout(Stdio::inherit())
|
||||
.stderr(Stdio::inherit())
|
||||
.output()
|
||||
.unwrap();
|
||||
.unwrap()
|
||||
.status
|
||||
.success();
|
||||
assert!(build_success);
|
||||
|
||||
let efi_bin_path = concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/target/aarch64-unknown-uefi/efi-bin.efi"
|
||||
"/../target/aarch64-unknown-uefi/release/efigife.efi"
|
||||
);
|
||||
eprintln!("{}", efi_bin_path);
|
||||
let mut efi_bin_buf = Vec::new();
|
||||
let mut efi_bin_file = File::open(efi_bin_path).unwrap();
|
||||
let efi_bin_size = efi_bin_file.read_to_end(&mut efi_bin_buf);
|
||||
|
@ -44,7 +50,12 @@ 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_fs = FileSystem::new(&mut fat_disk, FsOptions::new()).unwrap();
|
||||
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 boot_efi_name = "BOOTAA64.EFI"; // TODO: parameterize on arg
|
||||
let mut boot_efi = fat_fs
|
||||
.root_dir()
|
||||
|
@ -55,12 +66,12 @@ fn do_build(mut args: VecDeque<String>) {
|
|||
.create_file(boot_efi_name)
|
||||
.unwrap();
|
||||
|
||||
boot_efi.write_all(&efi_bin_buf);
|
||||
boot_efi.write_all(&efi_bin_buf).unwrap();
|
||||
drop(boot_efi);
|
||||
fat_fs.unmount().unwrap();
|
||||
|
||||
// TODO: do the gif format juggling to add the comment in this xtask
|
||||
let src_gif_path = concat!(env!("CARGO_MANIFEST_DIR"), "/efi-bin/src/bad-apple.gif");
|
||||
let src_gif_path = concat!(env!("CARGO_MANIFEST_DIR"), "/../efi-bin/src/bad-apple.gif");
|
||||
let mut src_gif_file = File::open(src_gif_path).unwrap();
|
||||
let mut buf = Vec::new();
|
||||
let src_gif_size = src_gif_file.read_to_end(&mut buf).unwrap();
|
||||
|
@ -68,9 +79,17 @@ fn do_build(mut args: VecDeque<String>) {
|
|||
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());
|
||||
|
||||
let out_img_path = format!(
|
||||
"{}/../target/bad-apple.{}-efi.raw.gif",
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"aarch64"
|
||||
);
|
||||
let mut out_img_file = File::create(out_img_path).unwrap();
|
||||
out_img_file.write_all(&buf).unwrap();
|
||||
}
|
||||
|
||||
fn do_run(mut args: VecDeque<String>) {
|
||||
fn do_run(args: VecDeque<String>) {
|
||||
do_build(args.clone());
|
||||
|
||||
let mut cmd = match args[0].as_str() {
|
||||
|
@ -89,12 +108,17 @@ fn do_run(mut args: VecDeque<String>) {
|
|||
cmd
|
||||
}
|
||||
"x86_64" | "x64" => {
|
||||
let mut cmd = Command::new("qemu-system-x86_64");
|
||||
//let mut cmd = Command::new("qemu-system-x86_64");
|
||||
todo!();
|
||||
}
|
||||
x => unimplemented!("target cpu {:?}", x),
|
||||
};
|
||||
cmd.arg(todo!("disk image"))
|
||||
let out_img_path = format!(
|
||||
"{}/../target/bad-apple.{}-efi.raw.gif",
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"aarch64"
|
||||
);
|
||||
cmd.arg(out_img_path)
|
||||
.stdin(Stdio::inherit())
|
||||
.stdout(Stdio::inherit())
|
||||
.stderr(Stdio::inherit())
|
||||
|
|
Loading…
Reference in a new issue