Skip to content

Commit b49e3c4

Browse files
committed
Add riscv support to build script
1 parent 6b769bd commit b49e3c4

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

build.rs

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::str::FromStr;
1111
enum Arch {
1212
X86(ArchX86),
1313
Arm(ArchArm),
14+
RiscV(ArchRiscV),
1415
}
1516

1617
#[derive(Clone, Copy, PartialEq, Eq)]
@@ -25,6 +26,12 @@ enum ArchArm {
2526
Arm64,
2627
}
2728

29+
#[derive(Clone, Copy, PartialEq, Eq)]
30+
enum ArchRiscV {
31+
RiscV32,
32+
RiscV64,
33+
}
34+
2835
impl FromStr for Arch {
2936
type Err = String;
3037

@@ -34,6 +41,8 @@ impl FromStr for Arch {
3441
"x86_64" => Self::X86(ArchX86::X86_64),
3542
"arm" => Self::Arm(ArchArm::Arm32),
3643
"aarch64" => Self::Arm(ArchArm::Arm64),
44+
"riscv32" => Self::RiscV(ArchRiscV::RiscV32),
45+
"riscv64" => Self::RiscV(ArchRiscV::RiscV64),
3746
_ => return Err(format!("unexpected arch: {arch}")),
3847
})
3948
}
@@ -76,8 +85,7 @@ fn generate_config(
7685

7786
#[cfg(feature = "asm")]
7887
mod asm {
79-
use crate::generate_config;
80-
88+
use super::generate_config;
8189
use super::Arch;
8290
use super::ArchArm;
8391
use super::ArchX86;
@@ -88,6 +96,11 @@ mod asm {
8896
use std::path::PathBuf;
8997

9098
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+
91104
let os = env::var("CARGO_CFG_TARGET_OS").unwrap();
92105
let vendor = env::var("CARGO_CFG_TARGET_VENDOR").unwrap();
93106
let pointer_width = env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap();
@@ -147,6 +160,7 @@ mod asm {
147160
let use_nasm = match arch {
148161
Arch::X86(..) => true,
149162
Arch::Arm(..) => false,
163+
Arch::RiscV(..) => unreachable!(),
150164
};
151165

152166
let define_prefix = if use_nasm { "%" } else { " #" };
@@ -262,11 +276,13 @@ mod asm {
262276
Arch::X86(ArchX86::X86_32) => x86_all,
263277
Arch::X86(ArchX86::X86_64) => x86_64_all,
264278
Arch::Arm(..) => arm_all,
279+
Arch::RiscV(..) => unreachable!(),
265280
};
266281

267282
let asm_file_dir = match arch {
268283
Arch::X86(..) => ["x86", "."],
269284
Arch::Arm(..) => ["arm", pointer_width],
285+
Arch::RiscV(..) => unreachable!(),
270286
};
271287
let asm_extension = if use_nasm { "asm" } else { "S" };
272288

@@ -323,21 +339,30 @@ fn main() {
323339
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
324340
let arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap();
325341

326-
// Nothing to do on unknown architectures
342+
// Nothing to do on unknown architectures.
327343
let Ok(arch) = arch.parse::<Arch>() else {
328344
return;
329345
};
330346

331347
let mut defines = Vec::new();
332348

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+
}
341366
}
342367

343368
let config_dir = out_dir.join("include");

0 commit comments

Comments
 (0)