Skip to content
Merged
2 changes: 1 addition & 1 deletion crates/build/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ fn main() {
match res {
Ok(()) => std::process::exit(0),
Err(err) => {
eprintln!("Encountered error: {:?}", err);
eprintln!("Encountered error: {err:?}");
std::process::exit(1)
}
}
Expand Down
19 changes: 6 additions & 13 deletions crates/build/src/crate_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,32 +68,25 @@ impl CrateMetadata {

// Normalize the package and lib name.
let package_name = root_package.name.replace('-', "_");
let lib_name = &root_package
.targets
.iter()
.find(|target| target.kind.iter().any(|t| t == "cdylib"))
.expect("lib name not found")
.name
.replace('-', "_");

let absolute_manifest_path = manifest_path.absolute_directory()?;
let absolute_workspace_root = metadata.workspace_root.canonicalize()?;
if absolute_manifest_path != absolute_workspace_root {
// If the contract is a package in a workspace, we use the package name
// as the name of the sub-folder where we put the `.contract` bundle.
target_directory = target_directory.join(package_name);
target_directory = target_directory.join(package_name.clone());
}

// {target_dir}/wasm32-unknown-unknown/release/{lib_name}.wasm
// {target_dir}/wasm32-unknown-unknown/release/{package_name}.wasm
let mut original_wasm = target_directory.clone();
original_wasm.push("wasm32-unknown-unknown");
original_wasm.push("release");
original_wasm.push(lib_name.clone());
original_wasm.push(package_name.clone());
original_wasm.set_extension("wasm");

// {target_dir}/{lib_name}.wasm
// {target_dir}/{package_name}.wasm
let mut dest_wasm = target_directory.clone();
dest_wasm.push(lib_name.clone());
dest_wasm.push(package_name.clone());
dest_wasm.set_extension("wasm");

let ink_version = metadata
Expand Down Expand Up @@ -121,7 +114,7 @@ impl CrateMetadata {
manifest_path: manifest_path.clone(),
cargo_meta: metadata,
root_package,
contract_artifact_name: lib_name.to_string(),
contract_artifact_name: package_name,
original_wasm: original_wasm.into(),
dest_wasm: dest_wasm.into(),
ink_version,
Expand Down
1 change: 1 addition & 0 deletions crates/build/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ fn exec_cargo_for_wasm_target(
Workspace::new(&crate_metadata.cargo_meta, &crate_metadata.root_package.id)?
.with_root_package_manifest(|manifest| {
manifest
.with_added_crate_type("cdylib")?
.with_removed_crate_type("rlib")?
.with_profile_release_defaults(Profile::default_contract_release())?
.with_workspace()?;
Expand Down
39 changes: 0 additions & 39 deletions crates/build/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ use serde_json::{
Value,
};
use std::{
ffi::OsStr,
fmt::Write,
fs,
path::{
Expand Down Expand Up @@ -66,7 +65,6 @@ build_tests!(
check_must_not_output_contract_artifacts_in_project_dir,
optimization_passes_from_cli_must_take_precedence_over_profile,
optimization_passes_from_profile_must_be_used,
contract_lib_name_different_from_package_name_must_build,
building_template_in_debug_mode_must_work,
building_template_in_release_mode_must_work,
keep_debug_symbols_in_debug_mode,
Expand Down Expand Up @@ -225,43 +223,6 @@ fn optimization_passes_from_profile_must_be_used(
Ok(())
}

fn contract_lib_name_different_from_package_name_must_build(
manifest_path: &ManifestPath,
) -> Result<()> {
// given
let mut manifest = TestContractManifest::new(manifest_path.clone())?;
manifest.set_lib_name("some_lib_name")?;
manifest.set_package_name("some_package_name")?;
manifest.write()?;

// when
let args = ExecuteArgs {
manifest_path: manifest_path.clone(),
verbosity: Verbosity::Default,
features: Default::default(),
build_mode: Default::default(),
network: Default::default(),
build_artifact: BuildArtifacts::All,
unstable_flags: Default::default(),
optimization_passes: Some(OptimizationPasses::Zero),
keep_debug_symbols: false,
lint: false,
output_type: OutputType::HumanReadable,
skip_wasm_validation: false,
};
let res = crate::execute(args).expect("build failed");

// then
assert_eq!(
res.dest_wasm
.expect("`dest_wasm` does not exist")
.file_name(),
Some(OsStr::new("some_lib_name.wasm"))
);

Ok(())
}

fn building_template_in_debug_mode_must_work(manifest_path: &ManifestPath) -> Result<()> {
// given
let args = ExecuteArgs {
Expand Down
7 changes: 4 additions & 3 deletions crates/build/templates/new/_Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ scale = { package = "parity-scale-codec", version = "3", default-features = fals
scale-info = { version = "2.3", default-features = false, features = ["derive"], optional = true }

[lib]
name = "{{name}}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this goes back to at least 2019 🤷

path = "lib.rs"
crate-type = [
# Used for normal contract Wasm blobs.
"cdylib",
# Defaults to "rlib" so this contract can be used as a dependency.
# Replace with "cdylib" for Wasm builds.
# This is done automatically by `cargo-contract`.
"rlib",
]

[features]
Expand Down