PLATFORM?=C2000
UNIT_TEST?=n
UNIT_TEST_HIF?=n
#PLATFORM?=EMULATION
#PLATFORM?=PCI
#UNIT_TEST?=y
#UNIT_TEST_HIF?=y

ifeq ($(PLATFORM),C2000)
CROSS_COMPILE?=/home/upputuv/work/C2000/WiFi/porting_lsdk-10.1.45/sdk-cpe/staging_dir/toolchain-arm_v7-a_gcc-4.5-linaro_glibc-2.14_eabi/bin/arm-openwrt-linux-
KERNELDIR?=/home/upputuv/work/C2000/WiFi/porting_lsdk-10.1.45/sdk-cpe/build_dir/linux-comcerto2000_hgw/linux-3.2.26
ARCH=arm
else
ARCH=x86
KERNELDIR=/lib/modules/`uname -r`/build
endif

# The following must be a relative path, or the kernel build system will fail
PFE_DIR?=../pfe

PFE_CTRL_VERSION_FILE:=version.h


all: version config modules

modules clean:
	make CROSS_COMPILE="$(CROSS_COMPILE)" V=1 ARCH=$(ARCH) -C $(KERNELDIR) M=`pwd` $@

EXTRA_CFLAGS += -Werror -include $(src)/$(PFE_DIR)/c2000/version.h -I$(src)/$(PFE_DIR)/c2000 -I$(src)/$(PFE_DIR)/common -I$(src) -DENDIAN_LITTLE -DGCC_TOOLCHAIN -DCOMCERTO_2000 -DCOMCERTO_2000_CONTROL

EXTRA_LDFLAGS += -T$(src)/control_link.lds

obj-m += pfe.o

pfe_ctrl_objs = $(PFE_DIR)/c2000/__pfe_ctrl.o \
	$(PFE_DIR)/c2000/pfe.o \
	$(PFE_DIR)/common/control_ipv4.o \
	$(PFE_DIR)/common/control_ipv6.o \
	$(PFE_DIR)/common/ipv6.o \
	$(PFE_DIR)/common/control_mc4.o \
	$(PFE_DIR)/common/control_mc6.o \
	$(PFE_DIR)/common/multicast.o \
	$(PFE_DIR)/common/control_pppoe.o \
	$(PFE_DIR)/common/control_vlan.o \
	$(PFE_DIR)/common/control_macvlan.o \
	$(PFE_DIR)/common/query_ipv4.o \
	$(PFE_DIR)/common/query_ipv6.o \
	$(PFE_DIR)/common/query_mc.o \
	$(PFE_DIR)/common/query_pppoe.o \
	$(PFE_DIR)/common/query_vlan.o \
	$(PFE_DIR)/common/query_tunnel.o \
	$(PFE_DIR)/common/query_ipsec.o \
	$(PFE_DIR)/common/query_Rx.o \
	$(PFE_DIR)/c2000/control_expt.o \
	$(PFE_DIR)/common/control_tunnel.o \
	$(PFE_DIR)/common/module_hidrv.o \
	$(PFE_DIR)/c2000/control_storage.o \
	$(PFE_DIR)/common/layer2.o \
	$(PFE_DIR)/common/alt_conf.o \
	$(PFE_DIR)/common/control_stat.o \
	$(PFE_DIR)/c2000/control_rx.o \
	$(PFE_DIR)/c2000/control_tx.o \
	$(PFE_DIR)/common/control_socket.o \
	$(PFE_DIR)/common/control_rtp_relay.o \
	$(PFE_DIR)/common/control_common.o \
	$(PFE_DIR)/c2000/control_qm.o \
	$(PFE_DIR)/common/fppdiag_lib.o \
	$(PFE_DIR)/c2000/control_icc.o \
	$(PFE_DIR)/common/control_voicebuf.o \
	$(PFE_DIR)/common/control_ipsec.o \
	$(PFE_DIR)/c2000/control_ipsec.o \
	$(PFE_DIR)/c2000/control_ipsec_standalone.o \
	$(PFE_DIR)/common/control_bridge.o \
	$(PFE_DIR)/common/control_wifi_rx.o \
	$(PFE_DIR)/c2000/control_ipsec.o \
	$(PFE_DIR)/common/control_natpt.o \
	$(PFE_DIR)/common/control_ipv4frag.o \
	$(PFE_DIR)/common/control_ipv6frag.o \
	$(PFE_DIR)/common/control_capture.o \
	$(PFE_DIR)/c2000/control_l2tp.o \

