Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: remove compile_bin_package #4099

Merged
merged 4 commits into from
Jan 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion compiler/noirc_driver/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ pub enum ContractFunctionType {
Unconstrained,
}

#[derive(Serialize, Deserialize)]
#[derive(Debug, Serialize, Deserialize)]
pub struct CompiledContract {
pub noir_version: String,

Expand Down
42 changes: 42 additions & 0 deletions compiler/noirc_driver/tests/contracts.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
use std::path::Path;

use fm::FileId;
use noirc_driver::{file_manager_with_stdlib, prepare_crate, CompileOptions, ErrorsAndWarnings};
use noirc_errors::CustomDiagnostic;
use noirc_frontend::hir::{def_map::parse_file, Context};

#[test]
fn reject_crates_containing_multiple_contracts() -> Result<(), ErrorsAndWarnings> {
let source = "
contract Foo {}

contract Bar {}";

let root = Path::new("");
let file_name = Path::new("main.nr");
let mut file_manager = file_manager_with_stdlib(root);
file_manager.add_file_with_source(file_name, source.to_owned()).expect(
"Adding source buffer to file manager should never fail when file manager is empty",
);
let parsed_files = file_manager
.as_file_map()
.all_file_ids()
.map(|&file_id| (file_id, parse_file(&file_manager, file_id)))
.collect();

let mut context = Context::new(file_manager, parsed_files);
let root_crate_id = prepare_crate(&mut context, file_name);

let errors =
noirc_driver::compile_contract(&mut context, root_crate_id, &CompileOptions::default())
.unwrap_err();

assert_eq!(
errors,
vec![CustomDiagnostic::from_message("Packages are limited to a single contract")
.in_file(FileId::default())],
"stdlib is producing warnings"
);

Ok(())
}
5 changes: 0 additions & 5 deletions test_programs/compile_failure/multiple_contracts/Nargo.toml

This file was deleted.

3 changes: 0 additions & 3 deletions test_programs/compile_failure/multiple_contracts/src/main.nr

This file was deleted.

20 changes: 14 additions & 6 deletions tooling/nargo_cli/src/cli/codegen_verifier_cmd.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
use super::fs::{create_named_dir, write_to_file};
use super::NargoConfig;
use super::{
compile_cmd::compile_bin_package,
fs::{create_named_dir, write_to_file},
};
use crate::backends::Backend;
use crate::cli::compile_cmd::report_errors;
use crate::errors::CliError;

use clap::Args;
use nargo::ops::compile_program;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
use nargo_toml::{get_package_manifest, resolve_workspace_from_toml, PackageSelection};
use noirc_driver::{file_manager_with_stdlib, CompileOptions, NOIR_ARTIFACT_VERSION_STRING};
Expand Down Expand Up @@ -47,13 +46,22 @@ pub(crate) fn run(
let parsed_files = parse_all(&workspace_file_manager);

let expression_width = backend.get_backend_info()?;
for package in &workspace {
let program = compile_bin_package(
let binary_packages = workspace.into_iter().filter(|package| package.is_binary());
for package in binary_packages {
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&args.compile_options,
expression_width,
None,
);

let program = report_errors(
compilation_result,
&workspace_file_manager,
args.compile_options.deny_warnings,
args.compile_options.silence_warnings,
)?;

let smart_contract_string = backend.eth_contract(&program.circuit)?;
Expand Down
30 changes: 0 additions & 30 deletions tooling/nargo_cli/src/cli/compile_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,36 +158,6 @@ pub(super) fn compile_workspace(
Ok((compiled_programs, compiled_contracts))
}

pub(crate) fn compile_bin_package(
file_manager: &FileManager,
parsed_files: &ParsedFiles,
package: &Package,
compile_options: &CompileOptions,
expression_width: ExpressionWidth,
) -> Result<CompiledProgram, CliError> {
if package.is_library() {
return Err(CompileError::LibraryCrate(package.name.clone()).into());
}

let compilation_result = compile_program(
file_manager,
parsed_files,
package,
compile_options,
expression_width,
None,
);

let program = report_errors(
compilation_result,
file_manager,
compile_options.deny_warnings,
compile_options.silence_warnings,
)?;

Ok(program)
}

pub(super) fn save_program(
program: CompiledProgram,
package: &Package,
Expand Down
16 changes: 13 additions & 3 deletions tooling/nargo_cli/src/cli/dap_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use acvm::acir::native_types::WitnessMap;
use backend_interface::Backend;
use clap::Args;
use nargo::constants::PROVER_INPUT_FILE;
use nargo::ops::compile_program;
use nargo::workspace::Workspace;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
use nargo_toml::{get_package_manifest, resolve_workspace_from_toml, PackageSelection};
Expand All @@ -21,7 +22,7 @@ use dap::server::Server;
use dap::types::Capabilities;
use serde_json::Value;

use super::compile_cmd::compile_bin_package;
use super::compile_cmd::report_errors;
use super::fs::inputs::read_inputs_from_file;
use crate::errors::CliError;

Expand Down Expand Up @@ -72,12 +73,21 @@ fn load_and_compile_project(
insert_all_files_for_workspace_into_file_manager(&workspace, &mut workspace_file_manager);
let parsed_files = parse_all(&workspace_file_manager);

let compiled_program = compile_bin_package(
let compile_options = CompileOptions::default();
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&CompileOptions::default(),
&compile_options,
expression_width,
None,
);

let compiled_program = report_errors(
compilation_result,
&workspace_file_manager,
compile_options.deny_warnings,
compile_options.silence_warnings,
)
.map_err(|_| LoadError("Failed to compile project"))?;

Expand Down
13 changes: 11 additions & 2 deletions tooling/nargo_cli/src/cli/debug_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use clap::Args;

use nargo::artifacts::debug::DebugArtifact;
use nargo::constants::PROVER_INPUT_FILE;
use nargo::ops::compile_program;
use nargo::package::Package;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
use nargo_toml::{get_package_manifest, resolve_workspace_from_toml, PackageSelection};
Expand All @@ -16,7 +17,7 @@ use noirc_driver::{
};
use noirc_frontend::graph::CrateName;

use super::compile_cmd::compile_bin_package;
use super::compile_cmd::report_errors;
use super::fs::{inputs::read_inputs_from_file, witness::save_witness_to_dir};
use super::NargoConfig;
use crate::backends::Backend;
Expand Down Expand Up @@ -66,12 +67,20 @@ pub(crate) fn run(
return Ok(());
};

let compiled_program = compile_bin_package(
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&args.compile_options,
expression_width,
None,
);

let compiled_program = report_errors(
compilation_result,
&workspace_file_manager,
args.compile_options.deny_warnings,
args.compile_options.silence_warnings,
)?;

run_async(package, compiled_program, &args.prover_name, &args.witness_name, target_dir)
Expand Down
17 changes: 13 additions & 4 deletions tooling/nargo_cli/src/cli/execute_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use clap::Args;
use nargo::artifacts::debug::DebugArtifact;
use nargo::constants::PROVER_INPUT_FILE;
use nargo::errors::try_to_diagnose_runtime_error;
use nargo::ops::DefaultForeignCallExecutor;
use nargo::ops::{compile_program, DefaultForeignCallExecutor};
use nargo::package::Package;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
use nargo_toml::{get_package_manifest, resolve_workspace_from_toml, PackageSelection};
Expand All @@ -16,10 +16,10 @@ use noirc_driver::{
};
use noirc_frontend::graph::CrateName;

use super::compile_cmd::compile_bin_package;
use super::fs::{inputs::read_inputs_from_file, witness::save_witness_to_dir};
use super::NargoConfig;
use crate::backends::Backend;
use crate::cli::compile_cmd::report_errors;
use crate::errors::CliError;

/// Executes a circuit to calculate its return value
Expand Down Expand Up @@ -69,13 +69,22 @@ pub(crate) fn run(
let parsed_files = parse_all(&workspace_file_manager);

let expression_width = backend.get_backend_info_or_default();
for package in &workspace {
let compiled_program = compile_bin_package(
let binary_packages = workspace.into_iter().filter(|package| package.is_binary());
for package in binary_packages {
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&args.compile_options,
expression_width,
None,
);

let compiled_program = report_errors(
compilation_result,
&workspace_file_manager,
args.compile_options.deny_warnings,
args.compile_options.silence_warnings,
)?;

let (return_value, solved_witness) = execute_program_and_decode(
Expand Down
18 changes: 14 additions & 4 deletions tooling/nargo_cli/src/cli/prove_cmd.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use clap::Args;
use nargo::constants::{PROVER_INPUT_FILE, VERIFIER_INPUT_FILE};
use nargo::ops::compile_program;
use nargo::package::Package;
use nargo::workspace::Workspace;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
Expand All @@ -10,7 +11,7 @@ use noirc_driver::{
};
use noirc_frontend::graph::CrateName;

use super::compile_cmd::compile_bin_package;
use super::compile_cmd::report_errors;
use super::fs::{
inputs::{read_inputs_from_file, write_inputs_to_file},
proof::save_proof_to_dir,
Expand Down Expand Up @@ -69,20 +70,29 @@ pub(crate) fn run(
let parsed_files = parse_all(&workspace_file_manager);

let expression_width = backend.get_backend_info()?;
for package in &workspace {
let program = compile_bin_package(
let binary_packages = workspace.into_iter().filter(|package| package.is_binary());
for package in binary_packages {
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&args.compile_options,
expression_width,
None,
);

let compiled_program = report_errors(
compilation_result,
&workspace_file_manager,
args.compile_options.deny_warnings,
args.compile_options.silence_warnings,
)?;

prove_package(
backend,
&workspace,
package,
program,
compiled_program,
&args.prover_name,
&args.verifier_name,
args.verify,
Expand Down
22 changes: 15 additions & 7 deletions tooling/nargo_cli/src/cli/verify_cmd.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
use super::compile_cmd::report_errors;
use super::fs::{inputs::read_inputs_from_file, load_hex_data};
use super::NargoConfig;
use super::{
compile_cmd::compile_bin_package,
fs::{inputs::read_inputs_from_file, load_hex_data},
};
use crate::{backends::Backend, errors::CliError};

use clap::Args;
use nargo::constants::{PROOF_EXT, VERIFIER_INPUT_FILE};
use nargo::ops::compile_program;
use nargo::package::Package;
use nargo::workspace::Workspace;
use nargo::{insert_all_files_for_workspace_into_file_manager, parse_all};
Expand Down Expand Up @@ -56,16 +55,25 @@ pub(crate) fn run(
let parsed_files = parse_all(&workspace_file_manager);

let expression_width = backend.get_backend_info()?;
for package in &workspace {
let program = compile_bin_package(
let binary_packages = workspace.into_iter().filter(|package| package.is_binary());
for package in binary_packages {
let compilation_result = compile_program(
&workspace_file_manager,
&parsed_files,
package,
&args.compile_options,
expression_width,
None,
);

let compiled_program = report_errors(
compilation_result,
&workspace_file_manager,
args.compile_options.deny_warnings,
args.compile_options.silence_warnings,
)?;

verify_package(backend, &workspace, package, program, &args.verifier_name)?;
verify_package(backend, &workspace, package, compiled_program, &args.verifier_name)?;
}

Ok(())
Expand Down