#################################### OPTIONS ##################################
# Change this to /usr/include if you get header file errors
INCLUDEDIR = /lib/modules/`uname -r`/build/include

ACFILE = $(INCLUDEDIR)/linux/autoconf.h

# For 2.5; I don't know how to handle this properly yet
# INCLUDEDIR += -I /lib/modules/`uname -r`/build/arch/i386/mach-generic/

CFLAGS = -D__KERNEL__ -DMODULE -DOUTSIDE_KERNEL -O2 -Wall -Wstrict-prototypes \
	-fomit-frame-pointer -I$(INCLUDEDIR)

# Detect modversions support
ifneq ($(strip $(shell grep 'define CONFIG_MODVERSIONS 1' $(ACFILE))),)
CFLAGS += -DMODVERSIONS -include $(INCLUDEDIR)/linux/modversions.h
endif

CC = gcc
LD = ld
LD_RFLAG = -r

INT_OBJS = ov6x20.o ov6x30.o ov7x10.o ov7x20.o ov76be.o ovsensor.o
MODULES = ov511.o ovfx2.o saa7111-new.o

INSTALL_PATH_2.4   = /lib/modules/`uname -r`/kernel/drivers/usb/
INSTALL_PATH_2.5   = /lib/modules/`uname -r`/kernel/drivers/usb/media/

# Enable OV511 Decompression
CFLAGS += -DCONFIG_OV511_DECOMP
COMP_OBJS += ov511_decomp.o

# Enable OV518 Decompression
CFLAGS += -DCONFIG_OV518_DECOMP
COMP_OBJS += ov518_decomp.o

#################################### TARGETS ##################################

# Make with standard options for cameras and video capture.
all: $(MODULES)

install: all
	./do_install.sh $(MODULES)

clean:
	rm -f *.o *~ core *.i

#################################### RULES ####################################

ovsensor.o: ovsensor.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ovsensor.c

ov6x20.o: ov6x20.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ov6x20.c

ov6x30.o: ov6x30.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ov6x30.c

ov7x10.o: ov7x10.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ov7x10.c

ov7x20.o: ov7x20.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ov7x20.c

ov76be.o: ov76be.c ovsensor.h ov511.h
	$(CC) -c $(CFLAGS) ov76be.c

ov511_temp.o: ov511.c ov511.h ovsensor.h
	$(CC) -c $(CFLAGS) -o ov511_temp.o ov511.c

ov511.o: ov511_temp.o $(INT_OBJS) $(COMP_OBJS)
	$(LD) $(LD_RFLAG) -o ov511.o ov511_temp.o $(INT_OBJS) $(COMP_OBJS)

ovfx2_temp.o: ovfx2.c ov511.h ovsensor.h 
	$(CC) -c $(CFLAGS) -o ovfx2_temp.o ovfx2.c

ovfx2.o: ovfx2_temp.o $(INT_OBJS)
	$(LD) $(LD_RFLAG) -o ovfx2.o ovfx2_temp.o $(INT_OBJS)

ov511_decomp.o: ov511_decomp.c ov511.h
	$(CC) -c $(CFLAGS) ov511_decomp.c

ov518_decomp.o: ov518_decomp.c ov511.h
	$(CC) -c $(CFLAGS) ov518_decomp.c

saa7111-new.o: saa7111-new.c
	$(CC) -c $(CFLAGS) saa7111-new.c
