#******************************************************************************
#
#  This Driver software is distributed as is, without any warranty of any kind,
#  either express or implied as further specified in the GNU Public License.
#  This software may be used and distributed according to the terms of the
#  GNU Public License.
#
#******************************************************************************
#
# Device makefile for LINUX
# 

ifndef CHIP_TYPE
#
# Chip type (pick one)
#
#CHIP_TYPE= UB5805
#CHIP_TYPE= UB5820
CHIP_TYPE= UB582x
endif


SHELL = /bin/sh
CMD_ECHO= @	# Suppresses shell command echos; comment out for verbose
MAKE_ECHO= -s	# Suppresses make command echos; comment out for verbose
INSMOD=/sbin/insmod 
#INSMODFLAGS= -f # Forces driver load in spite of kernel version mismatch
RMMOD=/sbin/rmmod
CSH=/bin/csh

#DEBUG_SWITCH= -DDEBUG# Comment out for non-debug

# Try to determine whether or not we're running on an SMP kernel.
# Just in case this fails, we default to UniProcessor

DEFAULT_SMP_STATUS:=0# A UniProcessor kernel

ifndef SMP_STATUS ##### check if this is defined by caller #####
ifeq ($(shell `echo uname -a` | grep -i SMP),$(shell `echo uname -a`))
  SMP_STATUS:=1# uname string contains "smp", set SMP_STATUS
endif

ifndef SMP_STATUS
  SMP_STATUS:=$(DEFAULT_SMP_STATUS)# If no positive ID of SMP machine
endif
endif ####

# Try to determine the platform's CPU
# Just in case this fails, we default to an x86 CPU

ifeq ($(shell `echo uname -a` | grep -i " PPC "),$(shell `echo uname -a`))
  LDFLAGS = -m elf32ppc -r   # PPC platform linker flags
endif

ifeq ($(shell `echo uname -a` | grep -i " i.86 "),$(shell `echo uname -a`))
  LDFLAGS = -m elf_i386  -r   # PPC platform linker flags
endif

ifndef LDFLAGS
  LDFLAGS =  -r   # PC platform linker flags
endif

ifeq ($(shell `echo uname -a` | grep -i " ia64 "),$(shell `echo uname -a`))
  LINUXIA64= -DLINUX_IA64 
endif

# the compiler
CC = gcc

# compiler warning switch
WARNING=-Wall -Wno-unused

# directories for header files and library file
LIBDIR=../SRL
RPMDIR=../rpm

ifeq ($(shell ls /lib/modules/`uname -r`/build > /dev/null 2>&1 && echo build),)
LINUX=/usr/src/linux
else
LINUX=/lib/modules/`uname -r`/build
endif

INCLFLAGS=-I$(LINUX)/include

INCDIR=../SRL
OPTFLAGS=-O2

# set the compiler command line define for UniProcessor machine
ifeq ($(SMP_STATUS),0)
  SMP_SWITCH= -U__SMP__
  MOD_SWITCH= -D_LINUX_MODVERSIONS_H
  SMP_STRING= "(UP)"
endif

# set the compiler command line define for SMP machine
ifeq ($(SMP_STATUS),1)
  SMP_SWITCH= -D__SMP__
  MOD_SWITCH= -U_LINUX_MODVERSIONS_H
  SMP_STRING= "(SMP)"
endif


# CHIP_TYPE is imported here from the top-level Makefile
ifeq ($(CHIP_TYPE),UB5805)
  CHIP_SWITCH= -DUBSEC_5805
  CHIP_STRING= "(5805)"
  BINNAME=bcm5805
endif
ifeq ($(CHIP_TYPE),UB5820)
  CHIP_SWITCH= -DUBSEC_5820
  CHIP_STRING= "(5820)"
  BINNAME=bcm5820
endif
ifeq ($(CHIP_TYPE),UB582x)
  CHIP_SWITCH= -DUBSEC_582x
  CHIP_STRING= "(582x)"
  BINNAME=bcm582x
endif

