feat: update depot version to 0.12.2 and add support for custom linker and preprocessor flags
This commit is contained in:
@@ -156,6 +156,11 @@ fn has_option(configure: &[String], long: &str) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn has_builtin_option(configure: &[String], key: &str) -> bool {
|
||||
let prefix = format!("-D{key}=");
|
||||
configure.iter().any(|arg| arg.starts_with(&prefix))
|
||||
}
|
||||
|
||||
fn meson_setup_args(
|
||||
flags: &crate::package::BuildFlags,
|
||||
cross_file: Option<&Path>,
|
||||
@@ -191,6 +196,14 @@ fn meson_setup_args(
|
||||
if let Some(cf) = cross_file {
|
||||
args.push(format!("--cross-file={}", cf.display()));
|
||||
}
|
||||
if !flags.ld.trim().is_empty() {
|
||||
if !has_builtin_option(&flags.configure, "c_ld") {
|
||||
args.push(format!("-Dc_ld={}", flags.ld));
|
||||
}
|
||||
if !has_builtin_option(&flags.configure, "cpp_ld") {
|
||||
args.push(format!("-Dcpp_ld={}", flags.ld));
|
||||
}
|
||||
}
|
||||
|
||||
// Append user flags last so they can override defaults when Meson allows it.
|
||||
for arg in &flags.configure {
|
||||
@@ -354,6 +367,33 @@ mod tests {
|
||||
assert!(args.iter().any(|a| a == "--bindir=/usr/bin"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meson_setup_args_include_linker_override() {
|
||||
let flags = BuildFlags {
|
||||
ld: "ld.lld".to_string(),
|
||||
..BuildFlags::default()
|
||||
};
|
||||
|
||||
let args = meson_setup_args(&flags, None, &[]);
|
||||
assert!(args.iter().any(|a| a == "-Dc_ld=ld.lld"));
|
||||
assert!(args.iter().any(|a| a == "-Dcpp_ld=ld.lld"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meson_setup_args_honor_explicit_linker_override() {
|
||||
let flags = BuildFlags {
|
||||
ld: "ld.lld".to_string(),
|
||||
configure: vec!["-Dc_ld=gold".to_string(), "-Dcpp_ld=gold".to_string()],
|
||||
..BuildFlags::default()
|
||||
};
|
||||
|
||||
let args = meson_setup_args(&flags, None, &[]);
|
||||
assert_eq!(args.iter().filter(|a| *a == "-Dc_ld=gold").count(), 1);
|
||||
assert_eq!(args.iter().filter(|a| *a == "-Dcpp_ld=gold").count(), 1);
|
||||
assert!(!args.iter().any(|a| a == "-Dc_ld=ld.lld"));
|
||||
assert!(!args.iter().any(|a| a == "-Dcpp_ld=ld.lld"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_resolve_build_dir_uses_flag() {
|
||||
let flags = BuildFlags {
|
||||
|
||||
@@ -189,6 +189,12 @@ pub fn standard_build_env(
|
||||
set_env_var(&mut env_vars, "CC", flags.cc.clone());
|
||||
set_env_var(&mut env_vars, "CXX", flags.cxx.clone());
|
||||
set_env_var(&mut env_vars, "AR", flags.ar.clone());
|
||||
if !flags.ld.trim().is_empty() {
|
||||
set_env_var(&mut env_vars, "LD", flags.ld.clone());
|
||||
}
|
||||
if !flags.cpp.trim().is_empty() {
|
||||
set_env_var(&mut env_vars, "CPP", flags.cpp.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,6 +454,17 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standard_build_env_exports_native_linker_and_cpp() {
|
||||
let mut spec = mk_spec(Vec::new(), Vec::new());
|
||||
spec.build.flags.ld = "ld.lld".to_string();
|
||||
spec.build.flags.cpp = "clang-cpp".to_string();
|
||||
|
||||
let env = standard_build_env(&spec, None, true, true);
|
||||
assert!(env.iter().any(|(k, v)| k == "LD" && v == "ld.lld"));
|
||||
assert!(env.iter().any(|(k, v)| k == "CPP" && v == "clang-cpp"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standard_build_env_respects_export_compiler_flags_toggle() {
|
||||
let mut spec = mk_spec(vec!["-O2"], vec!["-Wl,--as-needed"]);
|
||||
|
||||
Reference in New Issue
Block a user