Skip to content

Commit f9d3053

Browse files
committed
Refactor execute adds
1 parent c621d50 commit f9d3053

File tree

9 files changed

+48
-322
lines changed

9 files changed

+48
-322
lines changed

extensions/scarb-execute/src/lib.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use create_output_dir::create_output_dir;
2626
use indoc::formatdoc;
2727
use num_bigint::BigInt;
2828
use scarb_extensions_cli::execute::{
29-
Args, BuildTargetSpecifier, ExecutionArgs, OutputFormat, ProgramArguments,
29+
Args, BuildTargetSpecifier, ExecutionArgs, ExecutionTarget, OutputFormat, ProgramArguments,
3030
};
3131
use scarb_fs_utils::canonicalize_utf8;
3232
use scarb_metadata::{Metadata, MetadataCommand, PackageMetadata, ScarbCommand, TargetMetadata};
@@ -207,11 +207,12 @@ fn execute_standalone(
207207

208208
fn build_cairo_run_config(
209209
output: &OutputFormat,
210+
target: &ExecutionTarget,
210211
args: &ExecutionArgs,
211212
) -> Result<CairoRunConfig<'static>> {
212213
let relocate_mem =
213214
output.is_standard() || args.run.print_resource_usage || args.run.save_profiler_trace_data;
214-
if args.run.target.is_bootloader() {
215+
if target.is_bootloader() {
215216
Ok(get_cairo_run_config(
216217
&None,
217218
args.run.layout,
@@ -243,8 +244,18 @@ pub fn execute(
243244
args: &ExecutionArgs,
244245
ui: &Ui,
245246
) -> Result<()> {
246-
let output = args.run.output.as_ref().cloned().unwrap_or_default();
247-
output.validate(&args.run.target)?;
247+
let output = args
248+
.run
249+
.output
250+
.as_ref()
251+
.cloned()
252+
.unwrap_or(OutputFormat::None);
253+
let target = args
254+
.run
255+
.target
256+
.clone()
257+
.unwrap_or(ExecutionTarget::Standalone);
258+
output.validate(&target)?;
248259

249260
if !args.no_build {
250261
let filter = PackagesFilter::generate_for::<Metadata>([package.clone()].iter());
@@ -289,9 +300,9 @@ pub fn execute(
289300
create_output_dir(output_dir.as_std_path())?;
290301

291302
let execution_output_dir = get_or_create_output_dir(&output_dir)?;
292-
let cairo_run_config = build_cairo_run_config(&output, args)?;
303+
let cairo_run_config = build_cairo_run_config(&output, &target, args)?;
293304

294-
let (mut runner, hint_processor) = if args.run.target.is_bootloader() {
305+
let (mut runner, hint_processor) = if target.is_bootloader() {
295306
execute_bootloader(
296307
executable_path,
297308
&cairo_run_config,
@@ -376,7 +387,7 @@ pub fn execute(
376387
.expect("Missing or invalid program_offset in debug info")
377388
as usize;
378389
let call_trace = build_profiler_call_trace(
379-
&args.run.target,
390+
&target,
380391
runner.relocated_trace.clone(),
381392
execution_resources.expect("Failed to obtain execution resources"),
382393
&tracked_resource,

extensions/scarb-prove/src/main.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ use clap::Parser;
88
use create_output_dir::create_output_dir;
99
use indoc::{formatdoc, indoc};
1010
use mimalloc::MiMalloc;
11-
use scarb_extensions_cli::execute::for_proving::ToArgs;
11+
use scarb_extensions_cli::execute::{ExecutionTarget, OutputFormat, ToArgs};
1212
use scarb_extensions_cli::prove::Args;
1313
use scarb_metadata::{Metadata, MetadataCommand, ScarbCommand};
14+
use scarb_ui::Ui;
1415
use scarb_ui::args::{PackagesFilter, ToEnvVars};
1516
use scarb_ui::components::Status;
16-
use scarb_ui::{OutputFormat, Ui};
1717
use std::fs;
1818
use std::process::ExitCode;
1919
use std::{env, io};
@@ -27,7 +27,7 @@ const MAX_ITERATION_COUNT: usize = 10000;
2727

2828
fn main() -> ExitCode {
2929
let args = Args::parse();
30-
let ui = Ui::new(args.verbose.clone().into(), OutputFormat::Text);
30+
let ui = Ui::new(args.verbose.clone().into(), scarb_ui::OutputFormat::Text);
3131

3232
match main_inner(args, ui.clone()) {
3333
Ok(()) => ExitCode::SUCCESS,
@@ -72,18 +72,28 @@ fn main_inner(args: Args, ui: Ui) -> Result<()> {
7272

7373
let filter = PackagesFilter::generate_for::<Metadata>(vec![package.clone()].iter());
7474
ensure!(
75-
args.execute_args.run.target.is_bootloader(),
75+
args.execute_args
76+
.run
77+
.target
78+
.as_ref()
79+
.map(|t| t.is_bootloader())
80+
.unwrap_or(true),
7681
"only bootloader execution can be proven with `scarb prove` command"
7782
);
78-
ScarbCommand::new()
79-
.arg("execute")
83+
let mut cmd = ScarbCommand::new();
84+
cmd.arg("execute")
8085
.args(args.execute_args.to_args())
8186
.env("SCARB_EXECUTION_ID", execution_id.to_string())
8287
.env("SCARB_PACKAGES_FILTER", filter.to_env())
8388
.env("SCARB_UI_VERBOSITY", ui.verbosity().to_string())
84-
.envs(args.execute_args.features.clone().to_env_vars())
85-
.run()
86-
.with_context(|| "execution failed")?;
89+
.envs(args.execute_args.features.clone().to_env_vars());
90+
if args.execute_args.run.target.is_none() {
91+
cmd.arg(format!("--target={}", ExecutionTarget::Bootloader));
92+
}
93+
if args.execute_args.run.output.is_none() {
94+
cmd.arg(format!("--output={}", OutputFormat::Standard));
95+
}
96+
cmd.run().with_context(|| "execution failed")?;
8797

8898
execution_id
8999
}

scarb/src/internal/to_version.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ impl ToVersion for Version {
1414
impl ToVersion for &str {
1515
fn to_version(self) -> Result<Version> {
1616
Version::parse(self.trim())
17-
.map_err(|_| anyhow::format_err!("cannot parse '{}' as a semver", self))
17+
.map_err(|_| anyhow::format_err!("cannot parse '{self}' as a semver",))
1818
}
1919
}
2020

utils/scarb-extensions-cli/Cargo.toml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,15 @@ scarb-ui = { path = "../scarb-ui", optional = true }
1616
cairo-language-server = []
1717
cairo-test = ["dep:scarb-ui"]
1818
doc = ["dep:scarb-ui"]
19-
execute_unchecked = [
20-
"dep:anyhow",
21-
"dep:camino",
22-
"dep:scarb-ui"
23-
]
2419
execute = [
25-
"execute_unchecked",
2620
"dep:anyhow",
2721
"dep:camino",
2822
"dep:cairo-vm",
2923
"dep:scarb-ui",
3024
"cairo-vm/clap"
3125
]
3226
mdbook = ["dep:camino", "dep:scarb-ui"]
33-
prove = ["execute_unchecked", "dep:scarb-ui"]
27+
prove = ["execute", "dep:scarb-ui"]
3428
verify = ["dep:camino", "dep:scarb-ui"]
3529
default = [
3630
"cairo-language-server",

utils/scarb-extensions-cli/src/execute/for_execution.rs renamed to utils/scarb-extensions-cli/src/execute.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ pub struct RunArgs {
112112
pub output: Option<OutputFormat>,
113113

114114
/// Execution target.
115-
#[arg(long, default_value = "standalone")]
116-
pub target: ExecutionTarget,
115+
#[arg(long)]
116+
pub target: Option<ExecutionTarget>,
117117

118118
/// Whether to print the program outputs.
119119
#[arg(long, default_value_t = false)]
@@ -148,8 +148,10 @@ impl ToArgs for RunArgs {
148148
args.push("--output".to_string());
149149
args.push(output.to_string());
150150
}
151-
args.push("--target".to_string());
152-
args.push(target.to_string());
151+
if let Some(target) = target {
152+
args.push("--target".to_string());
153+
args.push(target.to_string());
154+
}
153155
if *print_program_output {
154156
args.push("--print-program-output".to_string());
155157
}
@@ -199,14 +201,13 @@ impl ToArgs for ProgramArguments {
199201
}
200202

201203
/// Output format for the execution
202-
#[derive(ValueEnum, Clone, Debug, Default)]
204+
#[derive(ValueEnum, Clone, Debug)]
203205
pub enum OutputFormat {
204206
/// Output in standard format
205207
Standard,
206208
/// Output in Cairo PIE (Program Independent Execution) format
207209
CairoPie,
208210
/// No output
209-
#[default]
210211
None,
211212
}
212213

0 commit comments

Comments
 (0)