1
1
//! This selects the curve25519_dalek_bits either by default from target_pointer_width or explicitly set
2
2
3
+ #![ deny( clippy:: unwrap_used, dead_code) ]
4
+
3
5
#[ allow( non_camel_case_types) ]
4
6
enum DalekBits {
5
7
#[ cfg_attr( curve25519_dalek_bits = "64" , allow( dead_code) ) ]
@@ -8,29 +10,6 @@ enum DalekBits {
8
10
Dalek64 ,
9
11
}
10
12
11
- #[ cfg( all( not( curve25519_dalek_bits = "64" ) , not( curve25519_dalek_bits = "32" ) ) ) ]
12
- #[ deny( dead_code) ]
13
- fn lotto_curve25519_dalek_bits ( ) -> DalekBits {
14
- use platforms:: target:: PointerWidth ;
15
-
16
- let target_triplet = std:: env:: var ( "TARGET" ) . unwrap ( ) ;
17
- let platform = platforms:: Platform :: find ( & target_triplet) . unwrap ( ) ;
18
-
19
- #[ allow( clippy:: match_single_binding) ]
20
- match platform. target_arch {
21
- //Issues: 449 and 456
22
- //TODO(Arm): Needs tests + benchmarks to back this up
23
- //platforms::target::Arch::Arm => DalekBits::Dalek64,
24
- //TODO(Wasm32): Needs tests + benchmarks to back this up
25
- //platforms::target::Arch::Wasm32 => DalekBits::Dalek64,
26
- _ => match platform. target_pointer_width {
27
- PointerWidth :: U64 => DalekBits :: Dalek64 ,
28
- PointerWidth :: U32 => DalekBits :: Dalek32 ,
29
- _ => DalekBits :: Dalek32 ,
30
- } ,
31
- }
32
- }
33
-
34
13
fn main ( ) {
35
14
#[ cfg( curve25519_dalek_bits = "32" ) ]
36
15
let curve25519_dalek_bits = DalekBits :: Dalek32 ;
@@ -39,10 +18,64 @@ fn main() {
39
18
let curve25519_dalek_bits = DalekBits :: Dalek64 ;
40
19
41
20
#[ cfg( all( not( curve25519_dalek_bits = "64" ) , not( curve25519_dalek_bits = "32" ) ) ) ]
42
- let curve25519_dalek_bits = lotto_curve25519_dalek_bits ( ) ;
21
+ let curve25519_dalek_bits = deterministic :: determine_curve25519_dalek_bits ( ) ;
43
22
44
23
match curve25519_dalek_bits {
45
24
DalekBits :: Dalek64 => println ! ( "cargo:rustc-cfg=curve25519_dalek_bits=\" 64\" " ) ,
46
25
DalekBits :: Dalek32 => println ! ( "cargo:rustc-cfg=curve25519_dalek_bits=\" 32\" " ) ,
47
26
}
48
27
}
28
+
29
+ // Deterministic cfg(curve25519_dalek_bits) when this is not explicitly set.
30
+ #[ cfg( all( not( curve25519_dalek_bits = "64" ) , not( curve25519_dalek_bits = "32" ) ) ) ]
31
+ mod deterministic {
32
+
33
+ use super :: * ;
34
+
35
+ // Standard Cargo TARGET environment variable of triplet is required
36
+ static ERR_MSG_NO_TARGET : & str = "Standard Cargo TARGET environment variable is not set." ;
37
+
38
+ // Custom Non-Rust standard target platforms require explicit settings.
39
+ static ERR_MSG_NO_PLATFORM : & str = "Unknown Rust target platform." ;
40
+
41
+ // Error handling when the bits setting cannot be determined
42
+ fn determine_curve25519_dalek_bits_error ( cause : & str ) -> ! {
43
+ eprintln ! ( "Error: {cause}" ) ;
44
+ eprintln ! ( "Please set cfg(curve25519_dalek_bits) explicitly either as 32 or 64." ) ;
45
+ std:: process:: exit ( 1 )
46
+ }
47
+
48
+ // Determine the curve25519_dalek_bits based on Rust standard TARGET triplet
49
+ pub ( super ) fn determine_curve25519_dalek_bits ( ) -> DalekBits {
50
+ use platforms:: target:: PointerWidth ;
51
+
52
+ // TARGET environment is supplied by Cargo
53
+ // https://doc.rust-lang.org/cargo/reference/environment-variables.html
54
+ let target_triplet = match std:: env:: var ( "TARGET" ) {
55
+ Ok ( t) => t,
56
+ Err ( _) => determine_curve25519_dalek_bits_error ( ERR_MSG_NO_TARGET ) ,
57
+ } ;
58
+
59
+ // platforms crate is the source of truth used to determine the platform
60
+ let platform = match platforms:: Platform :: find ( & target_triplet) {
61
+ Some ( p) => p,
62
+ None => determine_curve25519_dalek_bits_error ( ERR_MSG_NO_PLATFORM ) ,
63
+ } ;
64
+
65
+ #[ allow( clippy:: match_single_binding) ]
66
+ match platform. target_arch {
67
+ //Issues: 449 and 456
68
+ //TODO(Arm): Needs tests + benchmarks to back this up
69
+ //platforms::target::Arch::Arm => DalekBits::Dalek64,
70
+ //TODO(Wasm32): Needs tests + benchmarks to back this up
71
+ //platforms::target::Arch::Wasm32 => DalekBits::Dalek64,
72
+ _ => match platform. target_pointer_width {
73
+ PointerWidth :: U64 => DalekBits :: Dalek64 ,
74
+ PointerWidth :: U32 => DalekBits :: Dalek32 ,
75
+ // Intended default solely for non-32/64 target pointer widths
76
+ // Otherwise known target platforms only.
77
+ _ => DalekBits :: Dalek32 ,
78
+ } ,
79
+ }
80
+ }
81
+ }
0 commit comments