mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-30 04:43:23 +00:00
build: Remove DragonOS_GCC And make CI use docker image (#954)
* build: 不再需要x86_64-elf-gcc的支持 * ci: 添加ci用的docker镜像 * 切换workflow到构建用的容器上 --------- Signed-off-by: longjin <longjin@DragonOS.org>
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
use std::path::PathBuf;
|
||||
use std::{collections::HashSet, path::PathBuf};
|
||||
|
||||
use cc::Build;
|
||||
|
||||
@ -13,9 +13,9 @@ pub(super) trait CFilesArch {
|
||||
/// 设置架构相关的宏定义
|
||||
fn setup_defines(&self, c: &mut Build);
|
||||
/// 设置架构相关的全局包含目录
|
||||
fn setup_global_include_dir(&self, c: &mut Build);
|
||||
fn setup_global_include_dir(&self, c: &mut HashSet<PathBuf>);
|
||||
/// 设置需要编译的架构相关的文件
|
||||
fn setup_files(&self, c: &mut Build, files: &mut Vec<PathBuf>);
|
||||
fn setup_files(&self, c: &mut Build, files: &mut HashSet<PathBuf>);
|
||||
|
||||
/// 设置架构相关的全局编译标志
|
||||
fn setup_global_flags(&self, c: &mut Build);
|
||||
|
@ -1,4 +1,4 @@
|
||||
use std::path::PathBuf;
|
||||
use std::{collections::HashSet, path::PathBuf};
|
||||
|
||||
use crate::{constant::ARCH_DIR_RISCV64, utils::FileUtils};
|
||||
|
||||
@ -12,17 +12,18 @@ impl CFilesArch for RiscV64CFilesArch {
|
||||
c.define("__riscv", None);
|
||||
}
|
||||
|
||||
fn setup_global_include_dir(&self, c: &mut cc::Build) {
|
||||
c.include("src/arch/riscv64/include");
|
||||
fn setup_global_include_dir(&self, include_dirs: &mut HashSet<PathBuf>) {
|
||||
include_dirs.insert("src/arch/riscv64/include".into());
|
||||
}
|
||||
|
||||
fn setup_files(&self, _c: &mut cc::Build, files: &mut Vec<std::path::PathBuf>) {
|
||||
files.push(PathBuf::from("src/arch/riscv64/asm/head.S"));
|
||||
files.append(&mut FileUtils::list_all_files(
|
||||
&arch_path("asm"),
|
||||
Some("c"),
|
||||
true,
|
||||
));
|
||||
fn setup_files(&self, _c: &mut cc::Build, files: &mut HashSet<PathBuf>) {
|
||||
files.insert(PathBuf::from("src/arch/riscv64/asm/head.S"));
|
||||
|
||||
FileUtils::list_all_files(&arch_path("asm"), Some("c"), true)
|
||||
.into_iter()
|
||||
.for_each(|f| {
|
||||
files.insert(f);
|
||||
});
|
||||
}
|
||||
|
||||
fn setup_global_flags(&self, c: &mut cc::Build) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
use std::path::PathBuf;
|
||||
use std::{collections::HashSet, path::PathBuf};
|
||||
|
||||
use cc::Build;
|
||||
|
||||
@ -13,38 +13,24 @@ impl CFilesArch for X86_64CFilesArch {
|
||||
c.define("__x86_64__", None);
|
||||
}
|
||||
|
||||
fn setup_global_include_dir(&self, c: &mut cc::Build) {
|
||||
c.include("src/arch/x86_64/include");
|
||||
fn setup_global_include_dir(&self, include_dirs: &mut HashSet<PathBuf>) {
|
||||
include_dirs.insert("src/arch/x86_64/include".into());
|
||||
}
|
||||
|
||||
fn setup_files(&self, _c: &mut Build, files: &mut Vec<PathBuf>) {
|
||||
// 获取`kernel/src/arch/x86_64/driver/apic`下的所有C文件
|
||||
files.append(&mut FileUtils::list_all_files(
|
||||
&arch_path("driver/apic"),
|
||||
Some("c"),
|
||||
true,
|
||||
));
|
||||
|
||||
files.append(&mut FileUtils::list_all_files(
|
||||
&arch_path("init"),
|
||||
Some("c"),
|
||||
true,
|
||||
));
|
||||
files.append(&mut FileUtils::list_all_files(
|
||||
&arch_path("asm"),
|
||||
Some("c"),
|
||||
true,
|
||||
));
|
||||
files.append(&mut FileUtils::list_all_files(
|
||||
&arch_path("interrupt"),
|
||||
Some("c"),
|
||||
true,
|
||||
));
|
||||
fn setup_files(&self, _c: &mut Build, files: &mut HashSet<PathBuf>) {
|
||||
const DIRS: [&str; 4] = ["driver/apic", "init", "asm", "interrupt"];
|
||||
DIRS.iter().for_each(|dir| {
|
||||
FileUtils::list_all_files(&arch_path(dir), Some("c"), true)
|
||||
.into_iter()
|
||||
.for_each(|f| {
|
||||
files.insert(f);
|
||||
});
|
||||
});
|
||||
|
||||
// setup asm files
|
||||
files.push(PathBuf::from("src/arch/x86_64/asm/head.S"));
|
||||
files.push(PathBuf::from("src/arch/x86_64/asm/entry.S"));
|
||||
files.push(PathBuf::from("src/arch/x86_64/asm/apu_boot.S"));
|
||||
files.insert(PathBuf::from("src/arch/x86_64/asm/head.S"));
|
||||
files.insert(PathBuf::from("src/arch/x86_64/asm/entry.S"));
|
||||
files.insert(PathBuf::from("src/arch/x86_64/asm/apu_boot.S"));
|
||||
}
|
||||
|
||||
fn setup_global_flags(&self, c: &mut Build) {
|
||||
|
21
build-scripts/kernel_build/src/cfiles/common.rs
Normal file
21
build-scripts/kernel_build/src/cfiles/common.rs
Normal file
@ -0,0 +1,21 @@
|
||||
use std::{collections::HashSet, path::PathBuf};
|
||||
|
||||
use crate::utils::FileUtils;
|
||||
|
||||
pub(super) fn setup_common_files(files: &mut HashSet<PathBuf>) {
|
||||
const DIRS: [&str; 3] = ["src/common", "src/debug/traceback", "src/libs"];
|
||||
DIRS.iter().for_each(|dir| {
|
||||
FileUtils::list_all_files(&dir.into(), Some("c"), true)
|
||||
.into_iter()
|
||||
.for_each(|f| {
|
||||
files.insert(f);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
pub(super) fn setup_common_include_dir(include_dirs: &mut HashSet<PathBuf>) {
|
||||
const DIRS: [&str; 3] = ["src/include", "src/common", "src"];
|
||||
DIRS.iter().for_each(|dir| {
|
||||
include_dirs.insert(dir.into());
|
||||
});
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
use std::path::PathBuf;
|
||||
use std::{collections::HashSet, path::PathBuf};
|
||||
|
||||
use cc::Build;
|
||||
|
||||
@ -7,6 +7,7 @@ use crate::utils::cargo_handler::CargoHandler;
|
||||
use self::arch::current_cfiles_arch;
|
||||
|
||||
mod arch;
|
||||
mod common;
|
||||
|
||||
/// 构建项目的c文件
|
||||
pub struct CFilesBuilder;
|
||||
@ -46,19 +47,29 @@ impl CFilesBuilder {
|
||||
}
|
||||
|
||||
fn setup_global_include_dir(c: &mut Build) {
|
||||
c.include("src/include");
|
||||
c.include("src");
|
||||
let mut include_dirs = HashSet::new();
|
||||
|
||||
c.include(".");
|
||||
|
||||
current_cfiles_arch().setup_global_include_dir(c);
|
||||
common::setup_common_include_dir(&mut include_dirs);
|
||||
|
||||
current_cfiles_arch().setup_global_include_dir(&mut include_dirs);
|
||||
|
||||
let include_dirs: Vec<PathBuf> = include_dirs.into_iter().collect();
|
||||
Self::set_rerun_if_files_changed(&include_dirs);
|
||||
|
||||
include_dirs.into_iter().for_each(|dir| {
|
||||
c.include(dir);
|
||||
});
|
||||
}
|
||||
|
||||
/// 设置需要编译的文件
|
||||
fn setup_files(c: &mut Build) {
|
||||
let mut files: Vec<PathBuf> = Vec::new();
|
||||
|
||||
let mut files: HashSet<PathBuf> = HashSet::new();
|
||||
current_cfiles_arch().setup_files(c, &mut files);
|
||||
|
||||
common::setup_common_files(&mut files);
|
||||
// 去重
|
||||
let files: Vec<PathBuf> = files.into_iter().collect();
|
||||
Self::set_rerun_if_files_changed(&files);
|
||||
c.files(files.as_slice());
|
||||
}
|
||||
|
Reference in New Issue
Block a user