# 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.

AUTOMAKE_OPTIONS = foreign subdir-objects

AM_CFLAGS = -Wall @DPDK@

PRE_DATA_SIZE=@PRE_DATA_SIZE@

lib_LTLIBRARIES = libvlib.la

BUILT_SOURCES = vlib/config.h

vlib/config.h:
	echo "#define __PRE_DATA_SIZE" $(PRE_DATA_SIZE) > $@

libvlib_la_SOURCES =				\
  vlib/cli.c					\
  vlib/cli.h					\
  vlib/config.h					\
  vlib/counter.c				\
  vlib/error.c					\
  vlib/format.c					\
  vlib/init.c					\
  vlib/main.c					\
  vlib/mc.c					\
  vlib/node.c					\
  vlib/node_cli.c				\
  vlib/node_format.c				\
  vlib/threads.c				\
  vlib/trace.c

if WITH_DPDK
  libvlib_la_SOURCES += vlib/dpdk_buffer.c
else
  libvlib_la_SOURCES += vlib/buffer.c
endif

nobase_include_HEADERS =			\
  vlib/buffer_funcs.h				\
  vlib/buffer_node.h				\
  vlib/buffer.h					\
  vlib/cli.h					\
  vlib/cli_funcs.h				\
  vlib/config.h					\
  vlib/counter.h				\
  vlib/defs.h					\
  vlib/error_funcs.h				\
  vlib/error.h					\
  vlib/format_funcs.h				\
  vlib/global_funcs.h				\
  vlib/init.h					\
  vlib/main.h					\
  vlib/mc.h					\
  vlib/node_funcs.h				\
  vlib/node.h					\
  vlib/physmem.h				\
  vlib/pci/pci.h				\
  vlib/pci/pci_config.h				\
  vlib/threads.h				\
  vlib/trace_funcs.h				\
  vlib/trace.h					\
  vlib/vlib.h

lib_LTLIBRARIES += libvlib_unix.la

libvlib_unix_la_SOURCES =			\
  vlib/unix/cj.c				\
  vlib/unix/cli.c				\
  vlib/unix/input.c				\
  vlib/unix/main.c				\
  vlib/unix/mc_socket.c				\
  vlib/unix/plugin.c				\
  vlib/unix/plugin.h				\
  vlib/unix/physmem.c				\
  vlib/unix/pci.c				\
  vlib/unix/util.c

nobase_include_HEADERS +=			\
  vlib/unix/cj.h				\
  vlib/unix/mc_socket.h				\
  vlib/unix/physmem.h				\
  vlib/unix/pci.h				\
  vlib/unix/plugin.h				\
  vlib/unix/unix.h
    
if !WITH_DPDK
noinst_PROGRAMS = vlib_unix 

vlib_unix_SOURCES =				\
  example/main_stub.c				\
  example/mc_test.c

vlib_unix_LDADD = libvlib_unix.la libvlib.la \
	          -lvppinfra -lpthread -lm -ldl -lrt
endif
