@@ -47,7 +47,7 @@ fn main() {
47
47
48
48
if version. minor >= 80 {
49
49
println ! (
50
- r#"cargo:rustc-check-cfg=cfg(target_feature,values("experimental-zacas","fast-serialization","load-store-on-cond","distinct-ops","miscellaneous-extensions-3"))"#
50
+ r#"cargo:rustc-check-cfg=cfg(target_feature,values("experimental-zacas","sm_70"," fast-serialization","load-store-on-cond","distinct-ops","miscellaneous-extensions-3"))"#
51
51
) ;
52
52
53
53
// Custom cfgs set by build script. Not public API.
@@ -58,7 +58,7 @@ fn main() {
58
58
// TODO: handle multi-line target_feature_fallback
59
59
// grep -F 'target_feature_fallback("' build.rs | grep -Ev '^ *//' | sed -E 's/^.*target_feature_fallback\(//; s/",.*$/"/' | LC_ALL=C sort -u | tr '\n' ',' | sed -E 's/,$/\n/'
60
60
println ! (
61
- r#"cargo:rustc-check-cfg=cfg(portable_atomic_target_feature,values("cmpxchg16b","distinct-ops","experimental-zacas","fast-serialization","load-store-on-cond","lse","lse128","lse2","mclass","miscellaneous-extensions-3","quadword-atomics","rcpc3","v6","zaamo","zabha"))"#
61
+ r#"cargo:rustc-check-cfg=cfg(portable_atomic_target_feature,values("cmpxchg16b","distinct-ops","experimental-zacas","fast-serialization","load-store-on-cond","lse","lse128","lse2","mclass","miscellaneous-extensions-3","quadword-atomics","rcpc3","sm_70"," v6","zaamo","zabha"))"#
62
62
) ;
63
63
}
64
64
@@ -175,6 +175,11 @@ fn main() {
175
175
println ! ( "cargo:rustc-cfg=portable_atomic_unstable_asm_experimental_arch" ) ;
176
176
}
177
177
}
178
+ "nvptx64" => {
179
+ if version. nightly && is_allowed_feature ( "asm_experimental_arch" ) {
180
+ println ! ( "cargo:rustc-cfg=portable_atomic_unstable_asm_experimental_arch" ) ;
181
+ }
182
+ }
178
183
_ => { }
179
184
}
180
185
}
@@ -435,6 +440,36 @@ fn main() {
435
440
// nand (nnr{,g}k), select (sel{,g}r), etc.
436
441
target_feature_fallback ( "miscellaneous-extensions-3" , arch13_features) ;
437
442
}
443
+ "nvptx64" => {
444
+ let mut sm_70 = false ;
445
+ if let Some ( rustflags) = env:: var_os ( "CARGO_ENCODED_RUSTFLAGS" ) {
446
+ for mut flag in rustflags. to_string_lossy ( ) . split ( '\x1f' ) {
447
+ flag = strip_prefix ( flag, "-C" ) . unwrap_or ( flag) ;
448
+ if let Some ( flag) = strip_prefix ( flag, "target-feature=" ) {
449
+ for s in flag. split ( ',' ) {
450
+ // TODO: Handles cases where a specific target feature
451
+ // implicitly enables another target feature.
452
+ match ( s. as_bytes ( ) . first ( ) , s. get ( 1 ..) ) {
453
+ ( Some ( b'+' ) , Some ( f) ) => {
454
+ if let Some ( sm) = strip_prefix ( f, "sm_" ) {
455
+ if let Ok ( sm) = sm. parse :: < u32 > ( ) {
456
+ if sm >= 70 {
457
+ sm_70 = true ;
458
+ }
459
+ }
460
+ }
461
+ }
462
+ ( Some ( b'-' ) , Some ( _f) ) => {
463
+ // TODO
464
+ }
465
+ _ => { }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ target_feature_fallback ( "sm_70" , sm_70) ;
472
+ }
438
473
_ => { }
439
474
}
440
475
}
0 commit comments