diff --git a/crates/apollo_starknet_os_program/Cargo.toml b/crates/apollo_starknet_os_program/Cargo.toml index efa738247c9..51c9d1f578c 100644 --- a/crates/apollo_starknet_os_program/Cargo.toml +++ b/crates/apollo_starknet_os_program/Cargo.toml @@ -9,6 +9,7 @@ build = "build/main.rs" [features] dump_source_files = [] +test_programs = [] [lints] workspace = true diff --git a/crates/apollo_starknet_os_program/build/compile_program.rs b/crates/apollo_starknet_os_program/build/compile_program.rs index a2fe501e46c..dc65ab5eb86 100644 --- a/crates/apollo_starknet_os_program/build/compile_program.rs +++ b/crates/apollo_starknet_os_program/build/compile_program.rs @@ -35,6 +35,17 @@ pub async fn compile_and_output_program( }); } +#[cfg(feature = "test_programs")] +pub async fn compile_test_contracts(out_dir: PathBuf) { + let mut task_set = tokio::task::JoinSet::new(); + task_set.spawn(compile_and_output_program( + out_dir, + "starkware/starknet/core/os/state/aliases_test.cairo", + "aliases_test", + )); + task_set.join_all().await; +} + fn cairo_root_path() -> PathBuf { PathBuf::from(compile_time_cargo_manifest_dir!()).join("src/cairo") } diff --git a/crates/apollo_starknet_os_program/build/main.rs b/crates/apollo_starknet_os_program/build/main.rs index ad352cc0aac..446ea86aa5f 100644 --- a/crates/apollo_starknet_os_program/build/main.rs +++ b/crates/apollo_starknet_os_program/build/main.rs @@ -15,6 +15,8 @@ async fn main() { dump_source::dump_source_files(&out_dir.join("cairo_files_map.json")); let mut task_set = tokio::task::JoinSet::new(); + #[cfg(feature = "test_programs")] + task_set.spawn(compile_program::compile_test_contracts(out_dir.clone())); task_set.spawn(compile_program::compile_and_output_program( out_dir.clone(), "starkware/starknet/core/os/os.cairo", diff --git a/crates/apollo_starknet_os_program/src/lib.rs b/crates/apollo_starknet_os_program/src/lib.rs index e8e02cbd11f..4f2aac72579 100644 --- a/crates/apollo_starknet_os_program/src/lib.rs +++ b/crates/apollo_starknet_os_program/src/lib.rs @@ -9,6 +9,8 @@ use crate::program_hash::ProgramHashes; #[cfg(test)] mod constants_test; pub mod program_hash; +#[cfg(feature = "test_programs")] +pub mod test_programs; #[cfg(feature = "dump_source_files")] pub static CAIRO_FILES_MAP: LazyLock> = LazyLock::new(|| { diff --git a/crates/apollo_starknet_os_program/src/test_programs.rs b/crates/apollo_starknet_os_program/src/test_programs.rs new file mode 100644 index 00000000000..9bafd1de0e8 --- /dev/null +++ b/crates/apollo_starknet_os_program/src/test_programs.rs @@ -0,0 +1,2 @@ +pub const ALIASES_TEST_BYTES: &[u8] = + include_bytes!(concat!(env!("OUT_DIR"), "/aliases_test_bytes")); diff --git a/crates/starknet_committer_and_os_cli/Cargo.toml b/crates/starknet_committer_and_os_cli/Cargo.toml index 710eb9d91ea..f9d71211989 100644 --- a/crates/starknet_committer_and_os_cli/Cargo.toml +++ b/crates/starknet_committer_and_os_cli/Cargo.toml @@ -18,8 +18,9 @@ tempfile.workspace = true # TODO(Amos): Add `testing` feature and move Python test dependencies under it. [dependencies] -# The 'dump_source_files' feature should be moved under `testing` feature, when it exists. -apollo_starknet_os_program = { workspace = true, features = ["dump_source_files"] } +# The 'dump_source_files' and 'test_programs' features should be moved under `testing` feature, when +# it exists. +apollo_starknet_os_program = { workspace = true, features = ["dump_source_files", "test_programs"] } blake2s.workspace = true cairo-lang-starknet-classes.workspace = true cairo-vm = { workspace = true, features = [ diff --git a/crates/starknet_committer_and_os_cli/src/os_cli/commands.rs b/crates/starknet_committer_and_os_cli/src/os_cli/commands.rs index e0eeea03e81..b36911b953b 100644 --- a/crates/starknet_committer_and_os_cli/src/os_cli/commands.rs +++ b/crates/starknet_committer_and_os_cli/src/os_cli/commands.rs @@ -1,6 +1,7 @@ use std::fs; use std::path::Path; +use apollo_starknet_os_program::test_programs::ALIASES_TEST_BYTES; use apollo_starknet_os_program::{ AGGREGATOR_PROGRAM_BYTES, CAIRO_FILES_MAP, @@ -115,6 +116,7 @@ pub(crate) fn dump_source_files(output_path: String) { pub(crate) fn dump_program(output_path: String, program: ProgramToDump) { let bytes = match program { ProgramToDump::Aggregator => AGGREGATOR_PROGRAM_BYTES, + ProgramToDump::AliasesTest => ALIASES_TEST_BYTES, ProgramToDump::Os => OS_PROGRAM_BYTES, }; // Dumping the `Program` struct won't work - it is not deserializable via cairo-lang's Program diff --git a/crates/starknet_committer_and_os_cli/src/os_cli/run_os_cli.rs b/crates/starknet_committer_and_os_cli/src/os_cli/run_os_cli.rs index a4c50835f0f..02b9841d2d1 100644 --- a/crates/starknet_committer_and_os_cli/src/os_cli/run_os_cli.rs +++ b/crates/starknet_committer_and_os_cli/src/os_cli/run_os_cli.rs @@ -28,6 +28,7 @@ pub struct OsCliCommand { #[serde(rename_all = "kebab-case")] pub enum ProgramToDump { Aggregator, + AliasesTest, Os, }