##############
#Common Flags#
##############
DRV_OBJ = $(TOPDIR)/driver/obj
DRV_DUNIX_INC = $(TOPDIR)/driver/inc/dunix
DRV_COMMON_SRC = $(TOPDIR)/driver/src/common
DRV_LINUX_SRC = $(TOPDIR)/driver/src/linux
DRV_DUNIX_SRC = $(TOPDIR)/driver/src/dunix


DRV_VPATH = $(DRV_DUNIX_SRC):$(DRV_LINUX_SRC):$(DRV_COMMON_SRC)



#############
#DUNIX Flags#
#############

ifeq ($(OSTYPE),OSF1)

# This is an UGLY UGLY UGLY hack, simply to get an uppercase version of 
# the hostname.  We need that because digital unix, (ahem), puts cpu specifc
# files in /usr/sys/HOSTNAME.  Why all caps?  I just work here.
# --Phil

TEMP_SYSNAME = $(shell hostname -s)
SYSNAME =  $(shell echo "blah" | awk '{print toupper("$(TEMP_SYSNAME)")}')   

IDENT= -DSWAPTYPE=1 -DUERF -DCOMPAT_43 -DMACH -DUFS
KDEFS = -DOSF3 -Dunix -D__OSF1__ -DOSF -DKERNEL -D_KERNEL -D_BSD -DLANGUAGE_C -D__alpha -Umips -UMIPS
KINCS = -I/sys/$(SYSNAME) -I/sys/include $(INC) -I$(DRV_DUNIX_INC)
KFLAGS = -g3 $(KDEFS) $(KINCS) -O $(IDENT) -Wf,-static -Wf,-nofloat -no_excpt

LD = ld
DLD = $(LD)
DLD_FLAGS_DRIVER = -r -dc

$(DRV_OBJ)/%.o: %.c	
	$(CC) $(KFLAGS) -c -o $@ $<

endif


#############
#LINUX Flags#
#############

ifeq ($(OSTYPE),Linux)

DRV_CFLAGS = -D__LINUX__ -I/usr/src/linux/include $(INC)
KFLAGS = $(DRV_CFLAGS) -DLINUX -D__KERNEL__ -DMODULE -O -pipe -mno-fp-regs -ffixed-8 -fomit-frame-pointer
LD = ld
DLD = $(LD)
DLD_FLAGS_DRIVER = -r 

$(DRV_OBJ)/%.o: %.c	
	$(CC) $(KFLAGS) -c -o $@ $<

endif



ALL_COMMON_DRV_OBJS = 		$(DRV_OBJ)/bit_library.o \
				$(DRV_OBJ)/hb_library.o \
				$(DRV_OBJ)/buffer_descriptor.o \
				$(DRV_OBJ)/histogram_buffer.o \
				$(DRV_OBJ)/sample_buffer.o \
				$(DRV_OBJ)/kernel_general.o 

ALL_LINUX_DRV_OBJS = 		$(ALL_COMMON_DRV_OBJS) \
				$(DRV_OBJ)/sample_buffer_linux.o \
				$(DRV_OBJ)/driver_linux.o \
				$(DRV_OBJ)/kernel_general_linux.o 

ALL_DUNIX_DRV_OBJS =	 	$(ALL_COMMON_DRV_OBJS) \
				$(DRV_OBJ)/sample_buffer_osf1.o \
				$(DRV_OBJ)/driver_osf1.o \
				$(DRV_OBJ)/kernel_general_osf1.o 

#
# Common Driver sources
# 

$(DRV_OBJ)/buffer_descriptor.o:	$(DRV_COMMON_SRC)/buffer_descriptor.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/histogram_buffer.o:	$(DRV_COMMON_SRC)/histogram_buffer.c \
				$(ipr_kernel_int_defs_combo)\
                                $(hb_library_combo)

$(DRV_OBJ)/sample_buffer.o:	$(DRV_COMMON_SRC)/sample_buffer.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/kernel_general.o:	$(DRV_COMMON_SRC)/kernel_general.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/bit_library.o:	$(SUITE_COMMON_SRC)/bit_library.c \
				$(bit_library_combo)

$(DRV_OBJ)/hb_library.o:	$(SUITE_COMMON_SRC)/hb_library.c \
				$(hb_library_combo)

########################################################################
#OS SPECIFIC: Linux
########################################################################

$(DRV_OBJ)/sample_buffer_linux.o:$(DRV_LINUX_SRC)/sample_buffer_linux.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/kernel_general_linux.o:$(DRV_LINUX_SRC)/kernel_general_linux.c \
				$(ipr_kernel_int_defs_combo) \
				$(ipr_api_int_defs_combo) 

$(DRV_OBJ)/driver_linux.o:	$(DRV_LINUX_SRC)/driver_linux.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/linux_iprobe_driver.o:$(ALL_LINUX_DRV_OBJS)
	$(DLD) $(DLD_FLAGS_DRIVER) -o $(DRV_OBJ)/linux_iprobe_driver.o $(ALL_LINUX_DRV_OBJS)

########################################################################
#OS SPECIFIC: Dunix/OSF
########################################################################

$(DRV_OBJ)/sample_buffer_osf1.o:$(DRV_DUNIX_SRC)/sample_buffer_osf1.c \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/kernel_general_osf1.o:$(DRV_DUNIX_SRC)/kernel_general_osf1.c \
				$(ipr_kernel_int_defs_combo) \
				$(ipr_api_int_defs_combo) 

$(DRV_OBJ)/driver_osf1.o:	$(DRV_DUNIX_SRC)/driver_osf1.c \
				$(DRV_DUNIX_INC)/ipr.h \
				$(DRV_DUNIX_INC)/ipr_driver_osf.h \
				$(ipr_kernel_int_defs_combo)

$(DRV_OBJ)/ipr.mod:		$(ALL_DUNIX_DRV_OBJS)
	$(DLD) $(DLD_FLAGS_DRIVER) -o $(DRV_OBJ)/ipr.mod $(ALL_DUNIX_DRV_OBJS)

########################################################################

clean-driver:
	-rm $(DRV_OBJ)/*

#This links all of the objects into a single kernel module. 

linux_iprobe_driver:		$(DRV_OBJ)/linux_iprobe_driver.o
dunix_iprobe_driver:		$(DRV_OBJ)/ipr.mod
