xref: /DragonOS/build-scripts/kernel_build/src/cfiles/arch/riscv64.rs (revision 23ef2b33d1e3cfd2506eb7449a33df4ec42f11d3)
14fda81ceSLoGin use std::path::PathBuf;
24fda81ceSLoGin 
34fda81ceSLoGin use crate::{constant::ARCH_DIR_RISCV64, utils::FileUtils};
44fda81ceSLoGin 
54fda81ceSLoGin use super::CFilesArch;
64fda81ceSLoGin 
74fda81ceSLoGin pub(super) struct RiscV64CFilesArch;
84fda81ceSLoGin 
94fda81ceSLoGin impl CFilesArch for RiscV64CFilesArch {
setup_defines(&self, c: &mut cc::Build)104fda81ceSLoGin     fn setup_defines(&self, c: &mut cc::Build) {
114fda81ceSLoGin         c.define("__riscv64__", None);
124fda81ceSLoGin         c.define("__riscv", None);
134fda81ceSLoGin     }
144fda81ceSLoGin 
setup_global_include_dir(&self, c: &mut cc::Build)154fda81ceSLoGin     fn setup_global_include_dir(&self, c: &mut cc::Build) {
164fda81ceSLoGin         c.include("src/arch/riscv64/include");
174fda81ceSLoGin     }
184fda81ceSLoGin 
setup_files(&self, _c: &mut cc::Build, files: &mut Vec<std::path::PathBuf>)194fda81ceSLoGin     fn setup_files(&self, _c: &mut cc::Build, files: &mut Vec<std::path::PathBuf>) {
201a72a751SLoGin         files.push(PathBuf::from("src/arch/riscv64/asm/head.S"));
214fda81ceSLoGin         files.append(&mut FileUtils::list_all_files(
224fda81ceSLoGin             &arch_path("asm"),
234fda81ceSLoGin             Some("c"),
244fda81ceSLoGin             true,
254fda81ceSLoGin         ));
264fda81ceSLoGin     }
274fda81ceSLoGin 
setup_global_flags(&self, c: &mut cc::Build)284fda81ceSLoGin     fn setup_global_flags(&self, c: &mut cc::Build) {
294fda81ceSLoGin         // 在这里设置编译器,不然的话vscode的rust-analyzer会报错
304fda81ceSLoGin         c.compiler("riscv64-unknown-elf-gcc");
314fda81ceSLoGin         // // c.flag("-march=rv64imafdc");
324fda81ceSLoGin         // c.no_default_flags(true);
334fda81ceSLoGin         c.flag("-mcmodel=medany");
34*23ef2b33SLoGin 
35*23ef2b33SLoGin         c.flag("-mabi=lp64d");
36*23ef2b33SLoGin         c.flag("-march=rv64gc");
374fda81ceSLoGin     }
384fda81ceSLoGin }
394fda81ceSLoGin 
arch_path(relative_path: &str) -> PathBuf404fda81ceSLoGin fn arch_path(relative_path: &str) -> PathBuf {
414fda81ceSLoGin     PathBuf::from(format!("{}/{}", ARCH_DIR_RISCV64, relative_path))
424fda81ceSLoGin }
43