Skip to content

Commit aa780db

Browse files
jorolfemilio
authored andcommitted
Simplify rust_to_clang_target
1 parent c03964c commit aa780db

File tree

1 file changed

+28
-38
lines changed

1 file changed

+28
-38
lines changed

bindgen/lib.rs

+28-38
Original file line numberDiff line numberDiff line change
@@ -686,45 +686,31 @@ pub(crate) const HOST_TARGET: &str =
686686
// Some architecture triplets are different between rust and libclang, see #1211
687687
// and duplicates.
688688
fn rust_to_clang_target(rust_target: &str) -> Box<str> {
689-
if rust_target.starts_with("aarch64-apple-") {
690-
let mut clang_target = "arm64-apple-".to_owned();
691-
clang_target
692-
.push_str(rust_target.strip_prefix("aarch64-apple-").unwrap());
693-
return clang_target.into();
694-
} else if rust_target.starts_with("riscv64gc-") {
695-
let mut clang_target = "riscv64-".to_owned();
696-
clang_target.push_str(rust_target.strip_prefix("riscv64gc-").unwrap());
697-
return clang_target.into();
698-
} else if rust_target.starts_with("riscv64imac-") {
699-
let mut clang_target = "riscv64-".to_owned();
700-
clang_target
701-
.push_str(rust_target.strip_prefix("riscv64imac-").unwrap());
702-
return clang_target.into();
703-
} else if rust_target.ends_with("-espidf") {
704-
let mut clang_target =
705-
rust_target.strip_suffix("-espidf").unwrap().to_owned();
706-
clang_target.push_str("-elf");
707-
if clang_target.starts_with("riscv32imc-") {
708-
clang_target = "riscv32-".to_owned() +
709-
clang_target.strip_prefix("riscv32imc-").unwrap();
710-
}
711-
return clang_target.into();
712-
} else if rust_target.starts_with("riscv32imc-") {
713-
let mut clang_target = "riscv32-".to_owned();
714-
clang_target.push_str(rust_target.strip_prefix("riscv32imc-").unwrap());
715-
return clang_target.into();
716-
} else if rust_target.starts_with("riscv32imac-") {
717-
let mut clang_target = "riscv32-".to_owned();
718-
clang_target
719-
.push_str(rust_target.strip_prefix("riscv32imac-").unwrap());
720-
return clang_target.into();
721-
} else if rust_target.starts_with("riscv32imafc-") {
722-
let mut clang_target = "riscv32-".to_owned();
723-
clang_target
724-
.push_str(rust_target.strip_prefix("riscv32imafc-").unwrap());
725-
return clang_target.into();
689+
const TRIPLE_HYPHENS_MESSAGE: &str = "Target triple should contain hyphens";
690+
691+
let mut clang_target = rust_target.to_owned();
692+
693+
if clang_target.starts_with("riscv32") {
694+
let idx = clang_target.find('-').expect(TRIPLE_HYPHENS_MESSAGE);
695+
696+
clang_target.replace_range(..idx, "riscv32");
697+
} else if clang_target.starts_with("riscv64") {
698+
let idx = clang_target.find('-').expect(TRIPLE_HYPHENS_MESSAGE);
699+
700+
clang_target.replace_range(..idx, "riscv64");
701+
} else if clang_target.starts_with("aarch64-apple-") {
702+
let idx = clang_target.find('-').expect(TRIPLE_HYPHENS_MESSAGE);
703+
704+
clang_target.replace_range(..idx, "arm64");
726705
}
727-
rust_target.into()
706+
707+
if clang_target.ends_with("-espidf") {
708+
let idx = clang_target.rfind('-').expect(TRIPLE_HYPHENS_MESSAGE);
709+
710+
clang_target.replace_range((idx + 1).., "elf");
711+
}
712+
713+
clang_target.into()
728714
}
729715

730716
/// Returns the effective target, and whether it was explicitly specified on the
@@ -1375,6 +1361,10 @@ fn test_rust_to_clang_target_riscv() {
13751361
rust_to_clang_target("riscv32imafc-unknown-none-elf").as_ref(),
13761362
"riscv32-unknown-none-elf"
13771363
);
1364+
assert_eq!(
1365+
rust_to_clang_target("riscv32i-unknown-none-elf").as_ref(),
1366+
"riscv32-unknown-none-elf"
1367+
);
13781368
}
13791369

13801370
#[test]

0 commit comments

Comments
 (0)