From 93e48044f57ae2f9fb2cd48913a338dddb2ffb68 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Mon, 9 Apr 2018 20:26:45 +0200 Subject: [PATCH] makefile refactor --- kernel-rs/Makefile | 47 +++++++------------ kernel-rs/mk/grub.mk | 9 ++++ kernel-rs/mk/qemu.mk | 4 +- kernel-rs/src/arch/x86/boot.asm | 3 +- kernel-rs/src/arch/x86/interrupt/exception.rs | 4 +- 5 files changed, 33 insertions(+), 34 deletions(-) create mode 100644 kernel-rs/mk/grub.mk diff --git a/kernel-rs/Makefile b/kernel-rs/Makefile index 7a9ed66b..ebafd3f1 100644 --- a/kernel-rs/Makefile +++ b/kernel-rs/Makefile @@ -2,49 +2,38 @@ SHELL := /bin/bash ARCH := x86 OS := bluesnow -target ?= $(ARCH)-$(OS) +TARGET ?= $(ARCH)-$(OS) -NASM := /usr/bin/nasm -f elf -g -LD := /usr/bin/ld -m elf_i386 -L ./ -n --gc-sections -MKDIR := mkdir -p - -kernel := build/$(OS) -iso := $(kernel).iso -DIRISO := build/isofiles - -rust_os := target/$(target)/debug/lib$(OS).a - -linker_script := src/arch/$(ARCH)/linker.ld -grub.cfg := src/arch/$(ARCH)/grub.cfg +## COMPILE ASM (nasm) asm_source := $(wildcard src/arch/$(ARCH)/*.asm) asm_object := $(patsubst src/arch/$(ARCH)/%.asm, build/arch/$(ARCH)/%.o, $(asm_source)) - -all: $(kernel) - +NASM := /usr/bin/nasm -f elf -g build/arch/$(ARCH)/%.o: src/arch/$(ARCH)/%.asm Makefile - @$(MKDIR) $(shell dirname $@) + @mkdir -p $(shell dirname $@) $(NASM) $< -o $@ +## COMPILE RUST (xargo) +rust_os := target/$(TARGET)/debug/lib$(OS).a +$(rust_os): $(TARGET).json Makefile + @RUST_TARGET_PATH="$(shell pwd)" xargo build --target $(TARGET) + +## LINKAGE +kernel := build/$(OS) +linker_script := src/arch/$(ARCH)/linker.ld +LD := /usr/bin/ld -m elf_i386 -L ./ -n --gc-sections $(kernel): $(rust_os) $(asm_object) $(linker_script) Makefile $(LD) -o $@ -T $(linker_script) $(asm_object) $(rust_os) -$(iso): $(kernel) $(grub.cfg) Makefile - @$(MKDIR) $(DIRISO)/boot/grub - @cp $(grub.cfg) $(DIRISO)/boot/grub - @cp $(kernel) $(DIRISO)/boot/$(OS) - @grub-mkrescue -o $@ $(DIRISO) 2>/dev/null - clean: @xargo clean @rm -rf build -$(rust_os): $(target).json Makefile - @RUST_TARGET_PATH="$(shell pwd)" xargo build --target $(target) - -kernel: $(rust_os) -iso: $(iso) - .PHONY: clean kernel iso $(rust_os) # Emulation recipes include mk/qemu.mk + +# Bootloader recipes +include mk/grub.mk +iso: $(grub-iso) + diff --git a/kernel-rs/mk/grub.mk b/kernel-rs/mk/grub.mk new file mode 100644 index 00000000..28d9c17c --- /dev/null +++ b/kernel-rs/mk/grub.mk @@ -0,0 +1,9 @@ +grub-iso := $(kernel).iso +grub-cfg := src/arch/$(ARCH)/grub.cfg +isodir := build/isofiles + +$(grub-iso): $(kernel) $(grub-cfg) Makefile + @mkdir -p $(isodir)/boot/grub + @cp $(grub-cfg) $(isodir)/boot/grub + @cp $(kernel) $(isodir)/boot/$(OS) + @grub-mkrescue -o $@ $(isodir) 2>/dev/null diff --git a/kernel-rs/mk/qemu.mk b/kernel-rs/mk/qemu.mk index 0ac107ab..7fc3b264 100644 --- a/kernel-rs/mk/qemu.mk +++ b/kernel-rs/mk/qemu.mk @@ -7,7 +7,7 @@ else endif QEMU := qemu-system-x86_64 -QEMUFLAGS := -gdb tcp::$(PORTG) -enable-kvm -monitor telnet:127.0.0.1:$(PORT),server,nowait -curses -cdrom +QEMUFLAGS := -gdb tcp::$(PORTG) -enable-kvm -monitor telnet:127.0.0.1:$(PORT),server,nowait -curses -cdrom build/$(kernel).iso MONITOR := sleep 0.5;\ telnet 127.0.0.1 $(PORT);\ @@ -21,5 +21,5 @@ GDB := gdb -q\ qemu: @tmux info >&- || { echo -e "\033[38;5;16mPlease run inside a tmux session\033[0m" ; exit 1; } - @tmux new-window 'tmux split-window -h "$(MONITOR)"; tmux split-window -fv "$(GDB)"; tmux select-pane -t 1; tmux resize-pane -x 80 -y 25; $(QEMU) $(QEMUFLAGS) $(iso)' + @tmux new-window 'tmux split-window -h "$(MONITOR)"; tmux split-window -fv "$(GDB)"; tmux select-pane -t 1; tmux resize-pane -x 80 -y 25; $(QEMU) $(QEMUFLAGS)' diff --git a/kernel-rs/src/arch/x86/boot.asm b/kernel-rs/src/arch/x86/boot.asm index 2f0402b6..87e1410a 100644 --- a/kernel-rs/src/arch/x86/boot.asm +++ b/kernel-rs/src/arch/x86/boot.asm @@ -6,6 +6,7 @@ bits 32 start: ; our stack, located in bss, linker.ld puts bss at the end of the binary mov esp, stack_top + ; multiboot information pointer push ebx @@ -54,7 +55,7 @@ align 4096 p2_table: resb 4096 stack_bottom: - resb 4096 * 4 + resb 4096 * 3 stack_top: section .gdt diff --git a/kernel-rs/src/arch/x86/interrupt/exception.rs b/kernel-rs/src/arch/x86/interrupt/exception.rs index 48bc6028..fa1682dc 100644 --- a/kernel-rs/src/arch/x86/interrupt/exception.rs +++ b/kernel-rs/src/arch/x86/interrupt/exception.rs @@ -64,9 +64,9 @@ exception_err!(general_protection, {}); pub extern "x86-interrupt" fn page_fault( stack_frame: &mut ExceptionStackFrame, code: PageFaultErrorCode, - ) { +) { println!("Exception: page_fault"); - println!("Error code: {:#b}", code); + println!("Error code: {:?}", code); println!("{:#?}", stack_frame); flush!(); }