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

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

CC = gcc
LD = ld
LD_RFLAG = -r

SEN_OBJS = ov6x20.o ov6x30.o ov7x10.o ov7x20.o ov76be.o
MODULES = ov511.o ov511_decomp.o ov518_decomp.o

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

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

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

# Make with i2c support (for TV tuners)
i2c: CFLAGS += -DOV511_ENABLE_I2C
i2c: all i2c-algo-usb.o

# Just make the MMX decompressor(s)
mmx: ov511_mmx_decomp.o

install:
	echo 'You must specify an appropriate install command for your kernel:'
	echo '   make install-2.4'
	echo '   make install-2.4rh  (for RedHat kernel 2.4.9-31 or later)'
	echo '   make install-2.5'

# Install on a 2.4 system
install-2.4: all
	$(MAKE) _do_install _INSTALL_PATH_="$(INSTALL_PATH_2.4)"

# Install on a RedHat 2.4.9-31 or later system
install-2.4rh: all
	$(MAKE) _do_install _INSTALL_PATH_="$(INSTALL_PATH_2.4RH)"

# Install on a 2.5 system
install-2.5: all
	$(MAKE) _do_install _INSTALL_PATH_="$(INSTALL_PATH_2.5)"

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

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

_do_install:
	install $(MODULES) $(_INSTALL_PATH_)
	/sbin/depmod -ae

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 $(SEN_OBJS)
	$(LD) $(LD_RFLAG) -o ov511.o ov511_temp.o $(SEN_OBJS)

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

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

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

i2c-algo-usb.o: i2c-algo-usb.c i2c-algo-usb.h
	$(CC) -c $(CFLAGS) i2c-algo-usb.c

