70 lines
1.9 KiB
Makefile
70 lines
1.9 KiB
Makefile
KERNEL := hhhos.elf
|
|
ISO := hhhos.iso
|
|
|
|
CC = x86_64-elf-gcc
|
|
NASM = nasm
|
|
|
|
# User controllable CFLAGS.
|
|
CFLAGS = -Wall -Wextra -O2 -pipe
|
|
NASMFLAGS = -felf64
|
|
|
|
# Internal link flags that should not be changed by the user.
|
|
INTERNALLDFLAGS := \
|
|
-fno-pic -fpie \
|
|
-Wl,-static,-pie,--no-dynamic-linker,-ztext \
|
|
-static-pie \
|
|
-nostdlib \
|
|
-Tlinker.ld \
|
|
-z max-page-size=0x1000
|
|
|
|
# Internal C flags that should not be changed by the user.
|
|
INTERNALCFLAGS := \
|
|
-Iinclude \
|
|
-std=gnu17 \
|
|
-ffreestanding \
|
|
-fno-stack-protector \
|
|
-fno-pic -fpie \
|
|
-mno-80387 \
|
|
-mno-mmx \
|
|
-mno-3dnow \
|
|
-mno-sse \
|
|
-mno-sse2 \
|
|
-mno-red-zone
|
|
|
|
# Use find to glob all *.c files in the directory and extract the object names.
|
|
CFILES := $(shell find ./arch -type f -name '*.c')
|
|
OBJ := $(CFILES:.c=.o)
|
|
OBJ += font.o
|
|
|
|
# Targets that do not actually build a file of the same name.
|
|
.PHONY: all clean run
|
|
|
|
run: $(ISO)
|
|
qemu-system-x86_64 -cdrom $(ISO) -m 128M -serial file:serial.log \
|
|
-drive id=disk,file=disk.img,if=none,format=raw \
|
|
-device ide-hd,drive=disk,bus=ide.0
|
|
|
|
$(ISO): $(KERNEL)
|
|
mkdir -p sysroot
|
|
cp -v $(KERNEL) limine.cfg limine/limine.sys limine/limine-cd.bin limine/limine-eltorito-efi.bin sysroot/
|
|
xorriso -as mkisofs -b limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table \
|
|
--efi-boot limine-eltorito-efi.bin -efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
sysroot -o $(ISO)
|
|
|
|
# Default target.
|
|
all: $(KERNEL)
|
|
|
|
# Link rules for the final kernel executable.
|
|
$(KERNEL): $(OBJ)
|
|
$(CC) $(OBJ) -o $@ $(INTERNALLDFLAGS)
|
|
|
|
# Compilation rules for *.c files.
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) $(INTERNALCFLAGS) -c $< -o $@
|
|
|
|
font.o:
|
|
objcopy -O elf64-x86-64 -B i386 -I binary font.psfu font.o
|
|
|
|
# Remove object files and the final executable.
|
|
clean:
|
|
rm -rf $(KERNEL) $(OBJ) $(ISO)
|