#!/usr/bin/make
# Makefile for building Linux Broadcom Gigabit ethernet driver as a module.
# $id$
LFC_VERSION=214.0.131.0
BUILDDIR=$(shell echo $(PWD) | grep -o "SOURCE")
KVER=
ifeq ($(KVER),)
  KVER=$(shell uname -r)
endif

__ARCH=$(shell uname -m)

ifeq ($(BNXT_EN_INC),)
  ifeq ($(BUILDDIR),)
    BNXT_EN_INC=$(shell pwd)/../../../Cumulus/drivers/linux/bnxt_en/
  else
    BNXT_EN_INC=$(shell pwd)/../../../../../../Cumulus/drivers/linux/bnxt_en/
  endif
  export BNXT_EN_INC
endif

ifeq ($(PUB),)
  PUB=$(shell pwd)/pub
  export PUB
endif
# PREFIX may be set by the RPM build to set the effective root.
PREFIX=

ifeq ($(BCMMODDIR),)
	ifeq ($(shell ls /lib/modules/$(KVER)/updates > /dev/null 2>&1 && echo 1),1)
		BCMMODDIR=/lib/modules/$(KVER)/updates
	else
		ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.conf > /dev/null 2>&1 && echo 1),1)
			BCMMODDIR=/lib/modules/$(KVER)/updates
		else
			ifeq ($(shell grep -q "search.*[[:space:]]updates" /etc/depmod.d/* > /dev/null 2>&1 && echo 1),1)
				BCMMODDIR=/lib/modules/$(KVER)/updates
			else
				BCMMODDIR=/lib/modules/$(KVER)/kernel/drivers/char
			endif
		endif
	endif
endif

ifeq ($(shell ls /lib/modules/$(KVER)/build > /dev/null 2>&1 && echo build),)
# SuSE source RPMs
  _KVER=$(shell echo $(KVER) | cut -d "-" -f1,2)
  _KFLA=$(shell echo $(KVER) | cut -d "-" -f3)
  _ARCH=$(shell file -b /lib/modules/$(shell uname -r)/build | cut -d "/" -f5)
  ifeq ($(_ARCH),)
    _ARCH=$(__ARCH)
  endif
  ifeq ($(shell ls /usr/src/linux-$(_KVER)-obj > /dev/null 2>&1 && echo linux),)
    ifeq ($(shell ls /usr/src/kernels/$(KVER)-$(__ARCH) > /dev/null 2>&1 && echo linux),)
      LINUX=
    else
      LINUX=/usr/src/kernels/$(KVER)-$(__ARCH)
      LINUXSRC=$(LINUX)
    endif
  else
    LINUX=/usr/src/linux-$(_KVER)-obj/$(_ARCH)/$(_KFLA)
    LINUXSRC=/usr/src/linux-$(_KVER)
  endif
else
  LINUX=/lib/modules/$(KVER)/build
  ifeq ($(shell ls /lib/modules/$(KVER)/source > /dev/null 2>&1 && echo source),)
    LINUXSRC=$(LINUX)
  else
    LINUXSRC=/lib/modules/$(KVER)/source
  endif
endif

DISTRO_CFLAG := -D__LINUX -DLINUX

ifneq ($(shell grep -so "flow_keys" $(LINUXSRC)/include/net/flow_keys.h),)
  DISTRO_CFLAG += -DHAVE_FLOW_KEYS
endif

ifneq ($(shell ls $(LINUXSRC)/include/net/flow_dissector.h > /dev/null 2>&1 && echo flow),)
  DISTRO_CFLAG += -DNEW_FLOW_KEYS -DHAVE_FLOW_KEYS
endif

ifneq ($(shell grep -o "PKT_HASH_TYPE" $(LINUXSRC)/include/linux/skbuff.h),)
      DISTRO_CFLAG += -DHAVE_SKB_HASH_TYPE
endif

ifneq ($(shell ls $(LINUXSRC)/include/linux/net_dim.h > /dev/null 2>&1 && echo net_dim),)
  DISTRO_CFLAG += -DHAVE_NET_DIM
endif

BCM_DRV = bnxt_lfc.ko
EXTRA_CFLAGS += -I$(BNXT_EN_INC) \
		-I$(PUB)
EXTRA_CFLAGS += ${DISTRO_CFLAG} -g -Wno-unused-function

obj-m += bnxt_lfc.o
bnxt_lfc-y := bnxt_lfc_main.o

default:
	echo $(LINUX)
	echo $(BNXT_EN_INC)
	make -C $(LINUX) SUBDIRS=$(shell pwd) modules

install: default
	mkdir -p $(PREFIX)/$(BCMMODDIR);
	install -m 444 $(BCM_DRV) $(PREFIX)/$(BCMMODDIR);
	@if [ "$(PREFIX)" = "" ]; then /sbin/depmod -a ;\
	fi

rpm:
	chmod +x ./build.sh
	./build.sh $(LFC_VERSION)
	rpmbuild -bb bnxt_lfc.spec --define 'LFC_VERSION ${LFC_VERSION}' --define '_topdir ${PWD}/build'

all: default rpm
clean:
	-rm -rf *.o *.cmd *.mod.c .*.*.cmd *.order *.symvers *.ko .tmp_versions build/