DEVICE_TYPE= $(SMP_SWITCH) $(MOD_SWITCH) -DLINUX $(KERNELVERSION) $(CHIP_SWITCH) $(LINUXIA64) 

CFLAGS = -c $(OPTFLAGS) -I$(INCDIR) $(INCLFLAGS) -DGOTOSLEEP -DMULTIPLE_DEVICES $(DEVICE_TYPE) $(WARNING) $(DEBUG_SWITCH) 



LIBNAME=$(LIBDIR)/ubsec.lnx

RM = /bin/rm
RMFLAGS = -f

.SUFFIXES:
.SUFFIXES: .c .o

# files for a (source) distribution

UBSECSRC =		\
	chipinfo.c	\
	crypto.c	\
	device.c	\
	dispatch.c	\
	hash.c		\
	math.c		\
	memory.c	\
	param.c		\
	pkey.c		\
	rng.c		\
	selftest.c	\
	sslarc4.c	\
	sslcipher.c	\
	sslmac.c	\
	snmp.c		\
	tlsmac.c	\
	utils.c

OBJSUBSEC =		\
	chipinfo.o	\
	crypto.o	\
	device.o	\
	dispatch.o	\
	hash.o		\
	math.o		\
	memory.o	\
	param.o		\
	pkey.o		\
	rng.o		\
	selftest.o	\
	sslarc4.o	\
	sslcipher.o	\
	sslmac.o	\
	snmp.o		\
	tlsmac.o	\
	utils.o

ifdef BCM_OEM_1
include ../BCM_OEM_1/driver_oem1.mak
endif

all: $(BINNAME).o

$(BINNAME).o: $(OBJSUBSEC) $(LIBNAME)
	@echo Linking...
	$(CMD_ECHO)$(LD) -o $(BINNAME).o  $(LDFLAGS) $(OBJSUBSEC) $(LIBNAME)

$(LIBNAME):
	cd $(LIBDIR) ; make

clean:
	@echo Cleaning up object files...
	$(CMD_ECHO)$(RM) $(RMFLAGS) $(BINNAME).o $(OBJSUBSEC) *~

rebuild:
	$(CMD_ECHO)make $(MAKE_ECHO) clean
	$(CMD_ECHO)make $(MAKE_ECHO) 
.c.o:
ifndef SMP_SWITCH
	@echo UP/SMP configuration is not defined
	@exit 1
else
	@echo Compiling $(SMP_STRING)$(CHIP_STRING) $(LINUXIA64) $<...
	$(CMD_ECHO)$(CC) $(CFLAGS) -c $<
endif

# Dependencies

DEPENDH = cdevincl.h cdevextrn.h keydefs.h ubsio.h $(INCDIR)/ubsec.h \
          $(INCDIR)/ubsdefs.h

chipinfo.o:  $(DEPENDH)
crypto.o:    $(DEPENDH)
device.o:    $(DEPENDH)
dispatch.o:  $(DEPENDH)
hash.o:      $(DEPENDH)
math.o:      $(DEPENDH)
memory.o:    $(DEPENDH)
param.o:     $(DEPENDH)
pkey.o:      $(DEPENDH)
rng.o:       $(DEPENDH)
selftest.o:  $(DEPENDH)
sslarc4.o:   $(DEPENDH)
sslcipher.o: $(DEPENDH)
sslmac.o:    $(DEPENDH)
snmp.o:	     $(DEPENDH)
tlsmac.o:    $(DEPENDH)
utils.o:     $(DEPENDH)

ifdef BCM_OEM_1
include ../BCM_OEM_1/driverrules_oem1.mak
endif

load:
	$(CMD_ECHO)$(INSMOD) $(INSMODFLAGS) ./$(BINNAME).o
	$(CMD_ECHO)$(CSH) ubsec.mkdev

unload:
	$(CMD_ECHO)$(RMMOD) $(BINNAME)
	$(CMD_ECHO)$(CSH) ubsec.remdev

reload:
	$(CMD_ECHO)make $(MAKE_ECHO) unload
	$(CMD_ECHO)make $(MAKE_ECHO) load

