summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authortrimill <trimill@trimillxyz.org>2024-01-26 22:29:49 -0500
committertrimill <trimill@trimillxyz.org>2024-01-26 22:29:49 -0500
commit4aad3cce1d22c39dfa9c0d360737fe6d92f38595 (patch)
tree9bbd6741e99f7fd1499c221748d7b74f567eb3eb /Makefile
parentCreated basic directory structure (diff)
downloadcorn-4aad3cce1d22c39dfa9c0d360737fe6d92f38595.tar.gz
corn-4aad3cce1d22c39dfa9c0d360737fe6d92f38595.tar.bz2
corn-4aad3cce1d22c39dfa9c0d360737fe6d92f38595.zip
added boilerplate (todo make it amd64)
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile45
1 files changed, 45 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index e69de29..9e081c5 100644
--- a/Makefile
+++ b/Makefile
@@ -0,0 +1,45 @@
+CC=cc
+LD=ld
+
+CFLAGS=-ffreestanding -g -Wall -Wextra -pedantic -lgcc
+
+SRC_DIR=src
+INCLUDE_DIR=include
+BUILD_DIR=build
+
+K_BIN_NAME=kernel.bin
+ISO_NAME=os_image.iso
+
+C_SRC=$(shell find $(SRC_DIR) -type f -name "*.c")
+C_OBJ=$(patsubst %.c,$(BUILD_DIR)/%.o,$(C_SRC))
+
+H_SRC=$(shell find $(SRC_DIR) -type f -name "*.h") $(shell find $(INCLUDE_DIR) -type f -name "*.h")
+
+A_SRC=$(shell find $(SRC_DIR) -type f -name "*.S")
+A_OBJ=$(patsubst %.S,$(BUILD_DIR)/%.S.o,$(A_SRC))
+
+.PHONY: all clean
+
+all: $(BUILD_DIR)/$(ISO_NAME)
+
+clean:
+ rm -rf $(BUILD_DIR)/*
+
+$(A_OBJ): $(BUILD_DIR)/%.S.o : %.S
+ @mkdir -p $(@D)
+ nasm $< -f elf64 -o $@
+
+$(C_OBJ): $(BUILD_DIR)/%.o : %.c
+ @mkdir -p $(@D)
+ $(CC) -c $(CFLAGS) -o $@ $<
+
+$(BUILD_DIR)/$(K_BIN_NAME): $(SRC_DIR)/arch/amd64/linker.ld $(A_OBJ) $(C_OBJ) $(H_SRC)
+ @mkdir -p $(@D)
+ $(LD) -nmagic -o $(BUILD_DIR)/$(K_BIN_NAME) -T $(SRC_DIR)/arch/amd64/linker.ld $(A_OBJ) $(C_OBJ)
+
+$(BUILD_DIR)/$(ISO_NAME): $(BUILD_DIR)/$(K_BIN_NAME) grub.cfg
+ @mkdir -p $(@D)
+ @mkdir -p $(BUILD_DIR)/iso/boot/grub
+ cp grub.cfg $(BUILD_DIR)/iso/boot/grub
+ cp $(BUILD_DIR)/$(K_BIN_NAME) $(BUILD_DIR)/iso/boot
+ grub-mkrescue -o $(BUILD_DIR)/$(ISO_NAME) $(BUILD_DIR)/iso