blob: a85dffef64cc344fd71dbc1d6e2536f591006136 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
use anyhow::Result;
use serde_annotate::Annotate;
use std::path::{Path, PathBuf};
use structopt::StructOpt;
use crate::app::{self, TransportWrapper};
use crate::bootstrap::{self, BootstrapOptions};
/// Load a program into the chip.
#[derive(Debug, StructOpt)]
pub struct Bootstrap {
#[structopt(flatten)]
pub options: BootstrapOptions,
#[structopt(long, help = "RV32 test binary to load")]
pub bootstrap: Option<PathBuf>,
}
impl Bootstrap {
pub fn init(&self, transport: &TransportWrapper) -> Result<Option<Box<dyn Annotate>>> {
if let Some(bootstrap) = &self.bootstrap {
self.load(transport, bootstrap)?;
}
Ok(None)
}
pub fn load(&self, transport: &TransportWrapper, file: &Path) -> Result<()> {
let payload = std::fs::read(file)?;
let progress = app::progress_bar(payload.len() as u64);
bootstrap::Bootstrap::update_with_progress(
transport,
&self.options,
&payload,
|_, chunk| {
progress.inc(chunk as u64);
},
)?;
Ok(())
}
}