xref: /DragonOS/build-scripts/kernel_build/src/cfiles/arch/x86_64.rs (revision 11f78b73e7b18ef04e05e63612f8027eda0740e7)
1 use std::path::PathBuf;
2 
3 use cc::Build;
4 
5 use crate::utils::FileUtils;
6 
7 use super::CFilesArch;
8 
9 pub(super) struct X86_64CFilesArch;
10 
11 impl CFilesArch for X86_64CFilesArch {
12     fn setup_defines(&self, c: &mut cc::Build) {
13         c.define("__x86_64__", None);
14     }
15 
16     fn setup_global_include_dir(&self, c: &mut cc::Build) {
17         c.include("src/arch/x86_64/include");
18     }
19 
20     fn setup_files(&self, _c: &mut Build, files: &mut Vec<PathBuf>) {
21         files.push(PathBuf::from("src/arch/x86_64/driver/hpet.c"));
22         // 获取`kernel/src/arch/x86_64/driver/apic`下的所有C文件
23         files.append(&mut FileUtils::list_all_files(
24             &PathBuf::from("src/arch/x86_64/driver/apic"),
25             Some("c"),
26             true,
27         ));
28 
29         // setup asm files
30         files.push(PathBuf::from("src/arch/x86_64/asm/head.S"));
31         files.push(PathBuf::from("src/arch/x86_64/asm/entry.S"));
32         files.push(PathBuf::from("src/arch/x86_64/asm/apu_boot.S"));
33     }
34 
35     fn setup_global_flags(&self, c: &mut Build) {
36         c.asm_flag("-m64");
37     }
38 }
39