###########################################################-*-makefile-*-
# Myricom GM networking software and documentation                      #
# Copyright (c) 1999 by Myricom, Inc.                                   #
# All rights reserved.  See the file `COPYING' for copyright notice.    #
#########################################################################/
#
# author: loic@myri.com
#
# This is a makefile fragment template.  The configure script uses it
# to generate make-os, and the top level Makefile includes that file.


LINUX_KERSRC=/usr/src/linux

ifneq ($(filter i%86,$(host_cpu)),)
arch_type=intel
else
arch_type=$(host_cpu)
endif

ifeq ($(arch_type),intel)
#SMPFLAG=-D__SMP__ -DGM_SMPHACKS -DGM_SKIP_NETDEV
SMPFLAG := $(shell $(srcdir)/drivers/linux/checksmp)
NOFPREGS=
LD=ld
endif

ifeq ($(arch_type),ia64)
#SMPFLAG=-D__SMP__ -DGM_SMPHACKS -DGM_SKIP_NETDEV
SMPFLAG := $(shell $(srcdir)/drivers/linux/checksmp) -ffixed-r13 \
	-mfixed-range=f10-f15,f32-f127 -funwind-tables
NOFPREGS=
LD=ld
endif


ifeq ($(arch_type),alpha)
SMPFLAG := $(shell $(srcdir)/drivers/linux/checksmp)
#SMPFLAG = -DNOT_CHECKSMP
NOFPREGS=-mno-fp-regs -ffixed-8
LD=ld
endif

#alpha-2.2.12 -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
#             -fno-strict-aliasing -D__SMP__ -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev6

ifeq ($(arch_type),sparc64)
#SMPFLAG=-D__SMP__ -DGM_SMPHACKS -DGM_SKIP_NETDEV
#SMPFLAG := $(shell $(srcdir)/drivers/linux/checksmp)
SMPFLAG = -DNOT_CHECKSMP -O2 -fomit-frame-pointer -m64 -mno-fpu -mcpu=ultrasparc -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare   
NOFPREGS=
LD=ld -m elf64_sparc
#EXTRA_USER_LDFLAGS = -m elf64_sparc
EXTRA_README_FILES = binary/README-linux-sparc64
endif

ifeq ($(arch_type),powerpc)
MAPPER_CXXFLAGS = $(CXXFLAGS) -fsigned-char -I$(srcdir)/mt/libmt -I$(srcdir)/mt/deadlock
SMPFLAG := $(shell $(srcdir)/drivers/linux/checksmp)
NOFPREGS= -O2 -fomit-frame-pointer -fno-strict-aliasing -D__powerpc__ -fsigned-char -msoft-float -fno-builtin -ffixed-r2 -Wno-uninitialized -mmultiple -mstring 
endif


#use this for versioning (or --enable-linux-modversions)
#LINUXFLAGS=-DGM_NEED_MODVERSIONS -DMODULE $(SMPFLAG)   -D__KERNEL__ -I$(LINUX_KERSRC)/include

LINUXFLAGS=-DMODULE $(SMPFLAG) -D__KERNEL__   -I$(LINUX_KERSRC)/include



DRIVER_CPPFLAGS = $(LINUXFLAGS)  $(KERN_CPPFLAGS) -DGM_KERNEL \
         -I$(top_srcdir)/zlib \
	 -I$(srcdir) -I$(top_srcdir)/drivers \
	 -I$(top_builddir)/include -I$(top_srcdir)/include \
	 -I$(top_srcdir)/drivers/linux/gm \
	 -DGM_CPU_$(host_cpu)=1
DRIVER_CFLAGS = $(NOFPREGS) $(KERN_CFLAGS) $(DRIVER_CPPFLAGS) -O4 

#DRIVER_CPPFLAGS += -DGM_SMPHACKS

#############
# Building
#############

release: binary/sbin/gm binary/GM_INSTALL \
         binary/README binary/README-linux $(EXTRA_README_FILES) \
         binary/scripts \
         binary/scripts/gm \
         binary/scripts/gmmapper \
         binary/scripts/gm_install

