os/Makefile

79 lines
1.2 KiB
Makefile

ARCHDIR=arch/i686
CFLAGS?=
ASFLAGS?=
INCLUDEDIR=include
CFLAGS:=\
-O2 \
-std=gnu99 \
-ffreestanding \
-Wall -Wextra \
-I$(INCLUDEDIR) \
$(CFLAGS)
ASFLAGS:=\
-I$(INCLUDEDIR) \
-I$(ARCHDIR) \
$(ASFLAGS)
KERNEL_OBJS=\
kernel/kernel.o \
kernel/debugging.o \
kernel/elf.o \
LIB_OBJS=\
$(ARCHDIR)/bootstrap.o \
$(ARCHDIR)/tty.o \
$(ARCHDIR)/strlib.o \
$(ARCHDIR)/idt.o \
$(ARCHDIR)/interrupt.o \
$(ARCHDIR)/gdt.o \
OBJS=$(KERNEL_OBJS) $(LIB_OBJS)
LDFLAGS=$(OBJS) \
-ffreestanding \
-O2 \
-nostdlib \
-lgcc
.PHONY: all clean myos.iso
.SUFFIXES: .c .o .s
all: myos.iso
clean:
rm -f $(OBJS)
rm -f myos.kernel
rm -f myos.iso
rm -f isodir/boot/myos.kernel
$(ARCHDIR)/interrupt.o: CFLAGS += -mgeneral-regs-only
# kernel/elf.o: CFLAGS += -masm=intel
%.o : %.c
i686-elf-gcc -c $< -o $@ $(CFLAGS)
%.o : %.s
i686-elf-as $< -o $@ $(ASFLAGS)
myos.kernel: $(OBJS)
i686-elf-gcc -T $(ARCHDIR)/linker.ld -o myos.kernel $(LDFLAGS)
grub-file --is-x86-multiboot myos.kernel
myos.iso: myos.kernel
cp myos.kernel isodir/boot/myos.kernel
grub-mkrescue -o myos.iso isodir
debug: CFLAGS += -g -O0
debug: ASFLAGS += -g
debug: all
run: all
qemu-system-i386 myos.iso
run-debug: debug
qemu-system-i386 -S -gdb tcp::9000 myos.iso