diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 76 |
1 files changed, 47 insertions, 29 deletions
@@ -1,37 +1,55 @@ -.DEFAULT_GOAL := macaroni.iso +CC := i686-elf-gcc +AS := nasm +QEMU := qemu-system-x86_64 +LIMINE ?= /opt/homebrew/share/limine -LIMINE_SHARE = /opt/homebrew/share/limine/ +CFLAGS := -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Iinclude -MMD -MP +ASFLAGS := -felf32 +LDFLAGS := -T linker.ld -ffreestanding -O0 -nostdlib +LDLIBS := -lgcc -BUILD_OUT = build -ASM = nasm -ASM_FLAGS = -felf32 -CFLAG = -std=c11 -ffreestanding -O0 -Wall -Wextra -CC = i686-elf-gcc -BINFLAG = -T linker.ld -ffreestanding -O0 -nostdlib +BUILD := build +OBJ := $(BUILD)/obj +ISO := $(BUILD)/iso +BIN := $(BUILD)/macaroni.bin +IMAGE := $(BUILD)/macaroni.iso -boot.o: src/boot.asm - ${ASM} ${ASM_FLAGS} src/boot.asm -o ${BUILD_OUT}/boot.o +SRCS := $(shell find src -name '*.c' -o -name '*.asm') +OBJS := $(SRCS:src/%=$(OBJ)/%.o) -kernel.o: src/kernel.c - ${CC} -c src/kernel.c -o ${BUILD_OUT}/kernel.o ${CFLAG} +LIMINE_FILES := limine-bios-cd.bin limine-bios.sys limine-uefi-cd.bin -macaroni.bin: boot.o kernel.o - ${CC} -o ${BUILD_OUT}/macaroni.bin ${BINFLAG} ${BUILD_OUT}/*.o +.PHONY: all bin demo clean +all: $(IMAGE) +bin: $(BIN) -macaroni.iso: macaroni.bin - mkdir -p ${BUILD_OUT}/iso - cp ${BUILD_OUT}/macaroni.bin ${BUILD_OUT}/iso/macaroni.bin - printf "timeout: 0\n/macaroni\n protocol: multiboot1\n kernel_path: boot():/macaroni.bin\n" > ${BUILD_OUT}/iso/limine.conf - cp ${LIMINE_SHARE}/limine-bios-cd.bin ${LIMINE_SHARE}/limine-bios.sys ${LIMINE_SHARE}/limine-uefi-cd.bin ${BUILD_OUT}/iso/ - xorriso -as mkisofs -R -r -J -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table \ - --efi-boot limine-uefi-cd.bin -efi-boot-part --efi-boot-image --protective-msdos-label \ - ${BUILD_OUT}/iso -o ${BUILD_OUT}/macaroni.iso - limine bios-install ${BUILD_OUT}/macaroni.iso +demo: $(IMAGE) + $(QEMU) -cdrom $< -.PHONY: demo -demo: macaroni.iso - qemu-system-x86_64 -cdrom ${BUILD_OUT}/macaroni.iso - -.PHONY: clean clean: - rm -rf ${BUILD_OUT}/** + rm -rf $(OBJ) $(ISO) $(BIN) $(IMAGE) + +$(OBJ)/%.c.o: src/%.c + @mkdir -p $(@D) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJ)/%.asm.o: src/%.asm + @mkdir -p $(@D) + $(AS) $(ASFLAGS) $< -o $@ + +$(BIN): $(OBJS) linker.ld + $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LDLIBS) + +$(ISO)/limine.conf: + @mkdir -p $(@D) + printf 'timeout: 0\n/macaroni\n protocol: multiboot1\n kernel_path: boot():/macaroni.bin\n' > $@ + +$(IMAGE): $(BIN) $(ISO)/limine.conf + cp $(BIN) $(addprefix $(LIMINE)/,$(LIMINE_FILES)) $(ISO)/ + xorriso -as mkisofs -R -r -J -b limine-bios-cd.bin -no-emul-boot \ + -boot-load-size 4 -boot-info-table --efi-boot limine-uefi-cd.bin \ + -efi-boot-part --efi-boot-image --protective-msdos-label \ + $(ISO) -o $@ + limine bios-install $@ + +-include $(OBJS:.o=.d) |