pfe-y += pfe_mod.o \
	pfe_hw.o \
	pfe_firmware.o \
	pfe_ctrl.o \
	pfe_ctrl_hal.o \
	pfe_hif.o \
	pfe_hif_lib.o\
	pfe_eth.o \
	pfe_pcap.o \
	pfe_vwd.o \
	pfe_perfmon.o \
	pfe_tso.o \
	pfe_sysfs.o \
	pfe_diags.o \
	$(pfe_ctrl_objs) \

pfe-$(CONFIG_COMCERTO_MSP) += pfe_mspsync.o

ifeq ($(UNIT_TEST),y)
pfe-y += pfe_unit_test.o
EXTRA_CFLAGS+=-DCONFIG_UNIT_TEST

ifeq ($(UNIT_TEST_HIF),y)
EXTRA_CFLAGS+=-DCONFIG_UNIT_TEST_HIF
endif

endif

ifeq ($(PLATFORM),C2000)
pfe-y += pfe_platform.o
EXTRA_CFLAGS+=-DCONFIG_PLATFORM_C2000
else ifeq ($(PLATFORM),PCI)
pfe-y += pfe_pci.o
EXTRA_CFLAGS+=-DCONFIG_PLATFORM_PCI
EXTRA_CFLAGS+=-DCONFIG_UTIL_DISABLED
#EXTRA_CFLAGS+=-DCONFIG_TMU_DUMMY
else ifeq ($(PLATFORM),EMULATION)
pfe-y += pfe_emulation.o
EXTRA_CFLAGS+=-DCONFIG_PLATFORM_EMULATION
endif

distclean:
	rm -rf pfe_ctrl-src.tar.gz pfe-src.tar.gz

dist: all pfe_release_tar
	pfe_ctrl_files="`find . -name '*.h'; find . -name '*.c'; find . -name '*.lds'; find . -name 'Makefile'`"; tar -czf pfe_ctrl-src.tar.gz $$pfe_ctrl_files

pfe_release_tar:
	pfe_files="`find $(PFE_DIR)/c2000 -name '*.h'; find $(PFE_DIR)/common -name '*.h'` $(PFE_DIR)/Makefile $(PFE_DIR)/config.mk $(PFE_DIR)/c2000/config.mk $(PFE_DIR)/toolchain.mk $(PFE_DIR)/license.txt $(PFE_DIR)/license_full.txt $(pfe_ctrl_objs:.o=.c)"; tar -cf pfe-src.tar $$pfe_files; tar -xf pfe-src.tar;bash pfe_licence.sh `basename $(PFE_DIR)`; rm `basename $(PFE_DIR)`/license.txt `basename $(PFE_DIR)`/license_full.txt;tar -czf pfe-src.tar.gz `basename $(PFE_DIR)`

version:
	if [ -d .git ]; then  \
		make -C $(PFE_DIR) version ; \
		PFE_CTRL_GIT_VERSION=$$(git describe --always --tags --dirty) ; \
		printf "/*Auto-generated file. Do not edit !*/\n#ifndef VERSION_H\n#define VERSION_H\n\n#define PFE_CTRL_VERSION \"$${PFE_CTRL_GIT_VERSION}\"\n\n#endif /* VERSION_H */\n" > $(PFE_CTRL_VERSION_FILE) ; \
	fi

config:
	make -C $(PFE_DIR) config_check

PFE_BIN_DIR=$(PFE_DIR)/obj_c2000/
CLASS_BIN=$(PFE_BIN_DIR)/class/class_c2000_debug.elf
UTIL_BIN=$(PFE_BIN_DIR)/util/util_c2000_debug.elf
TMU_BIN=$(PFE_BIN_DIR)/tmu/tmu_c2000_debug.elf
check_dmem:
	./check_shared_mem.py pfe.ko $(CLASS_BIN) $(TMU_BIN) $(UTIL_BIN)

