@@ -20,6 +20,7 @@ use std::str::FromStr;
2020use crate :: cache:: { Interned , INTERNER } ;
2121use crate :: cc_detect:: { ndk_compiler, Language } ;
2222use crate :: channel:: { self , GitInfo } ;
23+ use crate :: compile:: CODEGEN_BACKEND_PREFIX ;
2324pub use crate :: flags:: Subcommand ;
2425use crate :: flags:: { Color , Flags , Warnings } ;
2526use crate :: util:: { exe, output, t} ;
@@ -1452,8 +1453,21 @@ impl Config {
14521453 . map ( |v| v. parse ( ) . expect ( "failed to parse rust.llvm-libunwind" ) ) ;
14531454
14541455 if let Some ( ref backends) = rust. codegen_backends {
1455- config. rust_codegen_backends =
1456- backends. iter ( ) . map ( |s| INTERNER . intern_str ( s) ) . collect ( ) ;
1456+ let available_backends = vec ! [ "llvm" , "cranelift" , "gcc" ] ;
1457+
1458+ config. rust_codegen_backends = backends. iter ( ) . map ( |s| {
1459+ if let Some ( backend) = s. strip_prefix ( CODEGEN_BACKEND_PREFIX ) {
1460+ if available_backends. contains ( & backend) {
1461+ panic ! ( "Invalid value '{s}' for 'rust.codegen-backends'. Instead, please use '{backend}'." ) ;
1462+ } else {
1463+ println ! ( "help: '{s}' for 'rust.codegen-backends' might fail. \
1464+ Codegen backends are mostly defined without the '{CODEGEN_BACKEND_PREFIX}' prefix. \
1465+ In this case, it would be referred to as '{backend}'.") ;
1466+ }
1467+ }
1468+
1469+ INTERNER . intern_str ( s)
1470+ } ) . collect ( ) ;
14571471 }
14581472
14591473 config. rust_codegen_units = rust. codegen_units . map ( threads_from_config) ;
0 commit comments