KERNEL_SRC      = /usr/src/linux-2.6
# 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
PWD             := $(shell pwd)
INCLUDE_DIRS    := -I$(KERNEL_SRC)/drivers/scsi
TARGET          := mv_sata.o
CFLAGS          += -DDEBUG=1 $(INCLUDE_DIRS) $(CFLAGS_EXTRA) -DLINUX

# Standard flags for building modules
clean-files := *.o
obj-m := $(TARGET)
mv_sata-objs := $(IAL_OBJS) $(CORE_OBJS) $(SAL_OBJS)
mv_sata-flags-m += -DDEBUG=1 $(INCLUDE_DIRS) $(CFLAGS_EXTRA)

        
all: modules

modules:        
ifeq ($(FIRST_PASS), 1) 
	rm -f $(PWD)/mvOs.h $(PWD)/mvLog.h $(PWD)/mvLog.c $(PWD)/mvSata.h $(PWD)/mvSata.c $(PWD)/mvRegs.h
	rm -f $(PWD)/mvStorageDev.h $(PWD)/mvStorageDev.c
	rm -f $(PWD)/mvIALCommon.h $(PWD)/mvIALCommon.c $(PWD)/mvIALCommonUtils.h $(PWD)/mvIALCommonUtils.c             
	rm -f $(PWD)/mvScsiAtaLayer.h $(PWD)/mvScsiAtaLayer.c   
	ln -s $(PWD)/mvOsLinux.h $(PWD)/mvOs.h  
	ln -s $(PWD)/../CoreDriver/mvRegs.h $(PWD)/mvRegs.h                     
	ln -s $(PWD)/../CoreDriver/mvLog.h $(PWD)/mvLog.h
	ln -s $(PWD)/../CoreDriver/mvLog.c $(PWD)/mvLog.c
	ln -s $(PWD)/../CoreDriver/mvSata.h $(PWD)/mvSata.h
	ln -s $(PWD)/../CoreDriver/mvSata.c $(PWD)/mvSata.c     
	ln -s $(PWD)/../CoreDriver/mvStorageDev.h $(PWD)/mvStorageDev.h
	ln -s $(PWD)/../CoreDriver/mvStorageDev.c $(PWD)/mvStorageDev.c 
	ln -s $(PWD)/../IALCommon/mvIALCommon.h $(PWD)/mvIALCommon.h    
	ln -s $(PWD)/../IALCommon/mvIALCommon.c $(PWD)/mvIALCommon.c            
	ln -s $(PWD)/../IALCommon/mvIALCommonUtils.h $(PWD)/mvIALCommonUtils.h
	ln -s $(PWD)/../IALCommon/mvIALCommonUtils.c $(PWD)/mvIALCommonUtils.c
	ln -s $(PWD)/../ScsiAtaLayer/mvScsiAtaLayer.h $(PWD)/mvScsiAtaLayer.h
	ln -s $(PWD)/../ScsiAtaLayer/mvScsiAtaLayer.c $(PWD)/mvScsiAtaLayer.c                   
endif
	$(MAKE) -C $(KERNEL_SRC) M=$(PWD) SUBDIRS=$(PWD)
ifeq ($(FIRST_PASS), 1)         
	rm -f $(PWD)/mvOs.h $(PWD)/mvLog.h $(PWD)/mvLog.c $(PWD)/mvSata.h $(PWD)/mvSata.c $(PWD)/mvRegs.h
	rm -f $(PWD)/mvStorageDev.h $(PWD)/mvStorageDev.c
	rm -f $(PWD)/mvIALCommon.h $(PWD)/mvIALCommon.c $(PWD)/mvIALCommonUtils.h $(PWD)/mvIALCommonUtils.c             
	rm -f $(PWD)/mvScsiAtaLayer.h $(PWD)/mvScsiAtaLayer.c   
endif   
clean:  
	rm -f *.o *.ko .*.cmd .*.o.flags *.mod.c
                
mvLinuxIalLib.o: mvLinuxIalLib.c mvLinuxIalLib.h mvLinuxIalHt.h \
	mvOs.h mvSata.h mvLog.h\
	mvStorageDev.h mvIALCommon.h mvIALCommonUtils.h

mvLinuxIalOs.o : mvLinuxIalOs.c ../CoreDriver/mvOs.h ../CoreDriver/mvLog.h

mvLinuxIalHt.o: mvLinuxIalHt.c mvLinuxIalHt.h mvOs.h mvLog.h\
	mvSata.h mvStorageDev.h mvLinuxIalLib.h\
	mvRegs.h mvIALCommon.ssh mvLinuxIalSmart.h

mvLinuxIalSmart.o: mvLinuxIalSmart.c mvLinuxIalSmart.h mvLinuxIalHt.h \
	mvOs.h mvSata.h mvLog.h\
	mvStorageDev.h mvLinuxIalLib.h mvRegs.h\
	mvIALCommon.h mvIALCommonUtils.h

mvIALCommon.o: mvIALCommon.c mvIALCommon.h mvLog.h\
	mvOs.h mvIALCommonUtils.h

mvIALCommonUtils.o: mvIALCommon.c mvIALCommon.h mvLog.h\
	mvOs.h mvIALCommonUtils.h

mvSata.o: CoreDriver/mvSata.c \
	mvOs.h mvSata.h mvLog.h\
	mvStorageDev.h mvRegs.h
        
mvStorageDev.o: mvStorageDev.c \
	mvOs.h mvSata.h mvLog.h\
	mvStorageDev.h mvRegs.h

mvLog.o: mvLog.c \
	mvOs.h mvLog.h

mvScsiAtaLayer.o: mvScsiAtaLayer.c \
	mvScsiAtaLayer.h mvOs.h mvLog.h\
	mvSata.h mvStorageDev.h mvIALCommonUtils.h


