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:
LoGin
2024-10-10 00:59:50 +08:00
committed by GitHub
parent 1bd12bc2ff
commit 415e46ea47
37 changed files with 260 additions and 921 deletions

View File

@ -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);

View File

@ -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) {

View File

@ -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) {

View 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());
});
}

View File

@ -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());
}