@@ -686,45 +686,31 @@ pub(crate) const HOST_TARGET: &str =
686
686
// Some architecture triplets are different between rust and libclang, see #1211
687
687
// and duplicates.
688
688
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" ) ;
726
705
}
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 ( )
728
714
}
729
715
730
716
/// Returns the effective target, and whether it was explicitly specified on the
@@ -1375,6 +1361,10 @@ fn test_rust_to_clang_target_riscv() {
1375
1361
rust_to_clang_target( "riscv32imafc-unknown-none-elf" ) . as_ref( ) ,
1376
1362
"riscv32-unknown-none-elf"
1377
1363
) ;
1364
+ assert_eq ! (
1365
+ rust_to_clang_target( "riscv32i-unknown-none-elf" ) . as_ref( ) ,
1366
+ "riscv32-unknown-none-elf"
1367
+ ) ;
1378
1368
}
1379
1369
1380
1370
#[ test]
0 commit comments