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