#
# Linux 2.6 Makefile
#

ifeq (,$(KERNELVERSION))
    KERNELVERSION := $(shell uname -r)
endif

# Support the 8134x controller on the local bus
LOCAL_BUS_SUPPORT := $(CONFIG_ISC813XX_LBUS)

# Support the 8134x based PCI HBAs
PCI_BUS_SUPPORT   := $(CONFIG_ISC813XX_PCI)

#Enable Production Ioctls
ISC813XX_IOCTL := y
#Test Ioctl support
TEST_IOCTL := n
MEM_TRACE := n
SLI_LOGGER := n

DEBUG := n
POLLED_IOCB := n

ifeq ($(obj), )
	obj := ./
endif

#The Linux source tree directory
#KSRC := /usr/src/linux-2.6

# trace memory for leaks (lots of debug)
ifeq (y,$(MEM_TRACE))
EXTRA_CFLAGS += -DMEM_TRACE
endif

# trace memory for leaks (lots of debug)
ifeq (y,$(SLI_LOGGER))
EXTRA_CFLAGS += -DSLI_LOGGER
endif


# To compile driver of ISC8134x, with support for Local Internal Bus,define LOCAL_BUS_SUPPORT Flag.
ifeq (y,$(LOCAL_BUS_SUPPORT))
EXTRA_CFLAGS += -DLOCAL_BUS_SUPPORT
endif

# To compile driver of ISC8134x, with support for PCI Bus,define PCI_BUS_SUPPORT Flag.
ifeq (y,$(PCI_BUS_SUPPORT))
EXTRA_CFLAGS += -DPCI_BUS_SUPPORT
endif

# to build free build, remove -DDBG flag
ifeq (y,$(DEBUG))
EXTRA_CFLAGS += -DDBG
endif	  

#Enable Polled mode
ifeq (y,$(POLLED_IOCB))
EXTRA_CFLAGS += -DPOLLED_IOCB
endif

ifeq (y,$(TEST_IOCTL))
ISC813XX_IOCTL := y
EXTRA_CFLAGS += -g -DLINUX -DTEST_IOCTL -DLITTLE_ENDIAN_HW $(INCLUDEDIR)
INCLUDEDIR=-I$(obj)/../common -I$(obj)/../test_ioctl -Idrivers/scsi 
else
EXTRA_CFLAGS += -DLINUX -DLITTLE_ENDIAN_HW $(INCLUDEDIR)
INCLUDEDIR=-I$(obj)/../common -Idrivers/scsi 
endif

ifeq (y,$(ISC813XX_IOCTL))
EXTRA_CFLAGS += -DISC813XX_IOCTL
endif

isc813xx_common-objs := ../common/scdl_bus_mgr.o \
			../common/scdl_sli_mgr.o \
			../common/scdl_mbox_mgr.o \
			../common/scdl_mgr.o \
			../common/scdl_ring_mgr.o \
			../common/scdl_iocb_mgr.o \
			../common/scdl_ioctl_mgr.o \
			../common/scdl_sas_mgr.o \
			../common/scdl_scsi_mgr.o \
			../common/scdl_config_mgr.o \
			../common/scdl_log_mgr.o \
			../common/scdl_devmap_mgr.o
			
isc813xx_pci_bus_objs := ../common/scdl_pci_mgr.o isc813xx_pci.o
isc813xx_lbus_objs    := ../common/scdl_lbus_mgr.o isc813xx_lbus.o


isc813xx_drv-objs := isc813xx_main.o isc813xx_mem.o isc813xx_misc.o isc813xx_scsi.o \
	isc813xx_sysfs.o 

isc813xx_test-objs := ../test_ioctl/test_ioctl.o \
          ../test_ioctl/test_sli_mbox_mgr.o ../test_ioctl/test_sli_ring_mgr.o \
          ../test_ioctl/test_config_mgr.o ../test_ioctl/test_devmap_mgr.o \
          ../test_ioctl/test_linux_oss_mem.o ../test_ioctl/test_ddp_control.o \
          ../test_ioctl/test_persistent_binding.o

ifeq (y,$(TARGET_MODE))
EXTRA_CFLAGS += -DSCDL_TARGET_MODE
isc813xx_common-objs += ../common/scdl_tgt_mgr.o
endif

ifneq ($(KERNELRELEASE), )

obj-$(CONFIG_SCSI_ISC813XX) += iioc34x.o
ifeq (y,$(TEST_IOCTL))
iioc34x-objs    := $(isc813xx_common-objs) $(isc813xx_drv-objs) $(isc813xx_test-objs)
else
iioc34x-objs    := $(isc813xx_common-objs) $(isc813xx_drv-objs)
endif

ifeq (y,$(LOCAL_BUS_SUPPORT))
iioc34x-objs += $(isc813xx_lbus_objs)
endif

ifeq (y,$(PCI_BUS_SUPPORT))
iioc34x-objs += $(isc813xx_pci_bus_objs)
endif

else

PWD := $(shell pwd)
KDIR := /lib/modules/$(shell uname -r)/build

default: 
	@echo Building $@ outside the kernel build system for kernel `uname -r`
	@echo C Flags: $(EXTRA_CFLAGS)
	$(MAKE) -C $(KDIR) CONFIG_ISC813XX=m SUBDIRS=$(PWD) modules

mod:
	@echo Building $@ outside the kernel build system for $(KSRC)
	@echo C Flags: $(EXTRA_CFLAGS)
	$(MAKE) -C $(KSRC) CONFIG_ISC813XX=m SUBDIRS=$(PWD) modules

endif

clean:
	@find $(PWD) \
	\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
	-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
	-type f -print | xargs rm -f

	@rm -rf $(PWD)/.tmp_versions
	
	@find $(PWD)/../common \
	\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
	-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
	-type f -print | xargs rm -f

	@find $(PWD)/../test_ioctl \
	\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
	-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
	-type f -print | xargs rm -f

