From a5f0c5c71a5e50ddf418d58d8a3115bbcaca0538 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Sun, 1 May 2022 15:22:15 +0200 Subject: Added Makefile & aleksa-toolchain setup.sh --- include/00.build/Makefile | 98 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 include/00.build/Makefile (limited to 'include/00.build/Makefile') diff --git a/include/00.build/Makefile b/include/00.build/Makefile new file mode 100644 index 0000000..03b5c11 --- /dev/null +++ b/include/00.build/Makefile @@ -0,0 +1,98 @@ +# HOST ARCH +ARCH=i686-aleksa- + + +# GCC CROSS COMPILER +export CC=$(ARCH)gcc +export AS=$(ARCH)as + +WARNINGS := -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align \ + -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations \ + -Wredundant-decls -Wnested-externs -Winline -Wno-long-long \ + -Wconversion -Wstrict-prototypes + +export CFLAGS=-std=gnu99 -O3 $(WARNINGS) -ffreestanding -fstack-protector-all + + +# TOOLS +export MKDIR=mkdir -p +export RM=rm -rf +export CP=cp -r +QEMU=qemu-system-i386 + + + +# DIRS + +## SOURCE +SOURCE_DIR=src + +## BUILD +ISO_DIR=isodir +BUILD_DIR=${CURDIR}/build +export AS_OBJECT_DIR=$(BUILD_DIR)/as +export C_OBJECT_DIR=$(BUILD_DIR)/c + +## GCC USR +GCC_USR_DIR=$(shell $(CC) -print-file-name=) + + + +# TARGET +TARGET=myos +BINARY=$(BUILD_DIR)/$(TARGET).bin +ISO=$(TARGET).iso + + + +# OBJECTS + +## AS OBJECTS +AS_OBJ=boot.o ioport.o gdt.o idt.o irq.o paging.o +export AS_OBJECTS=$(patsubst %,$(AS_OBJECT_DIR)/%,$(AS_OBJ)) + +## C OBJECTS +C_OBJ=gdt.o heap.o idt.o kernel.o keyboard.o keymap.o stdio.o string.o tty.o vga.o irq_handler.o stack_protector.o timer.o paging.o +export C_OBJECTS=$(patsubst %,$(C_OBJECT_DIR)/%,$(C_OBJ)) + +## ALL OBJECTS IN ORDER +OBJ=$(GCC_USR_DIR)crti.o $(GCC_USR_DIR)crtbegin.o $(AS_OBJECTS) $(C_OBJECTS) $(GCC_USR_DIR)crtend.o $(GCC_USR_DIR)crtn.o + + + +# OTHER FILES +LINKER=$(SOURCE_DIR)/linker.ld +GRUB.CFG=$(SOURCE_DIR)/grub.cfg + + +# RULES +.PHONY: all compile run run-iso clean install_headers +all: compile + +$(BINARY): $(OBJ) + $(CC) -T $(LINKER) -o $(BINARY) $(CFLAGS) -nostdlib -lgcc $(OBJ) + +install_headers: + ./scripts/install_headers.sh + +compile: + $(MAKE) install_headers + @$(MAKE) --directory $(SOURCE_DIR) + $(MAKE) $(BINARY) + +$(ISO): $(BINARY) + grub-file --is-x86-multiboot $(BINARY) + $(MKDIR) $(ISO_DIR)/boot/grub + $(CP) $(BINARY) $(ISO_DIR)/boot/$(TARGET).bin + $(CP) $(GRUB.CFG) $(ISO_DIR)/boot/grub/grub.cfg + grub-mkrescue -o $(ISO) $(ISO_DIR) + +run: compile + $(QEMU) -kernel $(BINARY) $(QEMU_DEBUG) + +run-iso: compile + $(MAKE) $(ISO) + $(QEMU) -cdrom $(ISO) + +clean: + $(RM) $(BUILD_DIR) $(ISO_DIR) $(ISO) -- cgit v1.2.3