使用kernel-build脚本来编译所有的asm文件 (#445)

This commit is contained in:
LoGin 2023-11-17 20:05:57 +08:00 committed by GitHub
parent e4fb6c9754
commit 11f78b73e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 26 additions and 24 deletions

View File

@ -15,6 +15,9 @@ pub(super) trait CFilesArch {
fn setup_global_include_dir(&self, c: &mut Build); fn setup_global_include_dir(&self, c: &mut Build);
/// 设置需要编译的架构相关的文件 /// 设置需要编译的架构相关的文件
fn setup_files(&self, c: &mut Build, files: &mut Vec<PathBuf>); fn setup_files(&self, c: &mut Build, files: &mut Vec<PathBuf>);
/// 设置架构相关的全局编译标志
fn setup_global_flags(&self, c: &mut Build);
} }
/// 获取当前的架构; /// 获取当前的架构;

View File

@ -25,5 +25,14 @@ impl CFilesArch for X86_64CFilesArch {
Some("c"), Some("c"),
true, true,
)); ));
// 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"));
}
fn setup_global_flags(&self, c: &mut Build) {
c.asm_flag("-m64");
} }
} }

View File

@ -14,6 +14,7 @@ pub struct CFilesBuilder;
impl CFilesBuilder { impl CFilesBuilder {
pub fn build() { pub fn build() {
let mut c = cc::Build::new(); let mut c = cc::Build::new();
Self::setup_global_flags(&mut c); Self::setup_global_flags(&mut c);
Self::setup_defines(&mut c); Self::setup_defines(&mut c);
Self::setup_global_include_dir(&mut c); Self::setup_global_include_dir(&mut c);
@ -31,6 +32,9 @@ impl CFilesBuilder {
.flag("-Wno-unused-parameter") .flag("-Wno-unused-parameter")
.flag("-m64") .flag("-m64")
.flag("-O1"); .flag("-O1");
// set Arch-specific flags
current_cfiles_arch().setup_global_flags(c);
} }
fn setup_defines(c: &mut Build) { fn setup_defines(c: &mut Build) {

View File

@ -23,17 +23,12 @@ CFLAGS = $(GLOBAL_CFLAGS) -fno-pie $(CFLAGS_UNWIND) -I $(shell pwd) -I $(shell p
export ASFLAGS := --64 export ASFLAGS := --64
LD_LIST := head.o LD_LIST := ""
kernel_subdirs := common driver debug arch exception smp syscall ktest libs time kernel_subdirs := common driver debug arch exception smp syscall ktest libs time
head.o: head.S
$(CC) -E head.S > _head.s # 预处理
$(AS) $(ASFLAGS) -o head.o _head.s
main.o: main.c main.o: main.c
# -fno-builtin: 不使用C语言内建函数 # -fno-builtin: 不使用C语言内建函数
# The -m64 option sets int to 32bits and long and pointer to 64 bits and generates code for AMDs x86-64 architecture. # The -m64 option sets int to 32bits and long and pointer to 64 bits and generates code for AMDs x86-64 architecture.
@ -45,7 +40,7 @@ kernel_rust:
all: kernel all: kernel
@echo "Linking kernel..." @echo "Linking kernel..."
$(LD) -b elf64-x86-64 -z muldefs $(LDFLAGS_UNWIND) -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a -T link.lds --no-relax $(LD) -b elf64-x86-64 -z muldefs $(LDFLAGS_UNWIND) -o kernel main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a -T link.lds --no-relax
# 生成kallsyms # 生成kallsyms
current_dir=$(pwd) current_dir=$(pwd)
@ -59,7 +54,7 @@ all: kernel
# 重新链接 # 重新链接
@echo "Re-Linking kernel..." @echo "Re-Linking kernel..."
@echo $(shell find . -name "*.o") @echo $(shell find . -name "*.o")
$(LD) -b elf64-x86-64 -z muldefs $(LDFLAGS_UNWIND) -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a ./debug/kallsyms.o -T link.lds --no-relax $(LD) -b elf64-x86-64 -z muldefs $(LDFLAGS_UNWIND) -o kernel main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a ./debug/kallsyms.o -T link.lds --no-relax
@echo "Generating kernel ELF file..." @echo "Generating kernel ELF file..."
# 生成内核文件 # 生成内核文件
ifeq ($(UNWIND_ENABLE), yes) ifeq ($(UNWIND_ENABLE), yes)
@ -76,7 +71,7 @@ $(kernel_subdirs): ECHO
$(MAKE) -C $@ all CFLAGS="$(CFLAGS)" ASFLAGS="$(ASFLAGS)" kernel_root_path="$(shell pwd)" $(MAKE) -C $@ all CFLAGS="$(CFLAGS)" ASFLAGS="$(ASFLAGS)" kernel_root_path="$(shell pwd)"
kernel: head.o main.o $(kernel_subdirs) kernel_rust kernel: main.o $(kernel_subdirs) kernel_rust

View File

@ -1,4 +1,4 @@
#include"../common/asm.h" #include <common/asm.h>
.code64 .code64
//.section .text //.section .text

View File

@ -2,11 +2,7 @@
CFLAGS += -I . CFLAGS += -I .
all: entry.o irq.o trap.o all: irq.o trap.o
entry.o: entry.S
$(CC) -E entry.S > _entry.s
$(AS) $(ASFLAGS) -o entry.o _entry.s
trap.o: trap.c trap.o: trap.c
$(CC) $(CFLAGS) -c trap.c -o trap.o $(CC) $(CFLAGS) -c trap.c -o trap.o

View File

@ -13,9 +13,9 @@ SECTIONS
.boot.text : .boot.text :
{ {
KEEP(*(.multiboot_header)) KEEP(*(.multiboot_header))
head.o(.bootstrap) *(.bootstrap)
head.o(.bootstrap.code64) *(.bootstrap.code64)
head.o(.bootstrap.data) *(.bootstrap.data)
. = ALIGN(4096); . = ALIGN(4096);
} }

View File

@ -2,12 +2,7 @@
CFLAGS += -I . CFLAGS += -I .
all: apu_boot.o smp.o all: smp.o
apu_boot.o: apu_boot.S
$(CC) -E apu_boot.S > _apu_boot.s # 预处理
$(AS) $(ASFLAGS) -o apu_boot.o _apu_boot.s
smp.o: smp.c smp.o: smp.c
$(CC) $(CFLAGS) -c smp.c -o smp.o $(CC) $(CFLAGS) -c smp.c -o smp.o