MCPcopy Index your code
hub / github.com/cargo-lambda/cargo-lambda / run

Function run

crates/cargo-lambda-build/src/lib.rs:40–203  ·  view source on GitHub ↗
(build: &mut Build, metadata: &CargoMetadata)

Source from the content-addressed store, hash-verified

38
39#[tracing::instrument(skip(build, metadata), target = "cargo_lambda")]
40pub async fn run(build: &mut Build, metadata: &CargoMetadata) -> Result<()> {
41 tracing::trace!(options = ?build, "building project");
42
43 if (build.arm64 || build.x86_64) && !build.cargo_opts.target.is_empty() {
44 Err(BuildError::InvalidTargetOptions)?;
45 }
46
47 let target_arch = if build.arm64 {
48 TargetArch::arm64()
49 } else if build.x86_64 {
50 TargetArch::x86_64()
51 } else {
52 // let build_target = build.cargo_opts.target.first().or(metadata.target.as_ref());
53 match build.cargo_opts.target.first() {
54 Some(target) => {
55 validate_linux_target(target)?;
56 TargetArch::from_str(target)?
57 }
58 None => TargetArch::from_host()?,
59 }
60 };
61
62 build.cargo_opts.target = vec![target_arch.to_string()];
63
64 let build_examples = build.cargo_opts.examples || !build.cargo_opts.example.is_empty();
65 let binaries = binary_targets_from_metadata(metadata, build_examples);
66 debug!(binaries = ?binaries, "found new target binaries to build");
67
68 let binaries = if !build.cargo_opts.bin.is_empty() {
69 let mut final_binaries = HashSet::with_capacity(binaries.len());
70
71 for name in &build.cargo_opts.bin {
72 if !binaries.contains(name) {
73 return Err(BuildError::FunctionBinaryMissing(name.into()).into());
74 }
75 final_binaries.insert(name.into());
76 }
77
78 final_binaries
79 } else {
80 binaries
81 };
82
83 let compiler_option = build.compiler.clone().unwrap_or_default();
84 if compiler_option.is_local_cargo() {
85 // This check only makes sense when the build host is local.
86 // If the build host was ever going to be remote, like in a container,
87 // this is not checked
88 if !target_arch.compatible_host_linker() && !target_arch.is_static_linking() {
89 return Err(BuildError::InvalidCompilerOption.into());
90 }
91 }
92
93 if is_release_profile(build) && !build.disable_optimizations {
94 let release_optimizations =
95 cargo_release_profile_config(metadata).map_err(BuildError::MetadataError)?;
96 build.cargo_opts.config.extend(
97 release_optimizations

Callers 14

mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
mainFunction · 0.50
run_buildMethod · 0.50
run_watchMethod · 0.50

Calls 15

validate_linux_targetFunction · 0.85
is_release_profileFunction · 0.85
build_profileFunction · 0.85
rustup_cmdFunction · 0.85
build_commandFunction · 0.85
target_dir_from_metadataFunction · 0.85
newFunction · 0.85
copy_and_replaceFunction · 0.85
zip_binaryFunction · 0.85

Tested by

no test coverage detected