#
# Copyright 2010,2011 Free Software Foundation, Inc.
# 
# This file is part of GNU Radio
# 
# GNU Radio is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
# 
# GNU Radio is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#

include $(top_srcdir)/Makefile.common

#FIXME: forcing the top_builddir for distcheck seems like a bit
# of a hack. Figure out the right way to do this to find built
# volk_config.h and volk_tables.h

AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_CPPFLAGS) \
	-I$(top_builddir)/include \
	$(LV_CXXFLAGS) $(WITH_INCLUDES)


# We build 2 libraries and 1 executable here.  One library contains
# everything except the libcppunit QA code, and one contains only the
# libcppunit-based QA code.  The C++ QA code is especially recommended
# when you have general purpose C or C++ code that may not get
# thoroughly exercised by building and running a GR block.  The
# executable runs the QA code at "make check" time.
#
# N.B., If there's a SWIG generated shared library and associated
# python code, it will be contained in ../python, not here.  (That
# code is conditionally built depending on the state of the
# --without-python configure option.)  However, the .i should be here
# next to the .h that it's based on.


# list of programs run by "make check" and "make distcheck"
#TESTS = test_all


lib_LTLIBRARIES = \
	libvolk.la \
	libvolk_runtime.la \
	libvolk_qa.la

EXTRA_DIST = \
	volk_mktables.c		\
	volk_rank_archs.h 	\
	volk_proccpu_sim.c

# ----------------------------------------------------------------
#                      The main library
# ----------------------------------------------------------------

libvolk_runtime_la_SOURCES = 	\
	$(platform_CODE) 	\
	volk_runtime.c		\
	volk_init.c 		\
	volk_rank_archs.c	

libvolk_la_SOURCES = 		\
	$(platform_CODE) 	\
	volk.c 			\
	volk_environment_init.c


libvolk_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 
libvolk_runtime_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0

libvolk_la_LIBADD =



