# TODO: hacer algo mejor, esto es un absoluto desastre! (al menos que tenga dependencias)

MCOPY=mcopy

KERNEL_SRC=kernel.asm
KERNEL_OBJ=kernel.o
KERNEL_BIN=kernel.bin

DEPEND=kernel.asm macrosmodoreal.mac gdt.c pic.c idt.c isr.asm tss.c mmu.c Makefile gdt.h pic.h idt.h isr.h tss.h mmu.h klib.h loader.h kbd.c kbd.h stdlib.h
OBJ= $(KERNEL_OBJ) klib.o gdt.o pic.o idt.o isr.o mmu.o tss.o loader.o consola.o kmain.o kbd.o stdlib.o pak.o
DISK_IMG=diskette.img

CFLAGS=-m32 -g -ggdb -std=c99 -Wall -Werror -O0 \
  -fno-zero-initialized-in-bss -fno-stack-protector -ffreestanding

TASKS=tareas.pak
TASKSSIZE=32K


OBJDUMP=objdump
OBJCOPY=objcopy
CC=gcc
NASM=nasm
NASMFLAGS=-felf32
LD=ld               
LDFLAGS=-static -m elf_i386 --oformat binary -b elf32-i386 -e start -Ttext 0x1200

#REMOVE
TASKCFLAGS=-m32 -g -ggdb -std=c99 -Wall -O0 \
  -fno-zero-initialized-in-bss -fno-stack-protector -ffreestanding -D__userspace
TASKSBINS=t_shell.tsk t_idle.tsk t_fib.tsk t_print.tsk t_guess.tsk t_randgen.tsk
LDTASKFLAGS=-static -m elf_i386 --oformat binary -b elf32-i386 -e start -Ttext=0 -Tdata=0x1000
#REMOVE END

.PHONY=clean cleantasks all image tasks

all: clean cleantasks tasks image

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $^

%.o: %.asm
	$(NASM) $(NASMFLAGS) -o $@ $^

kernel.bin: $(OBJ)
	@echo 'Linkeando el kernel...'
	$(LD) $(LDFLAGS) -o $@ $^
	@echo ''
	mv kernel.bin kernel.bin.tmp
	dd if=/dev/zero bs=1 count=77312 of=kernel.bin status=noxfer
	dd if=kernel.bin.tmp bs=1 count=60928 of=kernel.bin conv=notrunc status=noxfer
	dd if=$(TASKS) bs=1 count=$(TASKSSIZE) seek=60928 conv=notrunc of=kernel.bin status=noxfer
	rm -f kernel.bin.tmp


diskette.img:
	bunzip2 -k diskette.img.bz2

image: kernel.bin $(DEPEND) diskette.img
	@echo 'Copiando el $(KERNEL_BIN) a la imagen de diskette\n'
	$(MCOPY) -o -i $(DISK_IMG) $(KERNEL_BIN) ::/ 

clean:
	rm -f *.bin
	rm -f *.o

#REMOVE

%.tskobj: %.c
	$(CC) $(TASKCFLAGS) -c -o $@ $^ 

%.tsk: %.tskobj syscalls.o stdlib.o
	$(LD) $(LDTASKFLAGS) -o $@ $^

pak_create: pak_create.cpp
	$(CXX) -Wall -m32 -o $@ $^

tasks: $(TASKSBINS) pak_create
	./pak_create $(TASKS) $(TASKSBINS)

cleantasks:
	rm -f *.tsk
	rm -f *.tskobj
#REMOVE END
