Skip to content
Closed
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
3 changes: 1 addition & 2 deletions crates/assembly/src/assembler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,8 +349,7 @@ impl Assembler {
TargetType::Kernel => {
if !self.kernel().is_empty() {
return Err(Report::msg(format!(
"duplicate kernels present in the dependency graph: '{}@{
}' conflicts with another kernel we've already linked",
"duplicate kernels present in the dependency graph: '{}@{}' conflicts with another kernel we've already linked",
&package.name, &package.version
)));
}
Expand Down
59 changes: 55 additions & 4 deletions crates/assembly/src/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ use miden_core::serde::{Deserializable, Serializable};
use miden_mast_package::{Package as MastPackage, Section, SectionId, TargetType};
use miden_package_registry::{PackageId, PackageStore, Version as PackageVersion};
use miden_project::{
Linkage, Package as ProjectPackage, Profile, ProjectDependencyNodeProvenance, ProjectSource,
ProjectSourceOrigin, Target,
Linkage, Package as ProjectPackage, PreassembledDependencyMetadata, Profile,
ProjectDependencyNodeProvenance, ProjectSource, ProjectSourceOrigin, Target,
};

use crate::{Assembler, assembler::debuginfo::DebugInfoSections, ast::Module};
Expand Down Expand Up @@ -411,8 +411,19 @@ where
package,
}
},
ProjectDependencyNodeProvenance::Preassembled { path, selected } => {
let package = load_selected_preassembled_package(path, package_id, selected)?;
ProjectDependencyNodeProvenance::Preassembled {
path,
selected,
kind,
requirements,
} => {
let package = load_selected_preassembled_package(
path,
package_id,
selected,
*kind,
requirements,
)?;
ResolvedPackage {
linked_kernel_package: self.resolve_linked_kernel_package(package.clone())?,
package,
Expand Down Expand Up @@ -694,6 +705,8 @@ fn load_selected_preassembled_package(
path: &FsPath,
expected_name: &PackageId,
selected: &PackageVersion,
expected_kind: TargetType,
expected_requirements: &BTreeMap<PackageId, PreassembledDependencyMetadata>,
) -> Result<Arc<MastPackage>, Report> {
let package = load_package_from_path(path)?;
if &package.name != expected_name {
Expand All @@ -716,6 +729,26 @@ fn load_selected_preassembled_package(
)));
}

if package.kind != expected_kind {
return Err(Report::msg(format!(
"preassembled dependency '{}@{}' at '{}' no longer matches the dependency graph target kind '{}'",
expected_name,
actual,
path.display(),
expected_kind
)));
}

let actual_requirements = package_requirements(&package);
if &actual_requirements != expected_requirements {
return Err(Report::msg(format!(
"preassembled dependency '{}@{}' at '{}' no longer matches the dependency graph dependency requirements",
expected_name,
actual,
path.display()
)));
}

Ok(package)
}

Expand All @@ -727,3 +760,21 @@ fn load_package_from_path(path: &FsPath) -> Result<Arc<MastPackage>, Report> {
})?;
Ok(Arc::new(package))
}

fn package_requirements(
package: &MastPackage,
) -> BTreeMap<PackageId, PreassembledDependencyMetadata> {
package
.manifest
.dependencies()
.map(|dependency| {
(
dependency.name.clone(),
PreassembledDependencyMetadata {
version: PackageVersion::new(dependency.version.clone(), dependency.digest),
kind: dependency.kind,
},
)
})
.collect()
}
Loading
Loading