添加rust重构版本的HPET驱动和tsc驱动,并使用HPET校准tsc频率和cpu总线频率 (#412)

* 添加rust重构版本的HPET驱动和tsc驱动,并使用HPET校准tsc频率和cpu总线频率

* 把hpet.c移动到arch文件夹下
This commit is contained in:
LoGin
2023-10-26 23:08:39 +08:00
committed by GitHub
parent ad1d649edd
commit fbe6becd6d
29 changed files with 946 additions and 391 deletions

View File

@ -1,13 +1,21 @@
extern crate bindgen;
extern crate cc;
// use ::std::env;
use std::path::PathBuf;
use cc::Build;
fn main() {
// Tell cargo to look for shared libraries in the specified directory
println!("cargo:rustc-link-search=src");
println!("cargo:rerun-if-changed=src/include/bindings/wrapper.h");
generate_bindings();
CFilesBuilder::build();
}
fn generate_bindings() {
// let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let out_path = PathBuf::from(String::from("src/include/bindings/"));
@ -45,3 +53,58 @@ fn main() {
.expect("Couldn't write bindings!");
}
}
/// 构建项目的c文件
struct CFilesBuilder;
impl CFilesBuilder {
fn build() {
let mut c = cc::Build::new();
Self::setup_global_flags(&mut c);
Self::setup_defines(&mut c);
Self::setup_global_include_dir(&mut c);
Self::setup_files(&mut c);
c.compile("dragonos_kernel_cfiles");
}
fn setup_global_flags(c: &mut Build) {
c.flag("-mcmodel=large")
.flag("-fno-builtin")
.flag("-nostdlib")
.flag("-fno-stack-protector")
.flag("-fno-pie")
.flag("-Wno-expansion-to-defined")
.flag("-Wno-unused-parameter")
.flag("-m64")
.flag("-O1");
}
fn setup_defines(c: &mut Build) {
if let Ok(k) = std::env::var("EMULATOR") {
c.define("EMULATOR", Some(k.as_str()));
} else {
c.define("EMULATOR", "__NO_EMULATION__");
}
{
#[cfg(target_arch = "x86_64")]
c.define("__x86_64__", None);
}
c.define("PIC", "_INTR_APIC_");
}
fn setup_global_include_dir(c: &mut Build) {
c.include("src/include");
c.include("src");
c.include(".");
#[cfg(target_arch = "x86_64")]
c.include("src/arch/x86_64/include");
}
/// 设置需要编译的文件
fn setup_files(c: &mut Build) {
c.file("src/arch/x86_64/driver/hpet.c");
}
}