Kinl/Makefile

93 lines
2.5 KiB
Makefile

CROSS_PATH=$(HOME)/opt/cross/bin
LD=$(CROSS_PATH)/i686-elf-ld
CC=$(CROSS_PATH)/i686-elf-gcc
ASM=nasm
ECHO=echo -e
QEMU=qemu-system-i386
GDB=gdb
CFLAGS=-g -ffreestanding -falign-jumps -falign-functions -falign-labels \
-falign-loops -fstrength-reduce -fomit-frame-pointer \
-finline-functions -Wno-unused-function -fno-builtin -Werror \
-Wno-unused-label -Wno-cpp -Wno-unused-parameter -nostdlib \
-nostartfiles -nodefaultlibs -Wall -O0
INCLUDES=-I.
NO_SECTORS=100
OBJS=build/kernel.asm.o build/kernel.o build/idt/idt.asm.o build/idt/idt.o \
build/mm/mem.o build/io/io.asm.o build/string/string.o
# VESA Driver
OBJS+=build/drivers/vesa/vesa.o build/drivers/vesa/terminal.o \
build/drivers/vesa/fonts/vga.o
all: build/boot/boot.bin build/kernel.out
@dd if=build/boot/boot.bin > kinl.bin
@dd if=build/kernel.out >> kinl.bin
@dd if=/dev/zero bs=512 count=$(NO_SECTORS) >> kinl.bin
build/kernel.out: $(OBJS)
@$(LD) -g -relocatable $(OBJS) -o build/kernelfull.o
@$(CC) $(CFLAGS) -T linker.ld -o $@ -ffreestanding -O0 -nostdlib \
build/kernelfull.o
build/boot/boot.bin: boot/bios.asm
@$(ECHO) "ASM\t\t"$<
@$(ASM) -f bin $< -o $@
build/kernel.asm.o: sys/kernel.asm
@$(ECHO) "ASM\t\t"$<
@$(ASM) -f elf -g $< -o $@
build/kernel.o: sys/kernel.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
build/idt/idt.asm.o: sys/idt/idt.asm
@$(ECHO) "ASM\t\t"$<
@$(ASM) -f elf -g $< -o $@
build/idt/idt.o: sys/idt/idt.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
build/mm/mem.o: sys/mm/mem.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
build/io/io.asm.o: sys/io/io.asm
@$(ECHO) "ASM\t\t"$<
@$(ASM) -f elf -g $< -o $@
build/string/string.o: sys/string/string.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
# VESA Driver
build/drivers/vesa/vesa.o: drivers/vesa/vesa.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
build/drivers/vesa/terminal.o: drivers/vesa/terminal.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
build/drivers/vesa/fonts/vga.o: drivers/vesa/fonts/vga.c
@$(ECHO) "CC\t\t"$<
@$(CC) $(CFLAGS) $(INCLUDES) -std=gnu99 -c $< -o $@
gdb: all
@$(GDB) -ex "set confirm off" \
-ex "add-symbol-file build/kernelfull.o 0x0100000" \
-ex "target remote | qemu-system-i386 -hda kinl.bin -S -gdb stdio"
run: all
@$(QEMU) -hda kinl.bin
clean:
@rm -Rf build/boot/boot.bin build/kernel.out \
build/kernelfull.o $(OBJS)