From d1d89d62966be6dd3d36ec66b4f980c7edd592f7 Mon Sep 17 00:00:00 2001 From: enitrat Date: Fri, 20 Sep 2024 18:16:57 +0200 Subject: [PATCH 1/4] feat: compile scarb contracts --- src/bin/scarb-native-dump.rs | 54 ++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/bin/scarb-native-dump.rs b/src/bin/scarb-native-dump.rs index 146a816b1f..83a5e74e9f 100644 --- a/src/bin/scarb-native-dump.rs +++ b/src/bin/scarb-native-dump.rs @@ -26,14 +26,15 @@ fn main() -> anyhow::Result<()> { let native_context = NativeContext::new(); for package in metadata.packages.iter() { for target in &package.targets { - let file_path = target_dir.join(format!("{}.sierra.json", target.name.clone())); + let lib_file_path = target_dir.join(format!("{}.sierra.json", target.name.clone())); + println!("Compiling {:?}", lib_file_path); - if file_path.exists() { + if lib_file_path.exists() { let compiled = serde_json::from_str::( - &fs::read_to_string(file_path.clone()) - .with_context(|| format!("failed to read file: {file_path}"))?, + &fs::read_to_string(lib_file_path.clone()) + .with_context(|| format!("failed to read file: {lib_file_path}"))?, ) - .with_context(|| format!("failed to deserialize compiled file: {file_path}"))?; + .with_context(|| format!("failed to deserialize compiled file: {lib_file_path}"))?; // Compile the sierra program into a MLIR module. let native_module = native_context @@ -50,6 +51,49 @@ fn main() -> anyhow::Result<()> { &output_str, )?; } + + let contract_files = fs::read_dir(&target_dir) + .with_context(|| format!("failed to read directory: {}", target_dir.display()))? + .filter_map(Result::ok) + .filter(|entry| entry.file_type().map(|ft| ft.is_file()).unwrap_or(false)) + .filter_map(|entry| { + let path = entry.path(); + path.extension() + .and_then(|ext| ext.to_str()) + .filter(|&ext| ext == "json") + .and_then(|_| path.file_name()) + .and_then(|name| name.to_str()) + .filter(|name| name.starts_with(&target.name) && name.ends_with(".contract_class.json")) + .map(|_| path) + }); + + + for contract_file_path in contract_files { + let sierra_contract_class: cairo_lang_starknet_classes::contract_class::ContractClass = serde_json::from_str( + &fs::read_to_string(&contract_file_path) + .with_context(|| format!("failed to read file: {}", contract_file_path.display()))?, + ) + .with_context(|| format!("failed to deserialize compiled file: {}", contract_file_path.display()))?; + + let sierra_program = sierra_contract_class.extract_sierra_program()?; + + // Compile the sierra program into a MLIR module. + let native_module = native_context + .compile(&sierra_program, false) + .unwrap(); + + // Write the output. + let output_str = native_module.module().as_operation().to_string_with_flags( + OperationPrintingFlags::new().enable_debug_info(true, false), + )?; + + let output_file_name = contract_file_path.file_name().unwrap().to_str().unwrap() + .replace(".json", ".mlir"); + fs::write( + target_dir.join(output_file_name), + &output_str, + )?; + } } } From 65eafd625090381b25e48f148e8e391f2418f42d Mon Sep 17 00:00:00 2001 From: enitrat Date: Mon, 23 Sep 2024 14:41:23 +0200 Subject: [PATCH 2/4] fix build --- src/bin/scarb-native-dump.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bin/scarb-native-dump.rs b/src/bin/scarb-native-dump.rs index 83a5e74e9f..e3065b2f70 100644 --- a/src/bin/scarb-native-dump.rs +++ b/src/bin/scarb-native-dump.rs @@ -53,7 +53,7 @@ fn main() -> anyhow::Result<()> { } let contract_files = fs::read_dir(&target_dir) - .with_context(|| format!("failed to read directory: {}", target_dir.display()))? + .with_context(|| format!("failed to read directory: {}", target_dir))? .filter_map(Result::ok) .filter(|entry| entry.file_type().map(|ft| ft.is_file()).unwrap_or(false)) .filter_map(|entry| { @@ -71,9 +71,9 @@ fn main() -> anyhow::Result<()> { for contract_file_path in contract_files { let sierra_contract_class: cairo_lang_starknet_classes::contract_class::ContractClass = serde_json::from_str( &fs::read_to_string(&contract_file_path) - .with_context(|| format!("failed to read file: {}", contract_file_path.display()))?, + .with_context(|| format!("failed to read file: {}", contract_file_path))?, ) - .with_context(|| format!("failed to deserialize compiled file: {}", contract_file_path.display()))?; + .with_context(|| format!("failed to deserialize compiled file: {}", contract_file_path))?; let sierra_program = sierra_contract_class.extract_sierra_program()?; From 07fef5b5ee8347ae05b1707e101d26fcfc5e1d82 Mon Sep 17 00:00:00 2001 From: enitrat Date: Mon, 23 Sep 2024 15:24:13 +0200 Subject: [PATCH 3/4] fmt --- src/bin/scarb-native-dump.rs | 44 ++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/bin/scarb-native-dump.rs b/src/bin/scarb-native-dump.rs index e3065b2f70..e76d23da78 100644 --- a/src/bin/scarb-native-dump.rs +++ b/src/bin/scarb-native-dump.rs @@ -53,20 +53,21 @@ fn main() -> anyhow::Result<()> { } let contract_files = fs::read_dir(&target_dir) - .with_context(|| format!("failed to read directory: {}", target_dir))? - .filter_map(Result::ok) - .filter(|entry| entry.file_type().map(|ft| ft.is_file()).unwrap_or(false)) - .filter_map(|entry| { - let path = entry.path(); - path.extension() - .and_then(|ext| ext.to_str()) - .filter(|&ext| ext == "json") - .and_then(|_| path.file_name()) - .and_then(|name| name.to_str()) - .filter(|name| name.starts_with(&target.name) && name.ends_with(".contract_class.json")) - .map(|_| path) - }); - + .with_context(|| format!("failed to read directory: {}", target_dir))? + .filter_map(Result::ok) + .filter(|entry| entry.file_type().map(|ft| ft.is_file()).unwrap_or(false)) + .filter_map(|entry| { + let path = entry.path(); + path.extension() + .and_then(|ext| ext.to_str()) + .filter(|&ext| ext == "json") + .and_then(|_| path.file_name()) + .and_then(|name| name.to_str()) + .filter(|name| { + name.starts_with(&target.name) && name.ends_with(".contract_class.json") + }) + .map(|_| path) + }); for contract_file_path in contract_files { let sierra_contract_class: cairo_lang_starknet_classes::contract_class::ContractClass = serde_json::from_str( @@ -78,21 +79,20 @@ fn main() -> anyhow::Result<()> { let sierra_program = sierra_contract_class.extract_sierra_program()?; // Compile the sierra program into a MLIR module. - let native_module = native_context - .compile(&sierra_program, false) - .unwrap(); + let native_module = native_context.compile(&sierra_program, false).unwrap(); // Write the output. let output_str = native_module.module().as_operation().to_string_with_flags( OperationPrintingFlags::new().enable_debug_info(true, false), )?; - let output_file_name = contract_file_path.file_name().unwrap().to_str().unwrap() + let output_file_name = contract_file_path + .file_name() + .unwrap() + .to_str() + .unwrap() .replace(".json", ".mlir"); - fs::write( - target_dir.join(output_file_name), - &output_str, - )?; + fs::write(target_dir.join(output_file_name), &output_str)?; } } } From 84f942f2c21b5adaadfeddeeab5c150d50d8f998 Mon Sep 17 00:00:00 2001 From: enitrat Date: Mon, 23 Sep 2024 15:26:15 +0200 Subject: [PATCH 4/4] fmt --- src/bin/scarb-native-dump.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/scarb-native-dump.rs b/src/bin/scarb-native-dump.rs index e76d23da78..48e3cfe79c 100644 --- a/src/bin/scarb-native-dump.rs +++ b/src/bin/scarb-native-dump.rs @@ -72,9 +72,9 @@ fn main() -> anyhow::Result<()> { for contract_file_path in contract_files { let sierra_contract_class: cairo_lang_starknet_classes::contract_class::ContractClass = serde_json::from_str( &fs::read_to_string(&contract_file_path) - .with_context(|| format!("failed to read file: {}", contract_file_path))?, + .with_context(|| format!("failed to read file: {:?}", contract_file_path))?, ) - .with_context(|| format!("failed to deserialize compiled file: {}", contract_file_path))?; + .with_context(|| format!("failed to deserialize compiled file: {:?}", contract_file_path))?; let sierra_program = sierra_contract_class.extract_sierra_program()?;