aboutsummaryrefslogtreecommitdiff
path: root/include/00.build/Makefile
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2022-05-01 15:22:15 +0200
committerAleksa Vučković <aleksav013@gmail.com>2022-05-01 15:22:15 +0200
commita5f0c5c71a5e50ddf418d58d8a3115bbcaca0538 (patch)
treed681e6f882ec5a63da7fab987f0641fc2287b6bf /include/00.build/Makefile
parent149dac1314e474524af0494e4c74536b7bd76f9d (diff)
Added Makefile & aleksa-toolchain setup.sh
Diffstat (limited to 'include/00.build/Makefile')
-rw-r--r--include/00.build/Makefile98
1 files changed, 98 insertions, 0 deletions
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)