# Copyright (c) 2016 Cisco Systems, Inc.
# 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.

vppapitestplugins_LTLIBRARIES += dpdk_test_plugin.la
vppplugins_LTLIBRARIES += dpdk_plugin.la

if ENABLE_DPDK_SHARED
dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -ldpdk
else
dpdk_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,--whole-archive,-l:libdpdk.a,--no-whole-archive
endif
if WITH_AESNI_MB_LIB
dpdk_plugin_la_LDFLAGS += -Wl,--exclude-libs,libIPSec_MB.a,-l:libIPSec_MB.a
endif
if WITH_ISA_L_CRYPTO_LIB
dpdk_plugin_la_LDFLAGS += -Wl,--exclude-libs,libisal_crypto.a,-l:libisal_crypto.a
endif
dpdk_plugin_la_CFLAGS = $(AM_CFLAGS)
dpdk_plugin_la_LDFLAGS += -Wl,-lnuma

dpdk_plugin_la_LDFLAGS += -Wl,-lm,-ldl
dpdk_plugin_la_LIBADD =

dpdk_plugin_la_SOURCES =					\
  dpdk/main.c							\
  dpdk/buffer.c							\
  dpdk/thread.c							\
  dpdk/api/dpdk_api.c						\
  dpdk/device/cli.c						\
  dpdk/device/common.c						\
  dpdk/device/dpdk_priv.h					\
  dpdk/device/device.c						\
  dpdk/device/format.c						\
  dpdk/device/init.c						\
  dpdk/device/node.c						\
  dpdk/hqos/hqos.c						\
  dpdk/ipsec/esp_encrypt.c					\
  dpdk/ipsec/esp_decrypt.c					\
  dpdk/ipsec/crypto_node.c					\
  dpdk/ipsec/cli.c						\
  dpdk/ipsec/ipsec.c						\
  dpdk/api/dpdk_plugin.api.h

API_FILES += dpdk/api/dpdk.api

if CPU_X86_64
dpdk_multiversioning_files = 					\
	dpdk/buffer.c						\
	dpdk/device/node.c					\
	dpdk/device/device.c

if CC_SUPPORTS_AVX2
###############################################################
# AVX2
###############################################################
libdpdk_plugin_avx2_la_SOURCES = $(dpdk_multiversioning_files)
libdpdk_plugin_avx2_la_CFLAGS =					\
	$(AM_CFLAGS)  @CPU_AVX2_FLAGS@				\
	-DCLIB_MULTIARCH_VARIANT=avx2
noinst_LTLIBRARIES += libdpdk_plugin_avx2.la
dpdk_plugin_la_LIBADD += libdpdk_plugin_avx2.la
endif

if CC_SUPPORTS_AVX512
###############################################################
# AVX512
###############################################################
libdpdk_plugin_avx512_la_SOURCES = $(dpdk_multiversioning_files)
libdpdk_plugin_avx512_la_CFLAGS =				\
	$(AM_CFLAGS) @CPU_AVX512_FLAGS@				\
	-DCLIB_MULTIARCH_VARIANT=avx512
noinst_LTLIBRARIES += libdpdk_plugin_avx512.la
dpdk_plugin_la_LIBADD += libdpdk_plugin_avx512.la
endif
endif

nobase_include_HEADERS +=					\
  dpdk/device/dpdk.h						\
  dpdk/api/dpdk_all_api_h.h					\
  dpdk/ipsec/ipsec.h

dpdk_test_plugin_la_SOURCES = 					\
  dpdk/api/dpdk_test.c dpdk/api/dpdk_plugin.api.h

# vi:syntax=automake
