#**********@@@SOFT@@@WARE@@@COPY@@@RIGHT@@@**********************************
# Copyright (C) 2001-2010 Dialogic Corporation. All Rights Reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1.    Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2.    Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3.    Neither the name Dialogic nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#**********************************@@@SOFT@@@WARE@@@COPY@@@RIGHT@@@**********/
#######################################################################
# File Name                    : Makefile
# Description                  : Driver Compilation
#######################################################################
# export INTEL_DIALOGIC_DIR  to PWD if environment is not set

SUBARCH = $(shell uname -m)
ifeq ($(SUBARCH),x86_64)
EXTRA_CFLAGS +=-mcmodel=kernel -mno-red-zone -Dx86_64
endif

# Compiler
CC=gcc

DEBUGOPTS=
LDCOMBINEFLAGS = -r
KERNELRELEASE = $(shell uname -r)
KERNELBUILDDIR = /lib/modules/$(shell uname -r)/build
ASM_INC = $(KERNELBUILDDIR)/include/asm/mach-default
INC_PATH = -I${src}/include 

KBUILD_EXTRA_SYMBOLS = /usr/dialogic/drivers/ctimod/Module.symvers
EXTRA_SYMBOLS = /usr/dialogic/drivers/ctimod/Module.symvers

# Option to build for 2.4 or 2.6 kernels
KERNELMAJOR = $(shell uname -r | cut -b3)
ifeq ($(KERNELMAJOR),6)
	
	SYSTEM_DEFINES = -D__KERNEL__ -DMODULE -DLINUX
   LOCAL_DEFINES = -DPPS -DMERCD_LINUX -DMERCD_PCI -DMERCD_DATATYPE_INTEL  -DSRAM_DRVR_DMA_SUPPORT -DSUPPORT_HSI -DSUPPORT_HEB -DQINST_WIDTH=16
	EXTRA_CFLAGS += $(SYSTEM_DEFINES) $(LOCAL_DEFINES) $(INC_PATH)

	MODULE = mercd
	obj-m := $(MODULE).o
	mercd-objs := source/mercd.o source/mercd_native.o source/mercd_native_util.o source/mercd_linux_pci_dhal.o source/mercd_linux_osal.o source/mercd_ossdl_linux.o source/mercd_osshl_linux_pci.o source/mercd_linux_entry.o source/msdbndmgr.o source/msdbndutl.o source/msdbrdmgr.o source/msdbrdutl.o source/msddbg.o source/msddpc.o source/msddrvrmgr.o source/msdfwmgr.o source/msdmsgmgr.o source/msdqueue.o source/msdrcv.o source/msdshrdata.o source/msdsnd.o source/msdstrmmgr.o source/msdstrmutl.o source/msdsupp.o source/msdtime.o source/mercd_linux_dma_pci.o source/mercd_ww_ossdl_linux.o source/msdwwdpc.o source/msdwwinitmngr.o source/msdwwinitmngrutl.o source/msdwwmsgutl.o source/msdwwrcv.o source/msdwwsnd.o source/msdwwstrmutl.o source/msdwwtime.o source/msdwwutl.o source/mercd_hsi.o source/mercd_linux_stub.o

default:
	$(MAKE) -C $(KERNELBUILDDIR) SUBDIRS=$(PWD) modules;

clean:
	/bin/rm -f source/*.o .depend .mercd.* source/.*.o.cmd 
	/bin/rm -rf  .tmp_versions/
	/bin/rm -f mercd.* Module.*

else

	PROTO_DEFINES = -DFUNCPROTO=15 -DNARROWPROTO
	CXXSTD_DEFINES = -Dlinux -D__i386__ -D_POSIX_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE -DX_LOCALE  $(PROTO_DEFINES)
	SYSTEM_DEFINES = -D__KERNEL__ -DMODULE -Wstrict-prototypes -Wpointer-arith -O1 -DINLINE=inline -DSTATIC=static -fomit-frame-pointer -fno-common
   LOCAL_DEFINES  =  -DRADM_SUPPORT -DLINUX -ULiS -DPPS -DMERCD_LINUX -DMERCD_PCI -DMERCD_DATATYPE_INTEL  -DSRAM_DRVR_DMA_SUPPORT -DSUPPORT_HSI -DSUPPORT_HEB -DQINST_WIDTH=16 -DLIS_OBJNAME=mercd
	GCCFLAGS= -c $(CXXSTD_DEFINES) $(SYSTEM_DEFINES) $(LOCAL_DEFINES) -DLINUX24 -I/$(KERNELBUILDDIR)/include -I$(ASM_INC) $(INC_PATH)
	CCFLAGS = $(GCCFLAGS)

	EXE_NAME= mercd
   MERCD_OBJS = source/mercd.o source/mercd_native.o source/mercd_native_util.o source/mercd_linux_pci_dhal.o source/mercd_linux_osal.o source/mercd_ossdl_linux.o source/mercd_osshl_linux_pci.o source/mercd_linux_entry.o source/msdbndmgr.o source/msdbndutl.o source/msdbrdmgr.o source/msdbrdutl.o source/msddbg.o source/msddpc.o source/msddrvrmgr.o source/msdfwmgr.o source/msdmsgmgr.o source/msdqueue.o source/msdrcv.o source/msdshrdata.o source/msdsnd.o source/msdstrmmgr.o source/msdstrmutl.o source/msdsupp.o source/msdtime.o source/mercd_linux_dma_pci.o source/mercd_ww_ossdl_linux.o source/msdwwdpc.o source/msdwwinitmngr.o source/msdwwinitmngrutl.o source/msdwwmsgutl.o source/msdwwrcv.o source/msdwwsnd.o source/msdwwstrmutl.o source/msdwwtime.o source/msdwwutl.o source/mercd_hsi.o source/mercd_linux_stub.o

.c.o:	 
	$(CC) $(GCCFLAGS) -o $@ $*.c 

default: 
	$(MAKE) all

clean: 
	/bin/rm -rf source/*.o .depend
	/bin/rm -rf $(EXE_NAME).*

endif

#
# Rule for the default targets: default depend
#
depend:
	$(CC) $(GCCFLAGS) $(INC_PATH) -MM  $(MERCD_OBJS:.o=.c) > .depend

all::${EXE_NAME}.o

${EXE_NAME}.o: ${MERCD_OBJS} 
	$(LD) $(LDCOMBINEFLAGS) ${MERCD_OBJS} -o $@

install:
	cp mercd.ko /lib/modules/${KERNELRELEASE}/misc

