CC = gcc 
CXX = g++
INCLUDES=
ccflags-y = -mfloat-abi=soft -g -Wall $(INCLUDES)
LDFLAGS = -g
LDLIBS = -lm

ifneq (${KERNELRELEASE},)

# KERNELRELEASE defined: we are being compiled as part of the Kernel
        obj-m := vga_ball.o

else

# We are being compiled as a module: use the Kernel build system

	KERNEL_SOURCE := /usr/src/linux-headers-$(shell uname -r)
        PWD := $(shell pwd)

default: module hello

module:
	${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

main: sift_utils.o im_utils.o vga_ball.o vga_ball_utils.o keypoints.o lin_alg.o descriptors.o main.o
	$(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS)

main.o:  main.c
	$(CC) $(CFLAGS) -c $^ -o $@
	
hello: hello.o vga_ball.o
hello.o: hello.c

vga_ball: vga_ball.o vga_ball.h
vga_ball.o: vga_ball.h vga_ball.c

sift_utils.o: sift_utils.h sift_utils.c
im_utils.o: im_utils.h im_utils.c
vga_ball_utils.o: vga_ball_utils.h vga_ball_utils.c
keypoints.o: keypoints.h keypoints.c
lin_alg.o: lin_alg.h lin_alg.c
descriptors.o: descriptors.h descriptors.c

.PHONY: clean_main
clean_main:
	rm *.o main

.PHONY: run
run: clean_main main
	./main

clean:
	${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
	${RM} hello

TARFILES = Makefile README vga_ball.h vga_ball.c hello.c
TARFILE = lab3-sw.tar.gz
.PHONY : tar
tar : $(TARFILE)

$(TARFILE) : $(TARFILES)
	tar zcfC $(TARFILE) .. $(TARFILES:%=lab3-sw/%)

endif 
