Mon, 25 Dec 2017 19:18:57 +0100
5 files changed,
31 insertions(+),
38 deletions(-)
M
boot/makefile
→
boot/makefile
@@ -2,11 +2,7 @@ .RECIPEPREFIX = >
.PHONY: build build: boot.s -> $(GCC_PREFIX)as -o $(BUILD_DIR)/boot.o boot.s - -.PHONY: clear -clear: -> @rm build/*.* 2> /dev/null; true +> $(GCC_PREFIX)as -o $(GLOBAL_BUILD)/boot.o boot.s .PHONY: rebuild rebuild:
M
kernel/makefile
→
kernel/makefile
@@ -1,24 +1,20 @@
.RECIPEPREFIX = > -S_OBJECTS = $(patsubst %.s,build/%.s.o,$(wildcard *.s)) -C_OBJECTS = $(patsubst %.c,build/%.c.o,$(wildcard *.c)) +S_OBJECTS = $(patsubst %.s,$(LOCAL_BUILD)/%.s.o,$(wildcard *.s)) +C_OBJECTS = $(patsubst %.c,$(LOCAL_BUILD)/%.c.o,$(wildcard *.c)) OBJECTS = $(S_OBJECTS) $(C_OBJECTS) .PHONY: build build: $(OBJECTS) -> $(GCC_PREFIX)ld $^ -r -T link.txt -o $(BUILD_DIR)/kernel.o --oformat elf32-i386 - -.PHONY: clear -clear: -> @rm build/*.* 2> /dev/null; true +> $(GCC_PREFIX)ld $^ -r -T link.txt -o $(GLOBAL_BUILD)/kernel.o --oformat elf32-i386 .PHONY: rebuild rebuild: > $(MAKE) clear > $(MAKE) build -build/%.s.o: %.s +$(LOCAL_BUILD)/%.s.o: %.s > $(GCC_PREFIX)as -o $@ $< -build/%.c.o: %.c $(wildcard *.h) +$(LOCAL_BUILD)/%.c.o: %.c $(wildcard *.h) > $(GCC_PREFIX)gcc -c -I$(INCLUDE_DIR) --prefix=$(GCC_PREFIX) $(GCC_OPTIONS) -o $@ $<
M
link.txt
→
link.txt
@@ -1,4 +1,3 @@
-INPUT(build/boot.o) OUTPUT_FORMAT(binary) OUTPUT_ARCH(i386)@@ -16,7 +15,7 @@ SECTIONS
{ BOOT : AT(0x0000) { - build/boot.o(.*) + */boot.o(.*) . = 510; BYTE(0x55) BYTE(0xAA)@@ -24,12 +23,12 @@ } >BOOT
SECOND_STAGE : AT(LOADADDR(BOOT) + SIZEOF(BOOT)) { - build/second_stage.o(.*) + */second_stage.o(.*) } >SECOND_STAGE KERNEL : AT(LOADADDR(SECOND_STAGE) + SIZEOF(SECOND_STAGE)) { - build/kernel.o(.*) + */kernel.o(.*) } >KERNEL APPLICATION : AT(LOADADDR(KERNEL) + SIZEOF(KERNEL))
M
makefile
→
makefile
@@ -1,35 +1,37 @@
.RECIPEPREFIX = > export CURRENT_DIR = $(shell pwd) -export BUILD_DIR = $(CURRENT_DIR)/build export INCLUDE_DIR = $(CURRENT_DIR)/include export DEBUG_DIR = $(CURRENT_DIR)/debug export GCC_PREFIX = $(HOME)/opt/cross/i686-elf-/bin/i686-elf- ifdef DEBUG +GLOBAL_BUILD = $(CURRENT_DIR)/build/debug GCC_OPTIONS = -D DEBUG -O0 -Wno-write-strings -Qn -Wall -Wextra -fno-exceptions -nostdlib -nostartfiles -ffreestanding else +GLOBAL_BUILD = $(CURRENT_DIR)/build/release GCC_OPTIONS = -O1 -Wno-write-strings -Qn -Wall -Wextra -fno-exceptions -nostdlib -nostartfiles -ffreestanding endif +export GLOBAL_BUILD export GCC_OPTIONS -# OBJ_FILES = $(wildcard obj/asm/*.o) $(wildcard obj/cpp/*.o) - .PHONY: build build: -> $(MAKE) -C boot build -> $(MAKE) -C second_stage build -> $(MAKE) -C kernel build -> $(GCC_PREFIX)ld -T link.txt -Map=$(DEBUG_DIR)/mapfile.txt -o $(BUILD_DIR)/base.img --oformat binary +> @mkdir $(GLOBAL_BUILD) 2> /dev/null; true +> @mkdir $(GLOBAL_BUILD)/boot 2> /dev/null; true +> @mkdir $(GLOBAL_BUILD)/second_stage 2> /dev/null; true +> @mkdir $(GLOBAL_BUILD)/kernel 2> /dev/null; true +> $(MAKE) LOCAL_BUILD=$(GLOBAL_BUILD)/boot -C boot build +> $(MAKE) LOCAL_BUILD=$(GLOBAL_BUILD)/second_stage -C second_stage build +> $(MAKE) LOCAL_BUILD=$(GLOBAL_BUILD)/kernel -C kernel build +> $(GCC_PREFIX)ld $(wildcard $(GLOBAL_BUILD)/*.o) -T link.txt -Map=$(DEBUG_DIR)/mapfile.txt -o $(GLOBAL_BUILD)/base.img --oformat binary +> @cp $(GLOBAL_BUILD)/base.img $(CURRENT_DIR)/build 2> /dev/null; true .PHONY: clear clear: -> @rm $(BUILD_DIR)/*.* 2> /dev/null; true -> @$(MAKE) -C boot clear 2> /dev/null; true -> @$(MAKE) -C second_stage clear 2> /dev/null; true -> @$(MAKE) -C kernel clear 2> /dev/null; true +> @rm -r $(CURRENT_DIR)/build/* 2> /dev/null; true .PHONY: run run:@@ -47,3 +49,7 @@
.PHONY: debug debug: > $(MAKE) DEBUG=1 build + +.PHONY: docs +docs: +> doxygen doxygen.cfg
M
second_stage/makefile
→
second_stage/makefile
@@ -1,24 +1,20 @@
.RECIPEPREFIX = > -S_OBJECTS = $(patsubst %.s,build/%.s.o,$(wildcard *.s)) -C_OBJECTS = $(patsubst %.c,build/%.c.o,$(wildcard *.c)) +S_OBJECTS = $(patsubst %.s,$(LOCAL_BUILD)/%.s.o,$(wildcard *.s)) +C_OBJECTS = $(patsubst %.c,$(LOCAL_BUILD)/%.c.o,$(wildcard *.c)) OBJECTS = $(S_OBJECTS) $(C_OBJECTS) .PHONY: build build: $(OBJECTS) -> $(GCC_PREFIX)ld $^ -r -T link.txt -o $(BUILD_DIR)/second_stage.o --oformat elf32-i386 - -.PHONY: clear -clear: -> @rm build/*.* 2> /dev/null; true +> $(GCC_PREFIX)ld $^ -r -T link.txt -o $(GLOBAL_BUILD)/second_stage.o --oformat elf32-i386 .PHONY: rebuild rebuild: > $(MAKE) clear > $(MAKE) build -build/%.s.o: %.s +$(LOCAL_BUILD)/%.s.o: %.s > $(GCC_PREFIX)as -o $@ $< -build/%.c.o: %.c $(wildcard *.h) +$(LOCAL_BUILD)/%.c.o: %.c $(wildcard *.h) > $(GCC_PREFIX)gcc -c -I$(INCLUDE_DIR) --prefix=$(GCC_PREFIX) $(GCC_OPTIONS) -o $@ $<