# If cross compiling Linux module, modify following three lines
CROSS_COMPILE   =
KERN_HEADERS    = /usr/src/linux-2.4
CFLAGS_EXTRA    =
smp             = 0
BOOT            = 0
athlon          = 0
largemem        = 0
hugemem         = 0

# Object files to compile
CORE_OBJS       := mvSata.o mvStorageDev.o mvLog.o
IAL_OBJS        := mvLinuxIalLib.o mvLinuxIalHt.o mvLinuxIalOs.o mvIALCommon.o mvIALCommonUtils.o mvLinuxIalSmart.o
SAL_OBJS        := mvScsiAtaLayer.o
INCLUDE_DIRS    := -I../CoreDriver -I../ScsiAtaLayer -I../IALCommon
TARGET          := mv_sata.o

CC              = $(CROSS_COMPILE)gcc
LD              = $(CROSS_COMPILE)ld

ifeq ($(BOOT), 1)
CFLAGS_EXTRA += -D__BOOT_KERNEL_BOOT=1
endif


ifeq ($(smp), 1)
CFLAGS_EXTRA += -D__SMP__=1
CFLAGS_EXTRA += -D__BOOT_KERNEL_SMP=1
CFLAGS_EXTRA += -D__BOOT_KERNEL_UP=0
else
CFLAGS_EXTRA += -D__BOOT_KERNEL_SMP=0
ifeq ($(BOOT), 1)
CFLAGS_EXTRA += -D__BOOT_KERNEL_UP=0
else
CFLAGS_EXTRA += -D__BOOT_KERNEL_UP=1
endif
endif

ifneq ($(BOOT), 1)
ifeq ($(athlon), 1)
CFLAGS_EXTRA += -D__MODULE_KERNEL_athlon=1
else
CFLAGS_EXTRA += -D__MODULE_KERNEL_i686=1
endif
endif

ifeq ($(hugemem), 1)
CFLAGS_EXTRA += -D__module__hugemem
endif


# Standard flags for building modules
CFLAGS          = -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall
CFLAGS          += -I- -I$(KERN_HEADERS)/include -I$(KERN_HEADERS)/drivers/scsi -I.
CFLAGS          += $(shell [ -f $(KERN_HEADERS)/include/linux/modversions.h ] && \
			echo "-DMODVERSIONS -DEXPORT_SYMTAB -include \
			$(KERN_HEADERS)/include/linux/modversions.h")
CFLAGS          += $(CFLAGS_EXTRA)

all: linkMvOs $(CORE_OBJS) $(IAL_OBJS) $(SAL_OBJS)
	$(LD) -r -o $(TARGET) $(CORE_OBJS) $(IAL_OBJS) $(SAL_OBJS)

linkMvOs :      mvOsLinux.h
	\rm -f ../CoreDriver/mvOs.h
	cp -f mvOsLinux.h ../CoreDriver/mvOs.h

mvLinuxIalLib.o: mvLinuxIalLib.c mvLinuxIalLib.h mvLinuxIalHt.h \
	../CoreDriver/mvOs.h ../CoreDriver/mvSata.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvStorageDev.h ../IALCommon/mvIALCommon.h ../IALCommon/mvIALCommonUtils.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvLinuxIalLib.o mvLinuxIalLib.c

mvLinuxIalOs.o : mvLinuxIalOs.c ../CoreDriver/mvOs.h ../CoreDriver/mvLog.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvLinuxIalOs.o mvLinuxIalOs.c

mvLinuxIalHt.o: mvLinuxIalHt.c mvLinuxIalHt.h ../CoreDriver/mvOs.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvSata.h ../CoreDriver/mvStorageDev.h mvLinuxIalLib.h\
	 ../CoreDriver/mvRegs.h ../IALCommon/mvIALCommon.h mvLinuxIalSmart.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvLinuxIalHt.o mvLinuxIalHt.c

mvLinuxIalSmart.o: mvLinuxIalSmart.c mvLinuxIalSmart.h mvLinuxIalHt.h \
	../CoreDriver/mvOs.h ../CoreDriver/mvSata.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvStorageDev.h mvLinuxIalLib.h ../CoreDriver/mvRegs.h\
	../IALCommon/mvIALCommon.h ../IALCommon/mvIALCommonUtils.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvLinuxIalSmart.o mvLinuxIalSmart.c

mvIALCommon.o: ../IALCommon/mvIALCommon.c ../IALCommon/mvIALCommon.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvOs.h ../IALCommon/mvIALCommonUtils.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvIALCommon.o ../IALCommon/mvIALCommon.c

mvIALCommonUtils.o: ../IALCommon/mvIALCommon.c ../IALCommon/mvIALCommon.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvOs.h ../IALCommon/mvIALCommonUtils.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvIALCommonUtils.o ../IALCommon/mvIALCommonUtils.c

mvSata.o: ../CoreDriver/mvSata.c \
	$(KERN_HEADERS)/include/linux/modversions.h \
	../CoreDriver/mvOs.h ../CoreDriver/mvSata.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvStorageDev.h ../CoreDriver/mvRegs.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvSata.o ../CoreDriver/mvSata.c

mvStorageDev.o: ../CoreDriver/mvStorageDev.c \
	$(KERN_HEADERS)/include/linux/modversions.h \
	../CoreDriver/mvOs.h ../CoreDriver/mvSata.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvStorageDev.h ../CoreDriver/mvRegs.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvStorageDev.o ../CoreDriver/mvStorageDev.c

mvLog.o: ../CoreDriver/mvLog.c \
	$(KERN_HEADERS)/include/linux/modversions.h \
	../CoreDriver/mvOs.h ../CoreDriver/mvLog.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvLog.o ../CoreDriver/mvLog.c

mvScsiAtaLayer.o: ../ScsiAtaLayer/mvScsiAtaLayer.c \
	../ScsiAtaLayer/mvScsiAtaLayer.h ../CoreDriver/mvOs.h ../CoreDriver/mvLog.h\
	../CoreDriver/mvSata.h ../CoreDriver/mvStorageDev.h ../IALCommon/mvIALCommonUtils.h
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) -c -o mvScsiAtaLayer.o ../ScsiAtaLayer/mvScsiAtaLayer.c
clean:
	rm -fr *~ core *.o

