@@ -11,6 +11,7 @@ use std::str::FromStr;
11
11
enum Arch {
12
12
X86 ( ArchX86 ) ,
13
13
Arm ( ArchArm ) ,
14
+ RiscV ( ArchRiscV ) ,
14
15
}
15
16
16
17
#[ derive( Clone , Copy , PartialEq , Eq ) ]
@@ -25,6 +26,12 @@ enum ArchArm {
25
26
Arm64 ,
26
27
}
27
28
29
+ #[ derive( Clone , Copy , PartialEq , Eq ) ]
30
+ enum ArchRiscV {
31
+ RiscV32 ,
32
+ RiscV64 ,
33
+ }
34
+
28
35
impl FromStr for Arch {
29
36
type Err = String ;
30
37
@@ -34,6 +41,8 @@ impl FromStr for Arch {
34
41
"x86_64" => Self :: X86 ( ArchX86 :: X86_64 ) ,
35
42
"arm" => Self :: Arm ( ArchArm :: Arm32 ) ,
36
43
"aarch64" => Self :: Arm ( ArchArm :: Arm64 ) ,
44
+ "riscv32" => Self :: RiscV ( ArchRiscV :: RiscV32 ) ,
45
+ "riscv64" => Self :: RiscV ( ArchRiscV :: RiscV64 ) ,
37
46
_ => return Err ( format ! ( "unexpected arch: {arch}" ) ) ,
38
47
} )
39
48
}
@@ -76,8 +85,7 @@ fn generate_config(
76
85
77
86
#[ cfg( feature = "asm" ) ]
78
87
mod asm {
79
- use crate :: generate_config;
80
-
88
+ use super :: generate_config;
81
89
use super :: Arch ;
82
90
use super :: ArchArm ;
83
91
use super :: ArchX86 ;
@@ -88,6 +96,11 @@ mod asm {
88
96
use std:: path:: PathBuf ;
89
97
90
98
pub fn main ( out_dir : & Path , arch : Arch ) {
99
+ // TODO: Add support for assembly on riscv architectures.
100
+ if matches ! ( arch, Arch :: RiscV ( ..) ) {
101
+ return ;
102
+ }
103
+
91
104
let os = env:: var ( "CARGO_CFG_TARGET_OS" ) . unwrap ( ) ;
92
105
let vendor = env:: var ( "CARGO_CFG_TARGET_VENDOR" ) . unwrap ( ) ;
93
106
let pointer_width = env:: var ( "CARGO_CFG_TARGET_POINTER_WIDTH" ) . unwrap ( ) ;
@@ -147,6 +160,7 @@ mod asm {
147
160
let use_nasm = match arch {
148
161
Arch :: X86 ( ..) => true ,
149
162
Arch :: Arm ( ..) => false ,
163
+ Arch :: RiscV ( ..) => unreachable ! ( ) ,
150
164
} ;
151
165
152
166
let define_prefix = if use_nasm { "%" } else { " #" } ;
@@ -262,11 +276,13 @@ mod asm {
262
276
Arch :: X86 ( ArchX86 :: X86_32 ) => x86_all,
263
277
Arch :: X86 ( ArchX86 :: X86_64 ) => x86_64_all,
264
278
Arch :: Arm ( ..) => arm_all,
279
+ Arch :: RiscV ( ..) => unreachable ! ( ) ,
265
280
} ;
266
281
267
282
let asm_file_dir = match arch {
268
283
Arch :: X86 ( ..) => [ "x86" , "." ] ,
269
284
Arch :: Arm ( ..) => [ "arm" , pointer_width] ,
285
+ Arch :: RiscV ( ..) => unreachable ! ( ) ,
270
286
} ;
271
287
let asm_extension = if use_nasm { "asm" } else { "S" } ;
272
288
@@ -323,21 +339,30 @@ fn main() {
323
339
let out_dir = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
324
340
let arch = env:: var ( "CARGO_CFG_TARGET_ARCH" ) . unwrap ( ) ;
325
341
326
- // Nothing to do on unknown architectures
342
+ // Nothing to do on unknown architectures.
327
343
let Ok ( arch) = arch. parse :: < Arch > ( ) else {
328
344
return ;
329
345
} ;
330
346
331
347
let mut defines = Vec :: new ( ) ;
332
348
333
- if let Arch :: X86 ( arch) = arch {
334
- defines. push ( Define :: bool ( "ARCH_X86" , true ) ) ;
335
- defines. push ( Define :: bool ( "ARCH_X86_32" , arch == ArchX86 :: X86_32 ) ) ;
336
- defines. push ( Define :: bool ( "ARCH_X86_64" , arch == ArchX86 :: X86_64 ) ) ;
337
- }
338
- if let Arch :: Arm ( arch) = arch {
339
- defines. push ( Define :: bool ( "ARCH_ARM" , arch == ArchArm :: Arm32 ) ) ;
340
- defines. push ( Define :: bool ( "ARCH_AARCH64" , arch == ArchArm :: Arm64 ) ) ;
349
+ match arch {
350
+ Arch :: X86 ( arch) => {
351
+ defines. push ( Define :: bool ( "ARCH_X86" , true ) ) ;
352
+ defines. push ( Define :: bool ( "ARCH_X86_32" , arch == ArchX86 :: X86_32 ) ) ;
353
+ defines. push ( Define :: bool ( "ARCH_X86_64" , arch == ArchX86 :: X86_64 ) ) ;
354
+ }
355
+
356
+ Arch :: Arm ( arch) => {
357
+ defines. push ( Define :: bool ( "ARCH_ARM" , arch == ArchArm :: Arm32 ) ) ;
358
+ defines. push ( Define :: bool ( "ARCH_AARCH64" , arch == ArchArm :: Arm64 ) ) ;
359
+ }
360
+
361
+ Arch :: RiscV ( arch) => {
362
+ defines. push ( Define :: bool ( "ARCH_RISCV" , true ) ) ;
363
+ defines. push ( Define :: bool ( "ARCH_RV32" , arch == ArchRiscV :: RiscV32 ) ) ;
364
+ defines. push ( Define :: bool ( "ARCH_RV64" , arch == ArchRiscV :: RiscV64 ) ) ;
365
+ }
341
366
}
342
367
343
368
let config_dir = out_dir. join ( "include" ) ;
0 commit comments