Skip to content

Commit 00aa036

Browse files
feat(blockifier_test_utils): migrate to new cairo recompilation logic
1 parent 61ac940 commit 00aa036

2 files changed

Lines changed: 32 additions & 86 deletions

File tree

crates/blockifier_test_utils/src/cairo_compile.rs

Lines changed: 18 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ use apollo_infra_utils::path::{project_path, resolve_project_relative_path};
1010
use tempfile::NamedTempFile;
1111
use tracing::info;
1212

13-
use crate::contracts::TagAndToolchain;
14-
1513
static CAIRO0_PIP_REQUIREMENTS_FILE: LazyLock<PathBuf> =
1614
LazyLock::new(|| resolve_project_relative_path("scripts/requirements.txt").unwrap());
1715
const CAIRO1_REPO_RELATIVE_PATH_OVERRIDE_ENV_VAR: &str = "CAIRO1_REPO_RELATIVE_PATH";
@@ -89,8 +87,7 @@ fn cairo1_package_exists(version: &String) -> bool {
8987

9088
/// Verifies that the Cairo1 package (of the given version) is available.
9189
/// Attempts to download it if not.
92-
#[allow(dead_code)]
93-
async fn verify_cairo1_package(version: &String) {
90+
pub async fn verify_cairo1_package(version: &String) {
9491
if !cairo1_package_exists(version) {
9592
download_cairo_package(version).await;
9693
}
@@ -133,68 +130,40 @@ pub fn cairo0_compile(
133130
pub fn cairo1_compile(
134131
path: String,
135132
git_tag_override: Option<String>,
136-
cargo_nightly_arg: Option<String>,
133+
_cargo_nightly_arg: Option<String>,
137134
) -> CompilationArtifacts {
138-
let mut base_compile_args = vec![];
139-
verify_cairo1_compiler_deps(git_tag_override);
140-
141-
let cairo1_compiler_path = local_cairo1_compiler_repo_path();
142-
143-
// Command args common to both compilation phases.
144-
base_compile_args.extend(vec![
145-
"run".into(),
146-
format!("--manifest-path={}/Cargo.toml", cairo1_compiler_path.to_string_lossy()),
147-
"--bin".into(),
148-
]);
149-
// Add additional cargo arg if provided. Should be first arg (base command is `cargo`).
150-
if let Some(nightly_version) = cargo_nightly_arg {
151-
base_compile_args.insert(0, format!("+nightly-{nightly_version}"));
152-
}
135+
let (tag, _cairo_repo_path) = get_tag_and_repo_file_path(git_tag_override);
136+
let version = tag.strip_prefix("v").unwrap().to_string();
137+
assert!(cairo1_package_exists(&version));
153138

154-
let sierra_output = starknet_compile(path, &mut base_compile_args);
139+
let sierra_output = starknet_compile(path, &version);
155140

156141
let mut temp_file = NamedTempFile::new().unwrap();
157142
temp_file.write_all(&sierra_output).unwrap();
158143
let temp_path_str = temp_file.into_temp_path();
159144

160145
// Sierra -> CASM.
161-
let casm_output = starknet_sierra_compile(
162-
temp_path_str.to_str().unwrap().to_string(),
163-
&mut base_compile_args,
164-
);
146+
let casm_output =
147+
starknet_sierra_compile(temp_path_str.to_str().unwrap().to_string(), &version);
165148

166149
CompilationArtifacts::Cairo1 { casm: casm_output, sierra: sierra_output }
167150
}
168151

169-
/// Compile Cairo1 Contract into their Sierra version using the compiler version set in the
170-
/// Cargo.toml
171-
pub fn starknet_compile(path: String, base_compile_args: &mut [String]) -> Vec<u8> {
172-
// Cairo -> Sierra.
173-
let mut starknet_compile_commmand = Command::new("cargo");
174-
starknet_compile_commmand.args(base_compile_args.to_owned());
175-
starknet_compile_commmand.args([
176-
"starknet-compile",
177-
"--",
178-
"--single-file",
179-
&path,
180-
"--allowed-libfuncs-list-name",
181-
"all",
182-
]);
152+
/// Compile Cairo1 Contract into their Sierra version using the given compiler version.
153+
/// Assumes the relevant compiler version is already downloaded.
154+
pub fn starknet_compile(path: String, version: &String) -> Vec<u8> {
155+
let mut starknet_compile_commmand = Command::new(starknet_compile_binary_path(version));
156+
starknet_compile_commmand.args(["--single-file", &path, "--allowed-libfuncs-list-name", "all"]);
183157
let sierra_output = run_and_verify_output(&mut starknet_compile_commmand);
184158

185159
sierra_output.stdout
186160
}
187161

188-
/// Compile Sierra code into CASM.
189-
fn starknet_sierra_compile(path: String, base_compile_args: &mut Vec<String>) -> Vec<u8> {
190-
let mut sierra_compile_command = Command::new("cargo");
191-
sierra_compile_command.args(base_compile_args);
192-
sierra_compile_command.args([
193-
"starknet-sierra-compile",
194-
&path,
195-
"--allowed-libfuncs-list-name",
196-
"all",
197-
]);
162+
/// Compile Sierra code into CASM using the given compiler version.
163+
/// Assumes the relevant compiler version is already downloaded.
164+
fn starknet_sierra_compile(path: String, version: &String) -> Vec<u8> {
165+
let mut sierra_compile_command = Command::new(starknet_sierra_compile_binary_path(version));
166+
sierra_compile_command.args([&path, "--allowed-libfuncs-list-name", "all"]);
198167
let casm_output = run_and_verify_output(&mut sierra_compile_command);
199168
casm_output.stdout
200169
}
@@ -247,36 +216,3 @@ fn get_tag_and_repo_file_path(git_tag_override: Option<String>) -> (String, Path
247216

248217
(tag, cairo_repo_path)
249218
}
250-
251-
pub fn prepare_group_tag_compiler_deps(tag_and_toolchain: &TagAndToolchain) {
252-
let (optional_tag, optional_toolchain) = tag_and_toolchain;
253-
254-
// Checkout the required version in the compiler repo.
255-
let (tag, cairo_repo_path) = get_tag_and_repo_file_path(optional_tag.clone());
256-
run_and_verify_output(Command::new("git").args([
257-
"-C",
258-
cairo_repo_path.to_str().unwrap(),
259-
"checkout",
260-
&tag,
261-
]));
262-
263-
// Install the toolchain, if specified.
264-
if let Some(toolchain) = optional_toolchain {
265-
run_and_verify_output(
266-
Command::new("rustup").args(["install", &format!("nightly-{toolchain}")]),
267-
);
268-
}
269-
}
270-
271-
fn verify_cairo1_compiler_deps(git_tag_override: Option<String>) {
272-
let (tag, cairo_repo_path) = get_tag_and_repo_file_path(git_tag_override);
273-
274-
// Verify that the checked out tag is as expected.
275-
run_and_verify_output(Command::new("git").args([
276-
"-C",
277-
cairo_repo_path.to_str().unwrap(),
278-
"rev-parse",
279-
"--verify",
280-
&tag,
281-
]));
282-
}

crates/blockifier_test_utils/tests/feature_contracts_compatibility_test.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
use std::fs;
22

3-
use blockifier_test_utils::cairo_compile::{prepare_group_tag_compiler_deps, CompilationArtifacts};
3+
use blockifier_test_utils::cairo_compile::{
4+
cairo1_compiler_tag,
5+
verify_cairo1_package,
6+
CompilationArtifacts,
7+
};
48
use blockifier_test_utils::cairo_versions::{CairoVersion, RunnableCairo1};
59
use blockifier_test_utils::contracts::{
610
FeatureContract,
@@ -85,7 +89,13 @@ async fn verify_feature_contracts_compatibility(fix: bool, cairo_version: CairoV
8589
for (tag_and_tool_chain, feature_contracts) in
8690
FeatureContract::cairo1_feature_contracts_by_tag()
8791
{
88-
prepare_group_tag_compiler_deps(&tag_and_tool_chain);
92+
let version = tag_and_tool_chain
93+
.0
94+
.unwrap_or(cairo1_compiler_tag())
95+
.strip_prefix("v")
96+
.unwrap()
97+
.to_string();
98+
verify_cairo1_package(&version).await;
8999

90100
let mut task_set = tokio::task::JoinSet::new();
91101

@@ -97,9 +107,9 @@ async fn verify_feature_contracts_compatibility(fix: bool, cairo_version: CairoV
97107
task_set
98108
.spawn(verify_feature_contracts_compatibility_logic_async(contract, fix));
99109
}
100-
info!("Done spawning tasks for {tag_and_tool_chain:?}. Awaiting them...");
110+
info!("Done spawning tasks for {version:?}. Awaiting them...");
101111
task_set.join_all().await;
102-
info!("Done awaiting tasks for {tag_and_tool_chain:?}.");
112+
info!("Done awaiting tasks for {version:?}.");
103113
}
104114
}
105115
#[cfg(feature = "cairo_native")]

0 commit comments

Comments
 (0)