fix: avoid implicit clang target on native builds

This commit is contained in:
2026-10-21 21:50:42 +08:00
parent 0f2182fe96
commit 2258ae53fe
2 changed files with 13 additions and 2 deletions

View File

@@ -609,10 +609,14 @@ fn build_project_at_inner(
tc_as.as_deref(),
);
let resolved_linker = resolve_tool("DCR_LD", tc_ld.as_deref());
prepend_clang_target_flag(&mut build_cflags, build_target, &resolved_compiler);
// The host triple is still used for native target-specific configuration and
// artifact paths, but native Clang must select the platform SDK implicitly.
// Pass --target only when the user/config explicitly requested a target.
let compiler_target = if explicit_target { build_target } else { None };
prepend_clang_target_flag(&mut build_cflags, compiler_target, &resolved_compiler);
prepend_clang_target_flag(
&mut build_ldflags,
build_target,
compiler_target,
resolved_linker.as_deref().unwrap_or(&resolved_compiler),
);
let resolved_archiver = resolve_tool("DCR_AR", tc_ar.as_deref());

View File

@@ -782,6 +782,13 @@ mod tests {
assert_eq!(flags, vec!["-O2".to_string()]);
}
#[test]
fn native_clang_target_is_not_added_without_explicit_target() {
let mut flags = vec!["-O3".to_string()];
prepend_clang_target_flag(&mut flags, None, "clang");
assert_eq!(flags, vec!["-O3".to_string()]);
}
/// Test for parse_version_parts function.
#[test]
fn parse_version_parts() {