# Copyright (c) 2015 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

bin_PROGRAMS += bin/vpp

bin_vpp_SOURCES =				\
  vpp/vnet/main.c				\
  vpp/app/vpe_cli.c				\
  vpp/app/version.c				\
  vpp/oam/oam.c					\
  vpp/stats/stats.c

bin_vpp_SOURCES +=				\
  vpp/api/api.c					\
  vpp/api/custom_dump.c				\
  vpp/api/json_format.c

if WITH_APICLI
  bin_vpp_SOURCES +=				\
  vpp/api/api_format.c				\
  vpp/api/api_main.c
endif

# comment out to disable stats upload to gmond

bin_vpp_CFLAGS = @APICLI@
bin_vpp_SOURCES +=				\
  vpp/api/gmon.c

nobase_include_HEADERS +=			\
  vpp/api/vpe_all_api_h.h			\
  vpp/api/vpe_msg_enum.h			\
  vpp/api/vpe.api.h

API_FILES += vpp/api/vpe.api

BUILT_SOURCES += vpp/app/version.h

vpp/app/version.o:	vpp/app/version.h

.PHONY:	vpp/app/version.h

vpp/app/version.h:
	@echo "  VERSION " $@
	@echo "#define VPP_BUILD_DATE \"$$(date)\"" > $@
	@echo "#define VPP_BUILD_USER \"$$(whoami)\"" >> $@
	@echo "#define VPP_BUILD_HOST \"$$(hostname)\"" >> $@
	@echo "#define VPP_BUILD_TOPDIR \"$$(git rev-parse --show-toplevel)\"" 	>> $@
	@echo "#define VPP_BUILD_VER \"$$(../../scripts/version)\"" >> $@

# Generate a plugin configuration script. Misconfiguring a
# plugin can cause very subtle problems.

bin_SCRIPTS = vpp_plugin_configure

BUILT_SOURCES += vpp_plugin_configure

.PHONY: vpp_plugin_configure

if WITH_DPDK
PLUGIN_DPDK_ARG="--with-dpdk"
else
PLUGIN_DPDK_ARG=""
endif

vpp_plugin_configure:
	@echo "PLUGIN CONFIGURE " $@ 
	@echo "#!/bin/bash" > $@
	@echo " " >> $@
	@echo "set +eu" >> $@
	@echo " " >> $@
	@echo "if [ -f ./configure ] ; then" >> $@
	@echo "    CFLAGS='$(CFLAGS) $(AM_CFLAGS) -I/usr/include/vpp-dpdk' ./configure --with-plugin-toolkit $(PLUGIN_DPDK_ARG)" >> $@
	@echo "else" >> $@
	@echo "    if [ -f ../configure ] ; then" >> $@
	@echo "        CFLAGS='$(CFLAGS) $(AM_CFLAGS) -I/usr/include/vpp-dpdk' ../configure --with-plugin-toolkit $(PLUGIN_DPDK_ARG)" >> $@
	@echo "    else" >> $@
	@echo "        echo Couldnt find ./configure or ../configure " >> $@
	@echo "        exit 1" >> $@
	@echo "    fi" >> $@
	@echo "fi" >> $@

bin_vpp_LDADD = \
  libvlibapi.la \
  libvlibmemory.la \
  libvlib_unix.la \
  libvlib.la \
  libvnet.la \
  libsvm.la \
  libsvmdb.la \
  libvnetplugin.la \
  -lrt

bin_vpp_LDFLAGS = $(DPDK_LD_FLAGS)
bin_vpp_LDADD += libvppinfra.la -lm -lpthread -ldl $(DPDK_LD_ADD)

if WITH_IPV6SR
  bin_vpp_LDADD += -lcrypto
endif

noinst_PROGRAMS += bin/test_client

bin_test_client_SOURCES = \
  vpp/api/test_client.c

bin_test_client_LDADD = \
  libvlibmemoryclient.la \
  libvlibapi.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

noinst_PROGRAMS += bin/test_client bin/test_ha

bin_test_ha_SOURCES = \
  vpp/api/test_ha.c

bin_test_ha_LDADD = \
  libvlibmemoryclient.la \
  libvlibapi.la \
  libsvmdb.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

noinst_PROGRAMS += bin/summary_stats_client

bin_summary_stats_client_SOURCES = \
  vpp/api/summary_stats_client.c

bin_summary_stats_client_LDADD = \
  libvlibmemoryclient.la \
  libvlibapi.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

bin_PROGRAMS += bin/vpp_get_metrics

bin_vpp_get_metrics_SOURCES = \
  vpp/api/vpp_get_metrics.c

bin_vpp_get_metrics_LDADD = \
  libsvmdb.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

# vi:syntax=automake
