Skip to content

Commit

Permalink
Create bootloader download crate in /tmp
Browse files Browse the repository at this point in the history
Fixes #10
  • Loading branch information
phil-opp committed Apr 23, 2018
1 parent f627485 commit df6c73c
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 12 deletions.
53 changes: 53 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ byteorder = "1.2.1"
toml = "0.4.5"
xmas-elf = "0.6.1"
cargo_metadata = "0.5.3"
tempdir = "0.3.7"
21 changes: 9 additions & 12 deletions src/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use config::{self, Config};
use cargo_metadata::{self, Metadata as CargoMetadata, Package as CrateMetadata};
use Error;
use xmas_elf;
use tempdir::TempDir;

const BLOCK_SIZE: usize = 512;
type KernelInfoBlock = [u8; BLOCK_SIZE];
Expand Down Expand Up @@ -78,7 +79,9 @@ fn build_impl(
fs::remove_file(bootloader_cargo_lock)?;
}

let bootloader = build_bootloader(&out_dir, &config)?;
let tmp_dir = TempDir::new("bootloader")?;
let bootloader = build_bootloader(tmp_dir.path(), &config)?;
tmp_dir.close()?;

create_disk_image(&config, kernel, kernel_info_block, &bootloader)?;

Expand Down Expand Up @@ -155,22 +158,16 @@ fn create_kernel_info_block(kernel_size: u64) -> KernelInfoBlock {
kernel_info_block
}

fn download_bootloader(out_dir: &Path, config: &Config) -> Result<CrateMetadata, Error> {
fn download_bootloader(bootloader_dir: &Path, config: &Config) -> Result<CrateMetadata, Error> {
use std::io::Write;

let bootloader_dir = {
let mut dir = PathBuf::from(out_dir);
dir.push("bootloader");
dir
};

let cargo_toml = {
let mut dir = bootloader_dir.clone();
let mut dir = bootloader_dir.to_owned();
dir.push("Cargo.toml");
dir
};
let src_lib = {
let mut dir = bootloader_dir.clone();
let mut dir = bootloader_dir.to_owned();
dir.push("src");
fs::create_dir_all(dir.as_path())?;
dir.push("lib.rs");
Expand Down Expand Up @@ -262,10 +259,10 @@ fn download_bootloader(out_dir: &Path, config: &Config) -> Result<CrateMetadata,
Ok(bootloader.clone())
}

fn build_bootloader(out_dir: &Path, config: &Config) -> Result<Box<[u8]>, Error> {
fn build_bootloader(bootloader_dir: &Path, config: &Config) -> Result<Box<[u8]>, Error> {
use std::io::Read;

let bootloader_metadata = download_bootloader(out_dir, config)?;
let bootloader_metadata = download_bootloader(bootloader_dir, config)?;
let bootloader_dir = Path::new(&bootloader_metadata.manifest_path)
.parent()
.unwrap();
Expand Down
1 change: 1 addition & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
extern crate byteorder;
extern crate cargo_metadata;
extern crate tempdir;
extern crate toml;
extern crate xmas_elf;

Expand Down

0 comments on commit df6c73c

Please sign in to comment.