@@ -20,6 +20,7 @@ use std::str::FromStr;
20
20
use crate :: cache:: { Interned , INTERNER } ;
21
21
use crate :: cc_detect:: { ndk_compiler, Language } ;
22
22
use crate :: channel:: { self , GitInfo } ;
23
+ use crate :: compile:: CODEGEN_BACKEND_PREFIX ;
23
24
pub use crate :: flags:: Subcommand ;
24
25
use crate :: flags:: { Color , Flags , Warnings } ;
25
26
use crate :: util:: { exe, output, t} ;
@@ -1452,8 +1453,21 @@ impl Config {
1452
1453
. map ( |v| v. parse ( ) . expect ( "failed to parse rust.llvm-libunwind" ) ) ;
1453
1454
1454
1455
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 ( ) ;
1457
1471
}
1458
1472
1459
1473
config. rust_codegen_units = rust. codegen_units . map ( threads_from_config) ;
0 commit comments