@@ -6,6 +6,7 @@ use std::env;
6
6
#[ allow( dead_code) ]
7
7
pub struct Target {
8
8
pub triple : String ,
9
+ pub triple_split : Vec < String > ,
9
10
pub opt_level : String ,
10
11
pub cargo_features : Vec < String > ,
11
12
pub os : String ,
@@ -19,6 +20,8 @@ pub struct Target {
19
20
20
21
impl Target {
21
22
pub fn from_env ( ) -> Self {
23
+ let triple = env:: var ( "TARGET" ) . unwrap ( ) ;
24
+ let triple_split = triple. split ( '-' ) . map ( ToOwned :: to_owned) . collect ( ) ;
22
25
let little_endian = match env:: var ( "CARGO_CFG_TARGET_ENDIAN" ) . unwrap ( ) . as_str ( ) {
23
26
"little" => true ,
24
27
"big" => false ,
@@ -30,7 +33,8 @@ impl Target {
30
33
. collect ( ) ;
31
34
32
35
Self {
33
- triple : env:: var ( "TARGET" ) . unwrap ( ) ,
36
+ triple,
37
+ triple_split,
34
38
os : env:: var ( "CARGO_CFG_TARGET_OS" ) . unwrap ( ) ,
35
39
opt_level : env:: var ( "OPT_LEVEL" ) . unwrap ( ) ,
36
40
cargo_features,
@@ -56,6 +60,22 @@ impl Target {
56
60
}
57
61
}
58
62
63
+ pub fn configure_aliases ( target : & Target ) {
64
+ // To compile intrinsics.rs for thumb targets, where there is no libc
65
+ println ! ( "cargo::rustc-check-cfg=cfg(thumb)" ) ;
66
+ if target. triple_split [ 0 ] . starts_with ( "thumb" ) {
67
+ println ! ( "cargo:rustc-cfg=thumb" )
68
+ }
69
+
70
+ // compiler-rt `cfg`s away some intrinsics for thumbv6m and thumbv8m.base because
71
+ // these targets do not have full Thumb-2 support but only original Thumb-1.
72
+ // We have to cfg our code accordingly.
73
+ println ! ( "cargo::rustc-check-cfg=cfg(thumb_1)" ) ;
74
+ if target. triple_split [ 0 ] == "thumbv6m" || target. triple_split [ 0 ] == "thumbv8m.base" {
75
+ println ! ( "cargo:rustc-cfg=thumb_1" )
76
+ }
77
+ }
78
+
59
79
/// Configure whether or not `f16` and `f128` support should be enabled.
60
80
pub fn configure_f16_f128 ( target : & Target ) {
61
81
// Set whether or not `f16` and `f128` are supported at a basic level by LLVM. This only means
0 commit comments