MAKEDEP		= $(MAKEFILE)
INCDIR		= ../inc
CFLAGS		= -Wall -I$(INCDIR) -nostdinc -fno-builtin
SCREEN		= screen/cls.o screen/kputchar.o screen/kprintf.o screen/scroll.o

PM_FUNCT	= pm_funct/setup_GDT_entry.o pm_funct/map_page.o pm_funct/map_pages.o \
		  pm_funct/load_gdtr.o pm_funct/setup_IDT_entry.o pm_funct/load_idtr.o \
		  pm_funct/update_cs.o pm_funct/read_cr3.o pm_funct/read_cr0.o \
		  pm_funct/write_cr0.o pm_funct/write_cr3.o pm_funct/load_ldtr.o \
		  pm_funct/load_tr.o pm_funct/init_page_dir.o pm_funct/read_cr2.o

INTERRUPT	= interrupt/exception_handler.o interrupt/wrapper.o interrupt/key_handler.o \
		  interrupt/timer_handler.o interrupt/gate_wrapper.o

IO		= io/out_portb.o io/setup_PIC.o io/in_portb.o io/setup_8253.o

MEM		= mem/lock_mem_page.o mem/lock_mem_pages.o mem/free_mem_page.o \
		  mem/free_mem_pages.o mem/find_free_pages.o

PROCESS		= process/scheduler.o process/add_task.o process/create_task.o \
		  process/run_task.o process/remove_task.o process/put_to_runable.o \
		  process/put_to_sleeping.o process/remove_from_runable.o \
		  process/remove_from_sleeping.o

SYS_CALLS	= sys_calls/sys_calls.o sys_calls/_sys_getpid.o sys_calls/_sys_exit.o \
		  sys_calls/_sys_putchar.o sys_calls/_sys_sleep.o

OBJS		= $(PM_FUNCT) $(SCREEN) $(INTERRUPT) $(IO) $(MEM) $(PROCESS) $(SYS_CALLS)


all:		info kernel_lib.o

clean:		
		@find -name '*.o' | xargs rm -f
		@find -name '*.[hc]~' | xargs rm -f
		@find -name '*.asm~' | xargs rm -f

screen/cls.o: screen/cls.c
screen/kputchar.o: screen/kputchar.c
screen/kprintf.o: screen/kprintf.c
screen/scroll.o: screen/scroll.c

pm_funct/setup_GDT_entry.o: pm_funct/setup_GDT_entry.c
pm_funct/map_page.o: pm_funct/map_page.c
pm_funct/map_pages.o: pm_funct/map_pages.c
pm_funct/load_gdtr.o: pm_funct/load_gdtr.asm
	nasm -o pm_funct/load_gdtr.o -f elf pm_funct/load_gdtr.asm
pm_funct/setup_IDT_entry.o: pm_funct/setup_IDT_entry.c
pm_funct/load_idtr.o: pm_funct/load_idtr.asm
	nasm -o pm_funct/load_idtr.o -f elf pm_funct/load_idtr.asm
pm_funct/update_cs.o: pm_funct/update_cs.asm
	nasm -o pm_funct/update_cs.o -f elf pm_funct/update_cs.asm
pm_funct/read_cr0.o: pm_funct/read_cr0.asm
	nasm -o pm_funct/read_cr0.o -f elf pm_funct/read_cr0.asm
pm_funct/read_cr3.o: pm_funct/read_cr3.asm
	nasm -o pm_funct/read_cr3.o -f elf pm_funct/read_cr3.asm
pm_funct/write_cr0.o: pm_funct/write_cr0.asm
	nasm -o pm_funct/write_cr0.o -f elf pm_funct/write_cr0.asm
pm_funct/write_cr3.o: pm_funct/write_cr3.asm
	nasm -o pm_funct/write_cr3.o -f elf pm_funct/write_cr3.asm
pm_funct/load_ldtr.o: pm_funct/load_ldtr.asm
	nasm -o pm_funct/load_ldtr.o -f elf pm_funct/load_ldtr.asm
pm_funct/load_tr.o: pm_funct/load_tr.asm
	nasm -o pm_funct/load_tr.o -f elf pm_funct/load_tr.asm
pm_funct/read_cr2.o: pm_funct/read_cr2.asm
	nasm -o pm_funct/read_cr2.o -f elf pm_funct/read_cr2.asm
pm_funct/init_page_dir.o: pm_funct/init_page_dir.c



interrupt/exception_handler.o: interrupt/exception_handler.c
interrupt/wrapper.o: interrupt/wrapper.asm
	nasm -o interrupt/wrapper.o -f elf interrupt/wrapper.asm
interrupt/key_handler.o: interrupt/key_handler.c
interrupt/timer_handler.o: interrupt/timer_handler.c
interrupt/gate_wrapper.o: interrupt/gate_wrapper.asm
	nasm -o interrupt/gate_wrapper.o -f elf interrupt/gate_wrapper.asm

io/out_portb.o: io/out_portb.asm
	nasm -o io/out_portb.o -f elf io/out_portb.asm
io/setup_PIC.o: io/setup_PIC.c
io/in_portb.o: io/in_portb.asm
	nasm -o io/in_portb.o -f elf io/in_portb.asm
io/setup_8253.o: io/setup_8253.c

mem/lock_mem_page.o: mem/lock_mem_page.c
mem/lock_mem_pages.o: mem/lock_mem_pages.c
mem/free_mem_page.o: mem/free_mem_page.c
mem/free_mem_pages.o: mem/free_mem_pages.c
mem/find_free_pages.o: mem/find_free_pages.c

process/scheduler.o: process/scheduler.c
process/add_task.o: process/add_task.c
process/create_task.o: process/create_task.c
process/run_task.o: process/run_task.asm
	nasm -o process/run_task.o -f elf process/run_task.asm
process/remove_task.o: process/remove_task.c
process/put_to_runable.o: process/put_to_runable.c
process/put_to_sleeping.o: process/put_to_sleeping.c
process/remove_from_runable.o: process/remove_from_runable.c
process/remove_from_sleeping.o: process/remove_from_sleeping.c

sys_calls/sys_calls.o: sys_calls/sys_calls.c
sys_calls/_sys_getpid.o: sys_calls/_sys_getpid.c
sys_calls/_sys_exit.o: sys_calls/_sys_exit.c
sys_calls/_sys_putchar.o: sys_calls/_sys_putchar.c
sys_calls/_sys_sleep.o: sys_calls/_sys_sleep.c

info: 
	@echo -e "\n\n ******* Making kernel library *********\n"


kernel_lib.o:	$(OBJS) $(MAKEDEP)
	ar rcs kernel_lib.o $(OBJS)