# ----------------------------------------------------------------
#        The QA library.  Note libvolk.la in LIBADD
# ----------------------------------------------------------------
libvolk_qa_la_SOURCES = \
	qa_volk.cc \
	qa_16s_quad_max_star_aligned16.cc \
	qa_32fc_dot_prod_aligned16.cc \
	qa_32fc_square_dist_aligned16.cc \
	qa_32fc_square_dist_scalar_mult_aligned16.cc \
	qa_32f_sum_of_poly_aligned16.cc \
	qa_32fc_index_max_aligned16.cc \
	qa_32f_index_max_aligned16.cc \
	qa_32fc_conjugate_dot_prod_aligned16.cc \
	qa_16s_permute_and_scalar_add_aligned16.cc \
	qa_16s_branch_4_state_8_aligned16.cc \
	qa_16s_max_star_horizontal_aligned16.cc \
	qa_16s_max_star_aligned16.cc \
	qa_16s_add_quad_aligned16.cc \
	qa_32f_add_aligned16.cc \
	qa_32f_subtract_aligned16.cc \
	qa_32f_max_aligned16.cc \
	qa_32f_min_aligned16.cc \
	qa_64f_max_aligned16.cc \
	qa_64f_min_aligned16.cc \
	qa_32s_and_aligned16.cc \
	qa_32s_or_aligned16.cc \
	qa_32f_dot_prod_aligned16.cc \
	qa_32f_dot_prod_unaligned16.cc \
	qa_32f_fm_detect_aligned16.cc \
	qa_32fc_32f_multiply_aligned16.cc \
	qa_32fc_multiply_aligned16.cc \
	qa_32f_divide_aligned16.cc \
	qa_32f_multiply_aligned16.cc \
	qa_32f_sqrt_aligned16.cc \
	qa_8sc_multiply_conjugate_16sc_aligned16.cc \
	qa_8sc_multiply_conjugate_32fc_aligned16.cc \
	qa_32u_popcnt_aligned16.cc \
	qa_64u_popcnt_aligned16.cc \
	qa_64u_byteswap_aligned16.cc \
	qa_8sc_deinterleave_32f_aligned16.cc \
	qa_16sc_deinterleave_32f_aligned16.cc \
	qa_8sc_deinterleave_16s_aligned16.cc \
	qa_32f_interleave_32fc_aligned16.cc \
	qa_16u_byteswap_aligned16.cc \
	qa_16sc_deinterleave_16s_aligned16.cc \
	qa_32fc_deinterleave_real_32f_aligned16.cc \
	qa_32fc_magnitude_32f_aligned16.cc \
	qa_32fc_deinterleave_real_64f_aligned16.cc \
	qa_32fc_deinterleave_real_16s_aligned16.cc \
	qa_32fc_magnitude_16s_aligned16.cc \
	qa_32fc_deinterleave_32f_aligned16.cc \
	qa_8sc_deinterleave_real_8s_aligned16.cc \
	qa_32fc_deinterleave_64f_aligned16.cc \
	qa_32f_interleave_16sc_aligned16.cc \
	qa_16sc_deinterleave_real_8s_aligned16.cc \
	qa_16sc_deinterleave_real_32f_aligned16.cc \
	qa_16sc_magnitude_32f_aligned16.cc \
	qa_32u_byteswap_aligned16.cc \
	qa_16sc_deinterleave_real_16s_aligned16.cc \
	qa_8sc_deinterleave_real_32f_aligned16.cc \
	qa_16sc_magnitude_16s_aligned16.cc \
	qa_32f_normalize_aligned16.cc \
	qa_8sc_deinterleave_real_16s_aligned16.cc \
	qa_16s_convert_32f_aligned16.cc \
	qa_16s_convert_32f_unaligned16.cc \
	qa_16s_convert_8s_aligned16.cc \
	qa_16s_convert_8s_unaligned16.cc \
	qa_32f_convert_16s_aligned16.cc \
	qa_32f_convert_16s_unaligned16.cc \
	qa_32f_convert_32s_aligned16.cc \
	qa_32f_convert_32s_unaligned16.cc \
	qa_32f_convert_64f_aligned16.cc \
	qa_32f_convert_64f_unaligned16.cc \
	qa_32f_convert_8s_aligned16.cc \
	qa_32f_convert_8s_unaligned16.cc \
	qa_32s_convert_32f_aligned16.cc \
	qa_32s_convert_32f_unaligned16.cc \
	qa_64f_convert_32f_aligned16.cc \
	qa_64f_convert_32f_unaligned16.cc \
	qa_8s_convert_16s_aligned16.cc \
	qa_8s_convert_16s_unaligned16.cc \
	qa_8s_convert_32f_aligned16.cc \
	qa_8s_convert_32f_unaligned16.cc \
	qa_32fc_32f_power_32fc_aligned16.cc \
	qa_32f_power_aligned16.cc \
	qa_32fc_atan2_32f_aligned16.cc \
	qa_32fc_power_spectral_density_32f_aligned16.cc \
	qa_32fc_power_spectrum_32f_aligned16.cc \
	qa_32f_calc_spectral_noise_floor_aligned16.cc \
	qa_32f_accumulator_aligned16.cc \
	qa_32f_stddev_aligned16.cc \
	qa_32f_stddev_and_mean_aligned16.cc

libvolk_qa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 

libvolk_qa_la_LIBADD = \
	libvolk.la \
	libvolk_runtime.la \
	$(CPPUNIT_LIBS)

