diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-06-08 15:03:33 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-06-08 15:03:33 -0400 |
| commit | a4eef728064cfc3f14396d0ad91f105f12ef32ea (patch) | |
| tree | fc4a4d2f6525705fc4e8ff3c262abcbde0ae6d19 /makefile | |
Initial Commit
Diffstat (limited to 'makefile')
| -rw-r--r-- | makefile | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/makefile b/makefile new file mode 100644 index 0000000..fef52a2 --- /dev/null +++ b/makefile @@ -0,0 +1,85 @@ +BIN_DIR = bin +BIN = $(BIN_DIR)/kernel.bin +ISO = image.iso +ISO_ROOT = iso_root +SRC_DIR = source +SOURCES = $(SRC_DIR)/main.c \ + $(SRC_DIR)/LimineRequests.c \ + $(SRC_DIR)/memory.c +CFILES = $(filter %.c,$(SOURCES)) +ASFILES = $(filter %.S,$(SOURCES)) +NASMFILES = $(filter %.asm,$(SOURCES)) +OBJ_DIR = objects +OBJECTS = $(addprefix $(OBJ_DIR)/,$(notdir $(CFILES:.c=.c.o)) \ + $(notdir $(ASFILES:.S=.S.o)) \ + $(notdir $(NASMFILES:.asm=.asm.o))) +CC = gcc +CFLAGS = -Wall \ + -Wextra \ + -Werror \ + -Wpedantic \ + -std=gnu23 \ + -ffreestanding \ + -fno-stack-protector \ + -fno-stack-check \ + -fno-PIC \ + -m64 \ + -march=x86-64 \ + -mno-80387 \ + -mno-mmx \ + -mno-sse \ + -mno-sse2 \ + -mno-red-zone \ + -I src \ + -DLIMINE_API_REVISION=3 \ + -MMD \ + -MP \ + -mcmodel=kernel +LDFLAGS = -Wl,-m,elf_x86_64 \ + -Wl,--build-id=none \ + -nostdlib \ + -static \ + -z max-page-size=0x1000 \ + -T linker.ld +NASMFLAGS = -Wall -f elf64 + +.PHONY: all clean run +all: $(ISO) + + +$(BIN_DIR) $(OBJ_DIR) $(ISO_ROOT): + mkdir $@ + +$(BIN): linker.ld $(OBJECTS) | $(BIN_DIR) + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@ + +$(OBJ_DIR)/%.c.o: $(SRC_DIR)/%.c | $(OBJ_DIR) + $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + +$(OBJ_DIR)/%.S.o: $(SRC_DIR)/%.S | $(OBJ_DIR) + $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + +$(OBJ_DIR)/%.asm.o: $(SRC_DIR)/%.asm | $(OBJ_DIR) + nasm $(NASMFLAGS) $< -o $@ + +$(ISO): $(BIN) | $(ISO_ROOT) + mkdir -p $(ISO_ROOT)/boot/limine + cp -v $(BIN) $(ISO_ROOT)/boot/ + cp -v limine.conf limine/limine-bios.sys limine/limine-bios-cd.bin \ + limine/limine-uefi-cd.bin $(ISO_ROOT)/boot/limine/ + mkdir -p iso_root/EFI/BOOT + cp -v limine/BOOTX64.EFI iso_root/EFI/BOOT/ + cp -v limine/BOOTIA32.EFI iso_root/EFI/BOOT/ + xorriso -as mkisofs -R -r -J -b boot/limine/limine-bios-cd.bin \ + -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \ + -apm-block-size 2048 --efi-boot boot/limine/limine-uefi-cd.bin \ + -efi-boot-part --efi-boot-image --protective-msdos-label \ + iso_root -o $@ + ./limine/limine bios-install $@ + +run: $(ISO) + qemu-system-x86_64 -hda $(ISO) + +clean: + rm -rf $(BIN_DIR) $(OBJ_DIR) $(ISO) $(ISO_ROOT) + |