ifeq ($(arch_type),alpha)
ALPHAIOTYPE= alpha lca_io apecs_io pyxis_io cia_io t2v4_io t2v5_io
DRIVER_SRCS += $(ALPHAIOTYPE:%=drivers/linux/gm/gm_%.c)
endif

ifneq ($(findstring -DGM_SMPHACKS,$(DRIVER_CPPFLAGS)),)
DRIVER_SRCS += drivers/linux/gm/gm_uni.c drivers/linux/gm/gm_smp.c
endif

# drivers/linux/gm/gm_lanai_dump.c removed
DRIVER_SRCS += drivers/linux/gm/gm_arch.c  drivers/linux/ip/gmip.c drivers/linux/gm/gm_vm_split.c drivers/linux/gm/gm_mm_reg.c


ifneq ($(findstring GM_DEBUG=1,$(DRIVER_CPPFLAGS)),)
DRIVER_DBG_OBJ= drivers/linux/longjmp.o drivers/linux/setjmp.o
drivers/linux/longjmp.o : /usr/lib/libc.a
	  ar x /usr/lib/libc.a __longjmp.o
	  mv __longjmp.o drivers/linux/longjmp.o

drivers/linux/setjmp.o : /usr/lib/libc.a
	  ar x /usr/lib/libc.a setjmp.o
	  mv setjmp.o drivers/linux/setjmp.o
endif

DRIVER_OBJECTS = $(DRIVER_DBG_OBJ) $(DRIVER_SRCS:.c=_k.o) $(GM_MCP_OBJS)

DRIVER_LIBS = 					\
	libgm/libgm_k.a				\
	zlib/libz.a

binary/scripts: installdirs
	if [ ! -d binary/scripts ]; then mkdir binary/scripts ; fi

binary/scripts/gm: $(srcdir)/drivers/linux/scripts/gm binary/scripts
	$(INSTALL_PROGRAM) $(srcdir)/drivers/linux/scripts/gm binary/scripts/gm

binary/scripts/gmmapper: $(srcdir)/drivers/linux/scripts/gmmapper binary/scripts
	$(INSTALL_PROGRAM) $(srcdir)/drivers/linux/scripts/gmmapper binary/scripts/gmmapper

binary/scripts/gm_install: $(srcdir)/drivers/linux/scripts/gm_install binary/scripts
	$(INSTALL_PROGRAM) $(srcdir)/drivers/linux/scripts/gm_install binary/scripts/gm_install

binary/sbin/gm: $(DRIVER_OBJECTS) $(DRIVER_LIBS) installdirs
	rm -f binary/sbin/gm
	$(LD) -dc  -r -o $@ $(DRIVER_OBJECTS) $(DRIVER_LIBS)
	strip --strip-debug binary/sbin/gm

binary/GM_INSTALL: $(srcdir)/drivers/linux/gm_install installdirs
	$(INSTALL_PROGRAM) $(srcdir)/drivers/linux/gm_install binary/GM_INSTALL

binary/README: $(srcdir)/README installdirs
	$(INSTALL_PROGRAM) $(srcdir)/README binary/README

binary/README-linux: $(srcdir)/README-linux installdirs
	$(INSTALL_PROGRAM) $(srcdir)/README-linux binary/README-linux

binary/README-linux-sparc64: $(srcdir)/README-linux-sparc64 installdirs
	$(INSTALL_PROGRAM) $(srcdir)/README-linux-sparc64 binary/README-linux-sparc64

#############
# Executables
#############

binary/lib/libgm.a: $(LIB_OBJS) installdirs
	rm -f binary/lib/libgm.a
	$(AR) $(ARFLAGS) $@ $(LIB_OBJS) || rm $@
	$(RANLIB) $@

binary/lib/libgm.so.$(GM_VERSION): $(LIB_OBJS) installdirs
	rm -f binary/lib/libgm.so.$(GM_VERSION)
	$(CC) -shared -Wl,-soname,libgm.so -o $@ $(LIB_OBJS) -lc || rm $@

drivers/mostlyclean: drivers/linux/mostlyclean
drivers/linux/mostlyclean: force
	-rm -f drivers/linux/*.o drivers/linux/*/*.o

driver_tags: force
	cd $(srcdir) && etags --append drivers/linux/*/*.[ch]