# ----------------------------------------------------------------
# headers that don't get installed
# ----------------------------------------------------------------
noinst_HEADERS = \
	volk_init.h \
	qa_volk.h \
	assembly.h \
	qa_16s_quad_max_star_aligned16.h \
	qa_32fc_dot_prod_aligned16.h \
	qa_32fc_square_dist_aligned16.h \
	qa_32fc_square_dist_scalar_mult_aligned16.h \
	qa_32f_sum_of_poly_aligned16.h \
	qa_32fc_index_max_aligned16.h \
	qa_32f_index_max_aligned16.h \
	qa_32fc_conjugate_dot_prod_aligned16.h \
	qa_16s_permute_and_scalar_add_aligned16.h \
	qa_16s_branch_4_state_8_aligned16.h \
	qa_16s_max_star_horizontal_aligned16.h \
	qa_16s_max_star_aligned16.h \
	qa_16s_add_quad_aligned16.h \
	qa_32f_add_aligned16.h \
	qa_32f_subtract_aligned16.h \
	qa_32f_max_aligned16.h \
	qa_32f_min_aligned16.h \
	qa_64f_max_aligned16.h \
	qa_64f_min_aligned16.h \
	qa_32s_and_aligned16.h \
	qa_32s_or_aligned16.h \
	qa_32f_dot_prod_aligned16.h \
	qa_32f_dot_prod_unaligned16.h \
	qa_32f_fm_detect_aligned16.h \
	qa_32fc_32f_multiply_aligned16.h \
	qa_32fc_multiply_aligned16.h \
	qa_32f_divide_aligned16.h \
	qa_32f_multiply_aligned16.h \
	qa_32f_sqrt_aligned16.h \
	qa_8sc_multiply_conjugate_16sc_aligned16.h \
	qa_8sc_multiply_conjugate_32fc_aligned16.h \
	qa_32u_popcnt_aligned16.h \
	qa_64u_popcnt_aligned16.h \
	qa_64u_byteswap_aligned16.h \
	qa_8sc_deinterleave_32f_aligned16.h \
	qa_16sc_deinterleave_32f_aligned16.h \
	qa_8sc_deinterleave_16s_aligned16.h \
	qa_32f_interleave_32fc_aligned16.h \
	qa_16u_byteswap_aligned16.h \
	qa_16sc_deinterleave_16s_aligned16.h \
	qa_32fc_deinterleave_real_32f_aligned16.h \
	qa_32fc_magnitude_32f_aligned16.h \
	qa_32fc_deinterleave_real_64f_aligned16.h \
	qa_32fc_deinterleave_real_16s_aligned16.h \
	qa_32fc_magnitude_16s_aligned16.h \
	qa_32fc_deinterleave_32f_aligned16.h \
	qa_8sc_deinterleave_real_8s_aligned16.h \
	qa_32fc_deinterleave_64f_aligned16.h \
	qa_32f_interleave_16sc_aligned16.h \
	qa_16sc_deinterleave_real_8s_aligned16.h \
	qa_16sc_deinterleave_real_32f_aligned16.h \
	qa_16sc_magnitude_32f_aligned16.h \
	qa_32u_byteswap_aligned16.h \
	qa_16sc_deinterleave_real_16s_aligned16.h \
	qa_8sc_deinterleave_real_32f_aligned16.h \
	qa_16sc_magnitude_16s_aligned16.h \
	qa_32f_normalize_aligned16.h \
	qa_8sc_deinterleave_real_16s_aligned16.h \
	qa_16s_convert_32f_aligned16.h \
	qa_16s_convert_32f_unaligned16.h \
	qa_16s_convert_8s_aligned16.h \
	qa_16s_convert_8s_unaligned16.h \
	qa_32f_convert_16s_aligned16.h \
	qa_32f_convert_16s_unaligned16.h \
	qa_32f_convert_32s_aligned16.h \
	qa_32f_convert_32s_unaligned16.h \
	qa_32f_convert_64f_aligned16.h \
	qa_32f_convert_64f_unaligned16.h \
	qa_32f_convert_8s_aligned16.h \
	qa_32f_convert_8s_unaligned16.h \
	qa_32s_convert_32f_aligned16.h \
	qa_32s_convert_32f_unaligned16.h \
	qa_64f_convert_32f_aligned16.h \
	qa_64f_convert_32f_unaligned16.h \
	qa_8s_convert_16s_aligned16.h \
	qa_8s_convert_16s_unaligned16.h \
	qa_8s_convert_32f_aligned16.h \
	qa_8s_convert_32f_unaligned16.h \
	qa_32fc_32f_power_32fc_aligned16.h \
	qa_32f_power_aligned16.h \
	qa_32fc_atan2_32f_aligned16.h \
	qa_32fc_power_spectral_density_32f_aligned16.h \
	qa_32fc_power_spectrum_32f_aligned16.h \
	qa_32f_calc_spectral_noise_floor_aligned16.h \
	qa_32f_accumulator_aligned16.h \
	qa_32f_stddev_aligned16.h \
	qa_32f_stddev_and_mean_aligned16.h


# ----------------------------------------------------------------
# Our test program
# ----------------------------------------------------------------
noinst_PROGRAMS = \
	test_all

test_all_SOURCES = test_all.cc
test_all_LDADD   = libvolk_qa.la


distclean-local: 
	rm -f volk.c
	rm -f volk_cpu_generic.c
	rm -f volk_cpu_powerpc.c
	rm -f volk_cpu_x86.c
	rm -f volk_init.c
	rm -f volk_init.h
	rm -f volk_mktables.c
	rm -f volk_proccpu_sim.c
	rm -f volk_runtime.c
	rm -f volk_tables.h
	rm -f volk_environment_init.c
#SUBDIRS = 

#ifdef BUILD_SSE
#SUBDIRS += sse
#elif BUILD_SPU
#SUBDIRS += spu
#else
#SUBDIRS += port
#endif