include Makefile.inc

all:	kernel.img kernel.dis

#	kernel7.img kernel7l.img kernel7.dis

###

kernel.img:	kernel.elf
	$(CROSS)objcopy kernel.elf -O binary kernel.img

kernel7.img:	kernel7.elf
	$(CROSS)objcopy kernel7.elf -O binary kernel7.img

kernel7l.img:	kernel7.elf
	$(CROSS)objcopy kernel7.elf -O binary kernel7l.img

###

kernel.elf:	kernel_main.o \
		boot.o interrupts.o \
		console_io.o device_tree.o gic-400.o gpio.o \
		hardware_detect.o led.o memcpy.o printk.o \
		serial.o syscalls.o string.o timer.o \
		./user/shell.o ./user/vlibc.o
	$(CROSS)ld $(LFLAGS) \
		kernel_main.o \
		boot.o interrupts.o \
		console_io.o device_tree.o gic-400.o gpio.o \
		hardware_detect.o led.o memcpy.o printk.o \
		serial.o string.o syscalls.o timer.o \
		./user/shell.o ./user/vlibc.o \
		-Map kernel.map -o kernel.elf

###

kernel7.elf:	kernel_main.o \
		boot.o interrupts.o \
		console_io.o device_tree.o gic-400.o gpio.o \
		hardware_detect.o led.o memcpy.o printk.o \
		serial.o syscalls.o string.o timer.o \
		./user/shell.o ./user/vlibc.o
	$(CROSS)ld $(LFLAGS) \
		kernel_main.o \
		boot.o interrupts.o \
		console_io.o device_tree.o gic-400.o gpio.o \
		hardware_detect.o led.o memcpy.o printk.o \
		serial.o string.o syscalls.o timer.o \
		./user/shell.o ./user/vlibc.o \
		-Map kernel7.map -o kernel7.elf



kernel_main.o:	kernel_main.c
	$(CROSS)$(CC) $(CFLAGS) -o kernel_main.o -c kernel_main.c

user/shell.o:	force_look
	cd user && make

user/vlibc.o:	force_look
	cd user && make


atags.o:	atags.c atags.h
	$(CROSS)$(CC) $(CFLAGS) -o atags.o -c atags.c

console_io.o:	console_io.c console_io.h
	$(CROSS)$(CC) $(CFLAGS) -o console_io.o -c console_io.c

device_tree.o:	device_tree.c device_tree.h
	$(CROSS)$(CC) $(CFLAGS) -o device_tree.o -c device_tree.c

gic-400.o:	gic-400.c gic-400.h
	$(CROSS)$(CC) $(CFLAGS) -o gic-400.o -c gic-400.c

gpio.o:	gpio.c gpio.h
	$(CROSS)$(CC) $(CFLAGS) -o gpio.o -c gpio.c

hardware_detect.o:	hardware_detect.c hardware_detect.h
	$(CROSS)$(CC) $(CFLAGS) -o hardware_detect.o -c hardware_detect.c

interrupts.o:	interrupts.c
	$(CROSS)$(CC) $(CFLAGS) -o interrupts.o -c interrupts.c

led.o:	led.c led.h
	$(CROSS)$(CC) $(CFLAGS) -o led.o -c led.c

memcpy.o:	memcpy.c memcpy.h
	$(CROSS)$(CC) $(CFLAGS) -o memcpy.o -c memcpy.c

printk.o:	printk.c printk.h
	$(CROSS)$(CC) $(CFLAGS) -o printk.o -c printk.c

serial.o:	serial.c bcm2835_periph.h serial.h
	$(CROSS)$(CC) $(CFLAGS) -o serial.o -c serial.c

string.o:	string.c string.h
	$(CROSS)$(CC) $(CFLAGS) -o string.o -c string.c

syscalls.o:	syscalls.c syscalls.h
	$(CROSS)$(CC) $(CFLAGS) -o syscalls.o -c syscalls.c

timer.o:	timer.c timer.h
	$(CROSS)$(CC) $(CFLAGS) -o timer.o -c timer.c

boot.o:	boot.s
	$(CROSS)as $(ASFLAGS) -o boot.o boot.s
###

kernel.dis:	kernel.elf
	$(CROSS)objdump --disassemble-all kernel.elf > kernel.dis

kernel7.dis:	kernel7.elf
	$(CROSS)objdump --disassemble-all kernel7.elf > kernel7.dis

###

clean:
	rm -f *~ *.o *.map *.elf kernel.img kernel7.img kernel7l.img *.dis
	cd user && make clean

submit:
	tar -czvf hw5_submit.tar.gz *.c *.h *.s *.ld Makefile Makefile.inc README user/*.c user/*.h user/Makefile


force_look:
	true
