From a0bf6edda643183a46c0874ab8bdb087211e67e1 Mon Sep 17 00:00:00 2001 From: Edgar Fouillet Date: Mon, 21 Mar 2022 22:45:24 +0100 Subject: [PATCH 1/2] build: improve makefile, move linker script --- Makefile | 55 +++++++++++++--------- build.rs | 4 +- src/arch/i686/linker.ld => linkers/i686.ld | 0 src/libc/Makefile | 17 ------- 4 files changed, 34 insertions(+), 42 deletions(-) rename src/arch/i686/linker.ld => linkers/i686.ld (100%) delete mode 100644 src/libc/Makefile diff --git a/Makefile b/Makefile index 146364f..38d4a69 100644 --- a/Makefile +++ b/Makefile @@ -10,67 +10,76 @@ ARCH=i686 KERNEL=build/elsos-$(ARCH).bin ISO=build/elsos-$(ARCH).iso TARGET=$(ARCH)-elsos -RUST_OS=target/$(TARGET)/$(DEBUG_RELEASE)/libelsos.a +RUST_KERNEL=target/$(TARGET)/$(DEBUG_RELEASE)/libelsos.a LD=$(ARCH)-elf-ld CC=$(ARCH)-elf-gcc +AR=$(ARCH)-elf-ar CFLAGS=-m32 -std=gnu99 -ffreestanding -Wall -Wextra -c +ARFLAGS=rcs export CFLAGS export CC -LD_SCRIPT=src/arch/$(ARCH)/linker.ld +LD_SCRIPT=linkers/$(ARCH).ld GRUB_CFG=grub/grub.cfg + ASM_SRC=$(wildcard src/arch/$(ARCH)/*.asm) ASM_OBJ=$(subst src/, build/, ${ASM_SRC:.asm=.o}) -.PHONY: all clean run iso kernel +LIBC_SRC=$(wildcard src/libc/*.c) +LIBC_OBJ=$(subst src/, build/, ${LIBC_SRC:.c=.o}) +LIBC_A=build/libc/libc.a + +.PHONY: all clean run iso kernel libc all: $(KERNEL) run: $(ISO) - @qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio + qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio rund: $(ISO) - @qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio -d int + qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio -d int rundd: $(ISO) - @qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio -d int -s -S + qemu-system-i386 -drive format=raw,file=$(ISO) -serial stdio -d int -s -S iso: $(ISO) $(ISO): $(KERNEL) $(GRUB_CFG) - @mkdir -p build/iso/boot/grub - @cp $(KERNEL) build/iso/boot/elsos.bin - @cp $(GRUB_CFG) build/iso/boot/grub - @grub-mkrescue -o $(ISO) build/iso 2> /dev/null - @rm -r build/iso + mkdir -p build/iso/boot/grub + cp $(KERNEL) build/iso/boot/elsos.bin + cp $(GRUB_CFG) build/iso/boot/grub + grub-mkrescue -o $(ISO) build/iso 2> /dev/null + rm -r build/iso -libc: libc.a +libc: $(LIBC_A) -libc.a: - @make -C src/libc - @cp src/libc/libc.a . +$(LIBC_A): $(LIBC_OBJ) + $(AR) $(ARFLAGS) $@ $(LIBC_OBJ) -$(KERNEL): kernel $(RUST_OS) $(ASM_OBJ) $(LD_SCRIPT) - $(LD) -n --gc-sections -T $(LD_SCRIPT) -o $(KERNEL) $(ASM_OBJ) $(RUST_OS) +$(KERNEL): $(ASM_OBJ) $(RUST_KERNEL) $(LD_SCRIPT) + $(LD) -n --gc-sections -T $(LD_SCRIPT) -o $(KERNEL) $(ASM_OBJ) $(RUST_KERNEL) -kernel: libc +$(RUST_KERNEL): libc cargo +nightly build --target $(TARGET).json +kernel: $(RUST_KERNEL) + clippy: libc cargo +nightly clippy --target $(TARGET).json -# compile assembly files build/arch/$(ARCH)/%.o: src/arch/$(ARCH)/%.asm @mkdir -p $(shell dirname $@) - @nasm -f elf32 $< -o $@ + nasm -f elf32 $< -o $@ + +build/libc/%.o: src/libc/%.c + @mkdir -p $(shell dirname $@) + $(CC) $(CFLAGS) -o $@ $< clean: - @rm -rf build - @rm -f libc.a - make -C src/libc clean + rm -rf build mrproper: clean cargo clean diff --git a/build.rs b/build.rs index d88bd25..47cc928 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,6 @@ fn main() { - println!("cargo:rustc-link-search=native=./"); + println!("cargo:rustc-link-search=native=./build/libc"); println!("cargo:rustc-link-lib=static=c"); - println!("cargo:rerun-if-changed=libc.a"); + println!("cargo:rerun-if-changed=build/libc"); } diff --git a/src/arch/i686/linker.ld b/linkers/i686.ld similarity index 100% rename from src/arch/i686/linker.ld rename to linkers/i686.ld diff --git a/src/libc/Makefile b/src/libc/Makefile deleted file mode 100644 index af43964..0000000 --- a/src/libc/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -NAME=libc.a -SRC=memset.c memmove.c memcpy.c memcmp.c -OBJ=${SRC:.c=.o} -ARCH=i686 -AR=$(ARCH)-elf-ar -ARFLAGS=rcs - -all: $(NAME) - -$(NAME): $(OBJ) - @$(AR) $(ARFLAGS) $(NAME) $(OBJ) - -%.o: %.c - @$(CC) $(CFLAGS) -o $@ $< - -clean: - @rm -f $(OBJ) $(NAME) From 24ba026214fa35ec5bdf18befbcbee840ae7e54e Mon Sep 17 00:00:00 2001 From: Edgar Fouillet Date: Tue, 22 Mar 2022 18:00:23 +0100 Subject: [PATCH 2/2] linker: update sections --- linkers/i686.ld | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/linkers/i686.ld b/linkers/i686.ld index d0bd6a8..d248d52 100644 --- a/linkers/i686.ld +++ b/linkers/i686.ld @@ -2,46 +2,44 @@ ENTRY(_start) SECTIONS { - .boot BLOCK(4K) : ALIGN(4K) + . = 0x100000; + _kernel_start = .; + .boot ALIGN(4K) : { - /* ensure that the multiboot header is at the beginning */ KEEP(*(.multiboot_header)) } - . = 0x00100000; - .text BLOCK(4K) : ALIGN(4K) + .text ALIGN(4K) : { - _kernel_start = .; *(.text) } /* Read-only data. */ - .rodata BLOCK(4K) : ALIGN(4K) + .rodata ALIGN(4K) : { *(.rodata) } - /* Read-write data (initialized) */ - .data BLOCK(4K) : ALIGN(4K) + .data ALIGN(4K) : { *(.data) } - .bss BLOCK(4K) : ALIGN(4K) + .bss ALIGN(4K) : { *(COMMON) *(.bss) } - .stab BLOCK(4K) : ALIGN(4K) + .stab ALIGN(4K) : { *(.stab) } - .stabstr BLOCK(4K) : ALIGN(4K) + .stabstr ALIGN(4K) : { *(.stabstr) } - .note BLOCK(4K) : ALIGN(4K) + .note ALIGN(4K) : { *(.note) } - .comment BLOCK(4K) : ALIGN(4K) + .comment ALIGN(4K) : { *(.comment) }