# Copyright (c) 2007 Intel Corporation. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sub license, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice (including the
# next paragraph) shall be included in all copies or substantial portions
# of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

bin_PROGRAMS = avcenc mpeg2vaenc h264encode jpegenc vp9enc vp8enc hevcencode 
noinst_PROGRAMS = svctenc

AM_CPPFLAGS = \
	-Wall				\
	-fstack-protector		\
	$(LIBVA_CFLAGS) 		\
	$(NULL)

h264encode_SOURCES	= h264encode.c
h264encode_CFLAGS	= -I$(top_srcdir)/common -g
h264encode_LDADD	= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread -lm

hevcencode_SOURCES	= hevcencode.c
hevcencode_CFLAGS	= -I$(top_srcdir)/common -g
hevcencode_LDADD	= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread -lm


avcenc_SOURCES		= avcenc.c
avcenc_CFLAGS		= -I$(top_srcdir)/common -g
avcenc_LDADD		= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread

mpeg2vaenc_SOURCES	= mpeg2vaenc.c
mpeg2vaenc_CFLAGS	= -I$(top_srcdir)/common
mpeg2vaenc_LDADD	= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread

jpegenc_SOURCES		= jpegenc.c
jpegenc_CFLAGS		= -I$(top_srcdir)/common -g
jpegenc_LDADD		= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread

svctenc_SOURCES		= svctenc.c
svctenc_CFLAGS		= -I$(top_srcdir)/common -g
svctenc_LDADD		= \
       	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread -lm

vp9enc_SOURCES     = vp9enc.c
vp9enc_CFLAGS      = -I$(top_srcdir)/common -g
vp9enc_LDADD       = \
	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread -lm

vp8enc_SOURCES     = vp8enc.c
vp8enc_CFLAGS      = -I$(top_srcdir)/common -g
vp8enc_LDADD       = \
	$(LIBVA_LIBS) \
	$(top_builddir)/common/libva-display.la \
	-lpthread -lm

valgrind:	$(bin_PROGRAMS) $(noinst_PROGRAMS)
	for a in $(bin_PROGRAMS) $(noinst_PROGRAMS); do \
		valgrind --leak-check=full --show-reachable=yes .libs/$$a; \
	done

EXTRA_DIST = 		\
	jpegenc_utils.h \
	$(NULL)
