From 720b6849c8243a1cfd1cabb4feb56b392645a433 Mon Sep 17 00:00:00 2001 From: "A. Maitland Bottoms" Date: Sat, 2 Jul 2016 20:30:47 +0000 Subject: [PATCH 001/217] Import volk_1.3-1.debian.tar.xz [dgit import tarball volk 1.3-1 volk_1.3-1.debian.tar.xz] --- changelog | 302 +++++++++++++++++++++++++++++ compat | 1 + control | 68 +++++++ copyright | 130 +++++++++++++ libvolk1-bin.install | 1 + libvolk1-bin.manpages | 3 + libvolk1-dev.abi.tar.gz.amd64 | Bin 0 -> 51112 bytes libvolk1-dev.acc | 12 ++ libvolk1-dev.install | 4 + libvolk1.3.install | 1 + patches/install-all-headers | 33 ++++ patches/make-acc-happy | 53 +++++ patches/native-armv7-build-support | 59 ++++++ patches/series | 4 + patches/sort-cmake-glob-lists | 20 ++ rules | 17 ++ source/format | 1 + source/include-binaries | 1 + upstream/signing-key.asc | 52 +++++ volk-config-info.1 | 45 +++++ volk_modtool.1 | 112 +++++++++++ volk_profile.1 | 5 + watch | 3 + 23 files changed, 927 insertions(+) create mode 100644 changelog create mode 100644 compat create mode 100644 control create mode 100644 copyright create mode 100644 libvolk1-bin.install create mode 100644 libvolk1-bin.manpages create mode 100644 libvolk1-dev.abi.tar.gz.amd64 create mode 100644 libvolk1-dev.acc create mode 100644 libvolk1-dev.install create mode 100644 libvolk1.3.install create mode 100644 patches/install-all-headers create mode 100644 patches/make-acc-happy create mode 100644 patches/native-armv7-build-support create mode 100644 patches/series create mode 100644 patches/sort-cmake-glob-lists create mode 100755 rules create mode 100644 source/format create mode 100644 source/include-binaries create mode 100644 upstream/signing-key.asc create mode 100644 volk-config-info.1 create mode 100644 volk_modtool.1 create mode 100644 volk_profile.1 create mode 100644 watch diff --git a/changelog b/changelog new file mode 100644 index 0000000..581b026 --- /dev/null +++ b/changelog @@ -0,0 +1,302 @@ +volk (1.3-1) unstable; urgency=medium + + * New upstream release + * The index_max kernels were named with the wrong output datatype. To + fix this there are new kernels that return a 32u (int32_t) and the + existing kernels had their signatures changed to return 16u (int16_t). + * The output to stdout and stderr has been shuffled around. There is no + longer a message that prints what VOLK machine is being used and the + warning messages go to stderr rather than stdout. + * The 32fc_index_max kernels previously were only accurate to the SSE + register width (4 points). This was a pretty serious and long-lived + bug that's been fixed and the QA updated appropriately. + + -- A. Maitland Bottoms Sat, 02 Jul 2016 16:30:47 -0400 + +volk (1.2.2-2) unstable; urgency=medium + + * update to v1.2.2-11-g78c8bc4 (to follow gnuradio maint branch) + + -- A. Maitland Bottoms Sun, 19 Jun 2016 14:44:15 -0400 + +volk (1.2.2-1) unstable; urgency=medium + + * New upstream release + + -- A. Maitland Bottoms Fri, 08 Apr 2016 00:12:10 -0400 + +volk (1.2.1-2) unstable; urgency=medium + + * Upstream patches: + Fix some CMake complaints + The fix for compilation with cmake 3.5 + + -- A. Maitland Bottoms Wed, 23 Mar 2016 17:47:54 -0400 + +volk (1.2.1-1) unstable; urgency=medium + + * New upstream release + + -- A. Maitland Bottoms Sun, 07 Feb 2016 19:38:32 -0500 + +volk (1.2-1) unstable; urgency=medium + + * New upstream release + + -- A. Maitland Bottoms Thu, 24 Dec 2015 20:28:13 -0500 + +volk (1.1.1-5) experimental; urgency=medium + + * update to v1.1.1-22-gef53547 to support gnuradio 3.7.9 + + -- A. Maitland Bottoms Fri, 11 Dec 2015 13:12:55 -0500 + +volk (1.1.1-4) unstable; urgency=medium + + * more lintian fixes + + -- A. Maitland Bottoms Wed, 25 Nov 2015 21:49:58 -0500 + +volk (1.1.1-3) unstable; urgency=medium + + * Lintian fixes Pre-Depends + + -- A. Maitland Bottoms Thu, 19 Nov 2015 21:24:27 -0500 + +volk (1.1.1-2) unstable; urgency=medium + + * Note that libvolk1-dev replaces files in gnuradio-dev versions <<3.7.8 + (Closes: #802646) again. Thanks Andreas Beckmann. + + -- A. Maitland Bottoms Fri, 13 Nov 2015 18:45:49 -0500 + +volk (1.1.1-1) unstable; urgency=medium + + * New upstream release + * New architectures exist for the AVX2 and FMA ISAs. + * The profiler now generates buffers that are vlen + a tiny amount and + generates random data to fill buffers. This is intended to catch bugs + in protokernels that write beyond num_points. + * Note that libvolk1-dev replaces files in earlier gnuradio-dev versions + (Closes: #802646) + + -- A. Maitland Bottoms Sun, 01 Nov 2015 18:45:43 -0500 + +volk (1.1-4) unstable; urgency=medium + + * update to v1.1-12-g264addc + + -- A. Maitland Bottoms Tue, 29 Sep 2015 23:41:50 -0400 + +volk (1.1-3) unstable; urgency=low + + * drop dh_acc to get reproducible builds + + -- A. Maitland Bottoms Fri, 11 Sep 2015 22:57:06 -0400 + +volk (1.1-2) unstable; urgency=low + + * use dh-acc + + -- A. Maitland Bottoms Mon, 07 Sep 2015 15:45:20 -0400 + +volk (1.1-1) unstable; urgency=medium + + * re-organize package naming convention + * New upstream release tag v1.1 + New architectures exist for the AVX2 and FMA ISAs. Along + with the build-system support the following kernels have + no proto-kernels taking advantage of these architectures: + + * 32f_x2_dot_prod_32f + * 32fc_x2_multiply_32fc + * 64_byteswap + * 32f_binary_slicer_8i + * 16u_byteswap + * 32u_byteswap + + QA/profiler + ----------- + + The profiler now generates buffers that are vlen + a tiny + amount and generates random data to fill buffers. This is + intended to catch bugs in protokernels that write beyond + num_points. + + -- A. Maitland Bottoms Wed, 26 Aug 2015 09:22:48 -0400 + +volk (1.0.2-2) unstable; urgency=low + + * Use SOURCE_DATE_EPOCH from the environment, if defined, + rather than current date and time to implement volk_build_date() + (embedding build date in a library does not help reproducible builds) + * add watch file + + -- A. Maitland Bottoms Sat, 15 Aug 2015 17:43:15 -0400 + +volk (1.0.2-1) unstable; urgency=medium + + * Maintenance release 24 Jul 2015 by Nathan West + * The major change is the CMake logic to add ASM protokernels. Rather + than depending on CFLAGS and ASMFLAGS we use the results of VOLK's + built in has_ARCH tests. All configurations should work the same as + before, but manually specifying CFLAGS and ASMFLAGS on the cmake call + for ARM native builds should no longer be necessary. + * The 32fc_s32fc_x2_rotator_32fc generic protokernel now includes a + previously implied header. + * Finally, there is a fix to return the "best" protokernel to the + dispatcher when no volk_config exists. Thanks to Alexandre Raymond for + pointing this out. + * with maint branch patch: + kernels-add-missing-include-arm_neon.h + * removed unused build-dependency on liboil0.3-dev (closes: #793626) + + -- A. Maitland Bottoms Wed, 05 Aug 2015 00:43:40 -0400 + +volk (1.0.1-1) unstable; urgency=low + + * Maintenance Release v1.0.1 08 Jul 2015 by Nathan West + This is a maintenance release with bug fixes since the initial release of + v1.0 in April. + + * Contributors + + The following authors have contributed code to this release: + + Doug Geiger doug.geiger@bioradiation.net + Elliot Briggs elliot.briggs@gmail.com + Marcus Mueller marcus@hostalia.de + Nathan West nathan.west@okstate.edu + Tom Rondeau tom@trondeau.com + + * Kernels + + Several bug fixes in different kernels. The NEON implementations of the + following kernels have been fixed: + + 32f_x2_add_32f + 32f_x2_dot_prod_32f + 32fc_s32fc_multiply_32fc + 32fc_x2_multiply_32fc + + Additionally the NEON asm based 32f_x2_add_32f protokernels were not being + used and are now included and available for use via the dispatcher. + + The 32f_s32f_x2_fm_detect_32f kernel now has a puppet. This solves QA seg + faults on 32-bit machines and provide a better test for this kernel. + + The 32fc_s32fc_x2_rotator_32fc generic protokernel replaced cabsf with + hypotf for better Android support. + + * Building + + Static builds now trigger the applications (volk_profile and + volk-config-info) to be statically linked. + + The file gcc_x86_cpuid.h has been removed since it was no longer being + used. Previously it provided cpuid functionality for ancient compilers + that we do not support. + + All build types now use -Wall. + + * QA and Testing + + The documentation around the --update option to volk_profile now makes it + clear that the option will only profile kernels without entries in + volk_profile. The signature of run_volk_tests with expanded args changed + signed types to unsigned types to reflect the actual input. + + The remaining changes are all non-functional changes to address issues + from Coverity. + + -- A. Maitland Bottoms Fri, 10 Jul 2015 17:57:42 -0400 + +volk (1.0-5) unstable; urgency=medium + + * native-armv7-build-support skips neon on Debian armel (Closes: #789972) + + -- A. Maitland Bottoms Sat, 04 Jul 2015 12:36:36 -0400 + +volk (1.0-4) unstable; urgency=low + + * update native-armv7-build-support patch from gnuradio volk package + + -- A. Maitland Bottoms Thu, 25 Jun 2015 16:38:49 -0400 + +volk (1.0-3) unstable; urgency=medium + + * Add Breaks/Replaces (Closes: #789893, #789894) + * Allow failing tests + + -- A. Maitland Bottoms Thu, 25 Jun 2015 12:46:06 -0400 + +volk (1.0-2) unstable; urgency=medium + + * kernels-add-missing-math.h-include-to-rotator + + -- A. Maitland Bottoms Wed, 24 Jun 2015 21:09:32 -0400 + +volk (1.0-1) unstable; urgency=low + + * Initial package (Closes: #782417) + Initial Release 11 Apr 2015 by Nathan West + + VOLK 1.0 is available. This is the first release of VOLK as an independently + tracked sub-project of GNU Radio. + + * Contributors + + VOLK has been tracked separately from GNU Radio since 2014 Dec 23. + Contributors between the split and the initial release are + + Albert Holguin aholguin_77@yahoo.com + Doug Geiger doug.geiger@bioradiation.net + Elliot Briggs elliot.briggs@gmail.com + Julien Olivain julien.olivain@lsv.ens-cachan.fr + Michael Dickens michael.dickens@ettus.com + Nathan West nathan.west@okstate.edu + Tom Rondeau tom@trondeau.com + + * QA + + The test and profiler have significantly changed. The profiler supports + run-time changes to vlen and iters to help kernel development and provide + more flexibility on embedded systems. Additionally there is a new option + to update an existing volk_profile results file with only new kernels which + will save time when updating to newer versions of VOLK + + The QA system creates a static list of kernels and test cases. The QA + testing and profiler iterate over this static list rather than each source + file keeping its own list. The QA also emits XML results to + lib/.unittest/kernels.xml which is formatted similarly to JUnit results. + + * Modtool + + Modtool was updated to support the QA and profiler changes. + + * Kernels + + New proto-kernels: + + 16ic_deinterleave_real_8i_neon + 16ic_s32f_deinterleave_32f_neon + fix preprocessor errors for some compilers on byteswap and popcount puppets + + ORC was moved to the asm kernels directory. + volk_malloc + + The posix_memalign implementation of Volk_malloc now falls back to a standard + malloc if alignment is 1. + + * Miscellaneous + + Several build system and cmake changes have made it possible to build VOLK + both independently with proper soname versions and in-tree for projects + such as GNU Radio. + + The static builds take advantage of cmake object libraries to speed up builds. + + Finally, there are a number of changes to satisfy compiler warnings and make + QA work on multiple machines. + + -- A. Maitland Bottoms Sun, 12 Apr 2015 23:20:41 -0400 diff --git a/compat b/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +9 diff --git a/control b/control new file mode 100644 index 0000000..adacd97 --- /dev/null +++ b/control @@ -0,0 +1,68 @@ +Source: volk +Section: libdevel +Priority: extra +Maintainer: A. Maitland Bottoms +Build-Depends: cmake, + debhelper (>= 9.0.0~), + dh-acc, + dh-python, + doxygen, + libboost-filesystem-dev, + libboost-program-options-dev, + libboost-system-dev, + libboost-test-dev, + liborc-0.4-dev, + pkg-config, + python, + python-cheetah +Standards-Version: 3.9.6 +Homepage: http://libvolk.org +Vcs-Git: git://anonscm.debian.org/users/bottoms/pkg-volk.git +Vcs-Browser: http://anonscm.debian.org/cgit/users/bottoms/pkg-volk.git/ + +Package: libvolk1.3 +Section: libs +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: ${misc:Depends}, ${shlibs:Depends} +Multi-Arch: same +Recommends: libvolk1-bin +Suggests: libvolk1-dev +Description: vector optimized functions + Vector-Optimized Library of Kernels is designed to help + applications work with the processor's SIMD instruction sets. These are + very powerful vector operations that can give signal processing a + huge boost in performance. + +Package: libvolk1-dev +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: libvolk1.3 (=${binary:Version}), ${misc:Depends} +Breaks: gnuradio-dev (<<3.7.8), libvolk-dev, libvolk1.0-dev +Replaces: gnuradio-dev (<<3.7.8), libvolk-dev, libvolk1.0-dev +Description: vector optimized function headers + Vector-Optimized Library of Kernels is designed to help + applications work with the processor's SIMD instruction sets. These are + very powerful vector operations that can give signal processing a + huge boost in performance. + . + This package contains the header files. + For documentation, see libvolk-doc. + +Package: libvolk1-bin +Section: libs +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: libvolk1.3 (=${binary:Version}), + ${misc:Depends}, + ${python:Depends}, + ${shlibs:Depends} +Breaks: libvolk-bin, libvolk1.0-bin +Replaces: libvolk-bin, libvolk1.0-bin +Description: vector optimized runtime tools + Vector-Optimized Library of Kernels is designed to help + applications work with the processor's SIMD instruction sets. These are + very powerful vector operations that can give signal processing a + huge boost in performance. + . + This package includes the volk_profile tool. diff --git a/copyright b/copyright new file mode 100644 index 0000000..5cba9d0 --- /dev/null +++ b/copyright @@ -0,0 +1,130 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: volk +Upstream-Contact: http://libvolk.org/ +Source: + https://github.com/gnuradio/volk +Comment: + Debian packages by A. Maitland Bottoms + . + Upstream Authors: + Albert Holguin + Doug Geiger + Elliot Briggs + Julien Olivain + Michael Dickens + Nathan West + Tom Rondeau +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: apps/* cmake/* CMakeLists.txt docs/* Doxyfile.in DoxygenLayout.xml + gen/* include/* kernels/* lib/* python/* README tmpl/* volk.pc.in + .gitignore +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: COPYING +Copyright: 1989, 1991 Free Software Foundation, Inc. +License: COPYING + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Files: debian/* +Copyright: 2015 Free Software Foundation, Inc +Comment: assigned by A. Maitland Bottoms +License: GPL-3+ + +Files: cmake/msvc/inttypes.h cmake/msvc/stdint.h +Copyright: 2006 Alexander Chemeris +License: AC-BSD + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. The name of the author may be used to endorse or promote products + derived from this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: cmake/msvc/config.h cmake/msvc/stdbool.h +Copyright: 2005, 2006 Apple Computer, Inc. +License: LGPL-2+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + . + This library 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 + Library General Public License for more details. + . + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +Files: cmake/Modules/CMakeParseArgumentsCopy.cmake +Copyright: 2010 Alexander Neundorf +License: Kitware-BSD + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + * Neither the names of Kitware, Inc., the Insight Software Consortium, + nor the names of their contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: GPL-3+ + This program 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 of the License, or + (at your option) any later version. + . + This program 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, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/libvolk1-bin.install b/libvolk1-bin.install new file mode 100644 index 0000000..b8fc484 --- /dev/null +++ b/libvolk1-bin.install @@ -0,0 +1 @@ +usr/bin/volk* diff --git a/libvolk1-bin.manpages b/libvolk1-bin.manpages new file mode 100644 index 0000000..95bae9e --- /dev/null +++ b/libvolk1-bin.manpages @@ -0,0 +1,3 @@ +debian/volk-config-info.1 +debian/volk_modtool.1 +debian/volk_profile.1 diff --git a/libvolk1-dev.abi.tar.gz.amd64 b/libvolk1-dev.abi.tar.gz.amd64 new file mode 100644 index 0000000000000000000000000000000000000000..aec47f653bd50f08860578267ccbf92bcb62d048 GIT binary patch literal 51112 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 F5CFT$S8xCT literal 0 HcmV?d00001 diff --git a/libvolk1-dev.acc b/libvolk1-dev.acc new file mode 100644 index 0000000..465e6a5 --- /dev/null +++ b/libvolk1-dev.acc @@ -0,0 +1,12 @@ + + + + +debian/libvolk1-dev/usr/include/ + + + +debian/libvolk1.3/usr/lib/ + + + diff --git a/libvolk1-dev.install b/libvolk1-dev.install new file mode 100644 index 0000000..4b391be --- /dev/null +++ b/libvolk1-dev.install @@ -0,0 +1,4 @@ +usr/include/* +usr/lib/*/*volk*so +usr/lib/*/cmake/volk +usr/lib/*/pkgconfig/*volk* diff --git a/libvolk1.3.install b/libvolk1.3.install new file mode 100644 index 0000000..2c3cb05 --- /dev/null +++ b/libvolk1.3.install @@ -0,0 +1 @@ +usr/lib/*/libvolk.so.1.3 diff --git a/patches/install-all-headers b/patches/install-all-headers new file mode 100644 index 0000000..dfaed77 --- /dev/null +++ b/patches/install-all-headers @@ -0,0 +1,33 @@ +From: A. Maitland Bottoms +Subject: install all headers + +(Along with some sorting) + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -158,17 +158,20 @@ + ) + + install(FILES +- ${CMAKE_SOURCE_DIR}/include/volk/volk_prefs.h +- ${CMAKE_SOURCE_DIR}/include/volk/volk_complex.h +- ${CMAKE_SOURCE_DIR}/include/volk/volk_common.h ++ ${CMAKE_SOURCE_DIR}/include/volk/constants.h ++ ${CMAKE_SOURCE_DIR}/include/volk/saturation_arithmetic.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_avx_intrinsics.h +- ${CMAKE_SOURCE_DIR}/include/volk/volk_sse3_intrinsics.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_common.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_complex.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_malloc.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_neon_intrinsics.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_prefs.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_sse3_intrinsics.h ++ ${CMAKE_SOURCE_DIR}/include/volk/volk_sse_intrinsics.h + ${CMAKE_BINARY_DIR}/include/volk/volk.h + ${CMAKE_BINARY_DIR}/include/volk/volk_cpu.h + ${CMAKE_BINARY_DIR}/include/volk/volk_config_fixed.h + ${CMAKE_BINARY_DIR}/include/volk/volk_typedefs.h +- ${CMAKE_SOURCE_DIR}/include/volk/volk_malloc.h + DESTINATION include/volk + COMPONENT "volk_devel" + ) diff --git a/patches/make-acc-happy b/patches/make-acc-happy new file mode 100644 index 0000000..9ca7cb3 --- /dev/null +++ b/patches/make-acc-happy @@ -0,0 +1,53 @@ +From: A. Maitland Bottoms +Subject: make acc happy + +The abi-compliance-checker grabs all the .h files it finds +and tries to compile them all. Even though some are not +appropriate for the architecture being run on. Being careful +with preprocessor protections avoids probplems. + +--- a/kernels/volk/volk_32f_8u_polarbutterflypuppet_32f.h ++++ b/kernels/volk/volk_32f_8u_polarbutterflypuppet_32f.h +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + + static inline void +--- a/include/volk/volk_neon_intrinsics.h ++++ b/include/volk/volk_neon_intrinsics.h +@@ -27,6 +27,7 @@ + + #ifndef INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ + #define INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ ++#ifdef LV_HAVE_NEON + #include + + static inline float32x4_t +@@ -119,4 +120,5 @@ + return log2_approx; + } + ++#endif /*LV_HAVE_NEON*/ + #endif /* INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ */ +--- a/kernels/volk/volk_8u_x2_encodeframepolar_8u.h ++++ b/kernels/volk/volk_8u_x2_encodeframepolar_8u.h +@@ -58,8 +58,6 @@ + } + } + +-#ifdef LV_HAVE_GENERIC +- + static inline void + volk_8u_x2_encodeframepolar_8u_generic(unsigned char* frame, unsigned char* temp, + unsigned int frame_size) +@@ -79,7 +77,6 @@ + --stage; + } + } +-#endif /* LV_HAVE_GENERIC */ + + #ifdef LV_HAVE_SSSE3 + #include diff --git a/patches/native-armv7-build-support b/patches/native-armv7-build-support new file mode 100644 index 0000000..a0ce781 --- /dev/null +++ b/patches/native-armv7-build-support @@ -0,0 +1,59 @@ +From: A. Maitland Bottoms +Subject: native armv7 build support + +Debian, unlike other GNU Radio deployments, does not cross-compile +packages, but builds natively on a set of build machines, including +both arm and armhf. + +--- a/lib/CMakeLists.txt ++++ b/lib/CMakeLists.txt +@@ -250,6 +250,13 @@ + endif(NOT CPU_IS_x86) + + ######################################################################## ++# if building Debian armel, eliminate neon ++######################################################################## ++if(${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi") ++ OVERRULE_ARCH(neon "Architecture is not armhf") ++endif(${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi") ++ ++######################################################################## + # implement overruling in the ORC case, + # since ORC always passes flag detection + ######################################################################## +@@ -414,7 +421,7 @@ + # Handle ASM support + # on by default, but let users turn it off + ######################################################################## +-if(${CMAKE_VERSION} VERSION_GREATER "2.8.9") ++if((${CMAKE_VERSION} VERSION_GREATER "2.8.9") AND NOT (${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi")) + set(ASM_ARCHS_AVAILABLE "neon") + + set(FULL_C_FLAGS "${CMAKE_C_FLAGS}" "${CMAKE_CXX_COMPILER_ARG1}") +@@ -424,7 +431,7 @@ + # set up the assembler flags and include the source files + foreach(ARCH ${ASM_ARCHS_AVAILABLE}) + string(REGEX MATCH "${ARCH}" ASM_ARCH "${available_archs}") +- if( ASM_ARCH STREQUAL "neon" ) ++ if(( ASM_ARCH STREQUAL "neon" ) OR ( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7")) + message(STATUS "---- Adding ASM files") # we always use ATT syntax + message(STATUS "-- Detected neon architecture; enabling ASM") + # setup architecture specific assembler flags +@@ -443,7 +450,7 @@ + message(STATUS "asm flags: ${CMAKE_ASM_FLAGS}") + endforeach(ARCH) + +-else(${CMAKE_VERSION} VERSION_GREATER "2.8.9") ++else((${CMAKE_VERSION} VERSION_GREATER "2.8.9") AND NOT (${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi")) + message(STATUS "Not enabling ASM support. CMake >= 2.8.10 required.") + foreach(machine_name ${available_machines}) + string(REGEX MATCH "neon" NEON_MACHINE ${machine_name}) +@@ -451,7 +458,7 @@ + message(FATAL_ERROR "CMake >= 2.8.10 is required for ARM NEON support") + endif() + endforeach() +-endif(${CMAKE_VERSION} VERSION_GREATER "2.8.9") ++endif((${CMAKE_VERSION} VERSION_GREATER "2.8.9") AND NOT (${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi")) + + ######################################################################## + # Handle orc support diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..dab9969 --- /dev/null +++ b/patches/series @@ -0,0 +1,4 @@ +native-armv7-build-support +make-acc-happy +sort-cmake-glob-lists +install-all-headers diff --git a/patches/sort-cmake-glob-lists b/patches/sort-cmake-glob-lists new file mode 100644 index 0000000..dfb8699 --- /dev/null +++ b/patches/sort-cmake-glob-lists @@ -0,0 +1,20 @@ +From: A. Maitland Bottoms +Subject sort cmake glob lists + +File lists are generated in a CMakeLists.txt file with file(GLOB ...), which varies +with the readdir() order. Sorting the lists should help make reproducinble builds. + +--- a/lib/CMakeLists.txt ++++ b/lib/CMakeLists.txt +@@ -328,8 +328,11 @@ + + #dependencies are all python, xml, and header implementation files + file(GLOB xml_files ${PROJECT_SOURCE_DIR}/gen/*.xml) ++list(SORT xml_files) + file(GLOB py_files ${PROJECT_SOURCE_DIR}/gen/*.py) ++list(SORT py_files) + file(GLOB h_files ${PROJECT_SOURCE_DIR}/kernels/volk/*.h) ++list(SORT h_files) + + macro(gen_template tmpl output) + list(APPEND volk_gen_sources ${output}) diff --git a/rules b/rules new file mode 100755 index 0000000..2cb0375 --- /dev/null +++ b/rules @@ -0,0 +1,17 @@ +#!/usr/bin/make -f +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +export DEB_HOST_MULTIARCH +DH_VERBOSE=1 +export DH_VERBOSE + +%: + dh $@ --with python2 --with acc + +override_dh_auto_configure: + dh_auto_configure -- -DLIB_SUFFIX="/$(DEB_HOST_MULTIARCH)" -DPYTHON_EXECUTABLE=/usr/bin/python + +override_dh_auto_test: + - dh_auto_test -- CTEST_TEST_TIMEOUT=60 + +override_dh_acc: + - dh_acc diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/source/include-binaries b/source/include-binaries new file mode 100644 index 0000000..bc68a00 --- /dev/null +++ b/source/include-binaries @@ -0,0 +1 @@ +debian/libvolk1-dev.abi.tar.gz.amd64 diff --git a/upstream/signing-key.asc b/upstream/signing-key.asc new file mode 100644 index 0000000..f6d7f93 --- /dev/null +++ b/upstream/signing-key.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +CLIM6szb01rYgHTn9/vDgJE= +=MlbD +-----END PGP PUBLIC KEY BLOCK----- diff --git a/volk-config-info.1 b/volk-config-info.1 new file mode 100644 index 0000000..e8d6efd --- /dev/null +++ b/volk-config-info.1 @@ -0,0 +1,45 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.10. +.TH VOLK-CONFIG-INFO "1" "July 2014" "volk-config-info 0.1" "User Commands" +.SH NAME +volk-config-info \- pkgconfig-like tool for Vector Optimized Library of Kernels 0.1 +.SH DESCRIPTION +.SS "Program options: volk-config-info [options]:" +.TP +\fB\-h\fR [ \fB\-\-help\fR ] +print help message +.TP +\fB\-\-prefix\fR +print VOLK installation prefix +.TP +\fB\-\-builddate\fR +print VOLK build date (RFC2822 format) +.TP +\fB\-\-cc\fR +print VOLK C compiler version +.TP +\fB\-\-cflags\fR +print VOLK CFLAGS +.TP +\fB\-\-all\-machines\fR +print VOLK machines built into library +.TP +\fB\-\-avail\-machines\fR +print VOLK machines the current platform can use +.TP +\fB\-\-machine\fR +print the VOLK machine that will be used +.TP +\fB\-v\fR [ \fB\-\-version\fR ] +print VOLK version +.SH "SEE ALSO" +The full documentation for +.B volk-config-info +is maintained as a Texinfo manual. If the +.B info +and +.B volk-config-info +programs are properly installed at your site, the command +.IP +.B info volk-config-info +.PP +should give you access to the complete manual. diff --git a/volk_modtool.1 b/volk_modtool.1 new file mode 100644 index 0000000..752e7f5 --- /dev/null +++ b/volk_modtool.1 @@ -0,0 +1,112 @@ +.TH GNURADIO "1" "August 2013" "volk_modtool 3.7" "User Commands" +.SH NAME +volk_modtool \- tailor VOLK modules +.SH DESCRIPTION +The volk_modtool tool is installed along with VOLK as a way of helping +to construct, add to, and interogate the VOLK library or companion +libraries. +.P +volk_modtool is installed into $prefix/bin. +.P +VOLK modtool enables creating standalone (out-of-tree) VOLK modules +and provides a few tools for sharing VOLK kernels between VOLK +modules. If you need to design or work with VOLK kernels away from +the canonical VOLK library, this is the tool. If you need to tailor +your own VOLK library for whatever reason, this is the tool. +.P +The canonical VOLK library installs a volk.h and a libvolk.so. Your +own library will install volk_$name.h and libvolk_$name.so. Ya Gronk? +Good. +.P +There isn't a substantial difference between the canonical VOLK +module and any other VOLK module. They're all peers. Any module +created via VOLK modtool will come complete with a default +volk_modtool.cfg file associating the module with the base from which +it came, its distinctive $name and its destination (or path). These +values (created from user input if VOLK modtool runs without a +user-supplied config file or a default config file) serve as default +values for some VOLK modtool actions. It's more or less intended for +the user to change directories to the top level of a created VOLK +module and then run volk_modtool to take advantage of the values +stored in the default volk_modtool.cfg file. +.P +Apart from creating new VOLK modules, VOLK modtool allows you to list +the names of kernels in other modules, list the names of kernels in +the current module, add kernels from another module into the current +module, and remove kernels from the current module. When moving +kernels between modules, VOLK modtool does its best to keep the qa +and profiling code for those kernels intact. If the base has a test +or a profiling call for some kernel, those calls will follow the +kernel when VOLK modtool adds that kernel. If QA or profiling +requires a puppet kernel, the puppet kernel will follow the original +kernel when VOLK modtool adds that original kernel. VOLK modtool +respects puppets. +.P +====================================================================== +.P +.SH Installing a new VOLK Library: +.P +Run the command "volk_modtool -i". This will ask you three questions: +.P + name: // the name to give your VOLK library: volk_ + destination: // directory new source tree is built under -- must exists. + // It will create /volk_ + base: // the directory containing the original VOLK source code +.P +This will build a new skeleton directory in the destination provided +with the name volk_. It will contain the necessary structure to +build: +.P + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=/opt/volk ../ + make + sudo make install +.P +Right now, the library is empty and contains no kernels. Kernels can +be added from another VOLK library using the '-a' option. If not +specified, the kernel will be extracted from the base VOLK +directory. Using the '-b' allows us to specify another VOLK library to +use for this purpose. +.P + volk_modtool -a -n 32fc_x2_conjugate_dot_prod_32fc +.P +This will put the code for the new kernel into +/volk_/kernels/volk_/ +.P +Other kernels must be added by hand. See the following webpages for +more information about creating VOLK kernels: + http://gnuradio.org/doc/doxygen/volk_guide.html + http://gnuradio.org/redmine/projects/gnuradio/wiki/Volk +.P +====================================================================== +.P +.SH OPTIONS +.P +Options for Adding and Removing Kernels: + -a, --add_kernel + Add kernel from existing VOLK module. Uses the base VOLK module + unless -b is used. Use -n to specify the kernel name. + Requires: -n. + Optional: -b +.P + -A, --add_all_kernels + Add all kernels from existing VOLK module. Uses the base VOLK + module unless -b is used. + Optional: -b +.P + -x, --remove_kernel + Remove kernel from module. + Required: -n. + Optional: -b +.P +Options for Listing Kernels: + -l, --list + Lists all kernels available in the base VOLK module. +.P + -k, --kernels + Lists all kernels in this VOLK module. +.P + -r, --remote-list + Lists all kernels in another VOLK module that is specified + using the -b option. diff --git a/volk_profile.1 b/volk_profile.1 new file mode 100644 index 0000000..405facb --- /dev/null +++ b/volk_profile.1 @@ -0,0 +1,5 @@ +.TH UHD_FFT "1" "March 2012" "volk_profile 3.5" "User Commands" +.SH NAME +volk_profile \- Quality Assurance application for libvolk functions +.SH DESCRIPTION +Writes profile results to a file. diff --git a/watch b/watch new file mode 100644 index 0000000..d755268 --- /dev/null +++ b/watch @@ -0,0 +1,3 @@ +version=3 +opts="pgpsigurlmangle=s/$/.asc/" \ + http://libvolk.org/releases/volk-(\d\S*)\.tar\.gz From fcecf862377a64d8569e7efbdb74bc91b44da015 Mon Sep 17 00:00:00 2001 From: "A. Maitland Bottoms" Date: Sat, 2 Jul 2016 20:30:47 +0000 Subject: [PATCH 002/217] Import volk_1.3.orig.tar.gz [dgit import orig volk_1.3.orig.tar.gz] --- .gitignore | 4 + CMakeLists.txt | 295 ++ COPYING | 674 +++++ Doxyfile.in | 2364 +++++++++++++++++ DoxygenLayout.xml | 196 ++ README | 46 + apps/CMakeLists.txt | 85 + apps/volk-config-info.cc | 111 + apps/volk_profile.cc | 380 +++ apps/volk_profile.h | 7 + cmake/Modules/CMakeParseArgumentsCopy.cmake | 138 + cmake/Modules/FindORC.cmake | 36 + cmake/Modules/VolkAddTest.cmake | 205 ++ cmake/Modules/VolkBoost.cmake | 98 + cmake/Modules/VolkBuildTypes.cmake | 189 ++ cmake/Modules/VolkConfig.cmake.in | 28 + cmake/Modules/VolkConfigVersion.cmake.in | 34 + cmake/Modules/VolkPython.cmake | 236 ++ cmake/Modules/VolkVersion.cmake | 89 + .../arm_cortex_a8_softfp_native.cmake | 8 + cmake/Toolchains/oe-sdk_cross.cmake | 15 + cmake/cmake_uninstall.cmake.in | 32 + cmake/msvc/config.h | 58 + cmake/msvc/inttypes.h | 301 +++ cmake/msvc/stdbool.h | 45 + cmake/msvc/stdint.h | 251 ++ docs/extending_volk.dox | 87 + docs/kernels.dox | 105 + docs/main_page.dox | 17 + docs/terms_and_techniques.dox | 112 + docs/using_volk.dox | 26 + gen/archs.xml | 229 ++ gen/machines.xml | 46 + gen/volk_arch_defs.py | 85 + gen/volk_compile_utils.py | 58 + gen/volk_kernel_defs.py | 209 ++ gen/volk_machine_defs.py | 74 + gen/volk_tmpl_utils.py | 74 + include/volk/constants.h | 38 + include/volk/saturation_arithmetic.h | 49 + include/volk/volk_avx_intrinsics.h | 71 + include/volk/volk_common.h | 112 + include/volk/volk_complex.h | 86 + include/volk/volk_malloc.h | 66 + include/volk/volk_neon_intrinsics.h | 122 + include/volk/volk_prefs.h | 29 + include/volk/volk_sse3_intrinsics.h | 64 + include/volk/volk_sse_intrinsics.h | 49 + kernels/README.txt | 67 + .../neon/volk_16i_max_star_horizontal_16i.s | 52 + .../neon/volk_32f_s32f_multiply_32f_neonasm.s | 52 + .../asm/neon/volk_32f_x2_add_32f_neonasm.s | 54 + .../neon/volk_32f_x2_add_32f_neonpipeline.s | 65 + .../neon/volk_32f_x2_dot_prod_32f_neonasm.s | 58 + .../volk_32f_x2_dot_prod_32f_neonasm_opts.s | 116 + .../volk_32fc_32f_dot_prod_32fc_a_neonasm.s | 79 + ...olk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s | 74 + ...lk_32fc_32f_dot_prod_32fc_a_neonpipeline.s | 97 + .../volk_32fc_32f_dot_prod_32fc_unrollasm.s | 146 + .../neon/volk_32fc_x2_dot_prod_32fc_neonasm.s | 98 + ...k_32fc_x2_dot_prod_32fc_neonasm_opttests.s | 96 + .../neon/volk_32fc_x2_multiply_32fc_neonasm.s | 47 + ...lk_16ic_deinterleave_16i_x2_a_orc_impl.orc | 5 + ...k_16ic_deinterleave_real_8i_a_orc_impl.orc | 6 + .../volk_16ic_magnitude_16i_a_orc_impl.orc | 23 + ...ic_s32f_deinterleave_32f_x2_a_orc_impl.orc | 12 + ..._16sc_magnitude_32f_aligned16_orc_impl.orc | 25 + .../asm/orc/volk_16u_byteswap_a_orc_impl.orc | 3 + .../volk_32f_s32f_multiply_32f_a_orc_impl.orc | 5 + .../volk_32f_s32f_normalize_a_orc_impl.orc | 5 + .../asm/orc/volk_32f_sqrt_32f_a_orc_impl.orc | 4 + .../orc/volk_32f_x2_add_32f_a_orc_impl.orc | 5 + .../orc/volk_32f_x2_divide_32f_a_orc_impl.orc | 5 + .../volk_32f_x2_dot_prod_32f_a_orc_impl.orc | 6 + .../orc/volk_32f_x2_max_32f_a_orc_impl.orc | 5 + .../orc/volk_32f_x2_min_32f_a_orc_impl.orc | 5 + .../volk_32f_x2_multiply_32f_a_orc_impl.orc | 5 + .../volk_32f_x2_subtract_32f_a_orc_impl.orc | 5 + ...volk_32fc_32f_multiply_32fc_a_orc_impl.orc | 7 + .../volk_32fc_magnitude_32f_a_orc_impl.orc | 13 + ...olk_32fc_s32f_magnitude_16i_a_orc_impl.orc | 23 + ...lk_32fc_s32fc_multiply_32fc_a_orc_impl.orc | 18 + .../volk_32fc_x2_multiply_32fc_a_orc_impl.orc | 18 + .../orc/volk_32i_x2_and_32i_a_orc_impl.orc | 5 + .../asm/orc/volk_32i_x2_or_32i_a_orc_impl.orc | 5 + .../orc/volk_8i_convert_16i_a_orc_impl.orc | 6 + .../volk_8i_s32f_convert_32f_a_orc_impl.orc | 11 + kernels/volk/volk_16i_32fc_dot_prod_32fc.h | 309 +++ kernels/volk/volk_16i_branch_4_state_8.h | 228 ++ kernels/volk/volk_16i_convert_8i.h | 215 ++ kernels/volk/volk_16i_max_star_16i.h | 183 ++ .../volk/volk_16i_max_star_horizontal_16i.h | 213 ++ .../volk/volk_16i_permute_and_scalar_add.h | 196 ++ kernels/volk/volk_16i_s32f_convert_32f.h | 415 +++ kernels/volk/volk_16i_x4_quad_max_star_16i.h | 292 ++ kernels/volk/volk_16i_x5_add_quad_16i_x4.h | 242 ++ kernels/volk/volk_16ic_convert_32fc.h | 216 ++ kernels/volk/volk_16ic_deinterleave_16i_x2.h | 195 ++ .../volk/volk_16ic_deinterleave_real_16i.h | 161 ++ kernels/volk/volk_16ic_deinterleave_real_8i.h | 168 ++ kernels/volk/volk_16ic_magnitude_16i.h | 233 ++ .../volk/volk_16ic_s32f_deinterleave_32f_x2.h | 195 ++ .../volk_16ic_s32f_deinterleave_real_32f.h | 169 ++ kernels/volk/volk_16ic_s32f_magnitude_32f.h | 225 ++ kernels/volk/volk_16ic_x2_dot_prod_16ic.h | 550 ++++ kernels/volk/volk_16ic_x2_multiply_16ic.h | 326 +++ kernels/volk/volk_16u_byteswap.h | 318 +++ kernels/volk/volk_16u_byteswappuppet_16u.h | 72 + kernels/volk/volk_32f_8u_polarbutterfly_32f.h | 346 +++ .../volk_32f_8u_polarbutterflypuppet_32f.h | 133 + kernels/volk/volk_32f_accumulator_s32f.h | 128 + kernels/volk/volk_32f_acos_32f.h | 231 ++ kernels/volk/volk_32f_asin_32f.h | 224 ++ kernels/volk/volk_32f_atan_32f.h | 220 ++ kernels/volk/volk_32f_binary_slicer_32i.h | 277 ++ kernels/volk/volk_32f_binary_slicer_8i.h | 469 ++++ kernels/volk/volk_32f_convert_64f.h | 246 ++ kernels/volk/volk_32f_cos_32f.h | 324 +++ kernels/volk/volk_32f_expfast_32f.h | 243 ++ kernels/volk/volk_32f_index_max_16u.h | 231 ++ kernels/volk/volk_32f_index_max_32u.h | 220 ++ kernels/volk/volk_32f_invsqrt_32f.h | 220 ++ kernels/volk/volk_32f_log2_32f.h | 348 +++ kernels/volk/volk_32f_null_32f.h | 45 + .../volk/volk_32f_s32f_32f_fm_detect_32f.h | 161 ++ ...k_32f_s32f_calc_spectral_noise_floor_32f.h | 217 ++ kernels/volk/volk_32f_s32f_convert_16i.h | 457 ++++ kernels/volk/volk_32f_s32f_convert_32i.h | 384 +++ kernels/volk/volk_32f_s32f_convert_8i.h | 365 +++ kernels/volk/volk_32f_s32f_multiply_32f.h | 295 ++ kernels/volk/volk_32f_s32f_normalize.h | 133 + kernels/volk/volk_32f_s32f_power_32f.h | 205 ++ kernels/volk/volk_32f_s32f_stddev_32f.h | 205 ++ kernels/volk/volk_32f_sin_32f.h | 253 ++ kernels/volk/volk_32f_sqrt_32f.h | 164 ++ .../volk/volk_32f_stddev_and_mean_32f_x2.h | 236 ++ kernels/volk/volk_32f_tan_32f.h | 264 ++ kernels/volk/volk_32f_tanh_32f.h | 338 +++ kernels/volk/volk_32f_x2_add_32f.h | 256 ++ kernels/volk/volk_32f_x2_divide_32f.h | 147 + kernels/volk/volk_32f_x2_dot_prod_16i.h | 222 ++ kernels/volk/volk_32f_x2_dot_prod_32f.h | 784 ++++++ .../volk/volk_32f_x2_fm_detectpuppet_32f.h | 51 + kernels/volk/volk_32f_x2_interleave_32fc.h | 170 ++ kernels/volk/volk_32f_x2_max_32f.h | 182 ++ kernels/volk/volk_32f_x2_min_32f.h | 185 ++ kernels/volk/volk_32f_x2_multiply_32f.h | 310 +++ kernels/volk/volk_32f_x2_pow_32f.h | 335 +++ .../volk/volk_32f_x2_s32f_interleave_16ic.h | 216 ++ kernels/volk/volk_32f_x2_subtract_32f.h | 178 ++ kernels/volk/volk_32f_x3_sum_of_poly_32f.h | 514 ++++ kernels/volk/volk_32fc_32f_dot_prod_32fc.h | 581 ++++ kernels/volk/volk_32fc_32f_multiply_32fc.h | 233 ++ kernels/volk/volk_32fc_conjugate_32fc.h | 286 ++ kernels/volk/volk_32fc_convert_16ic.h | 247 ++ kernels/volk/volk_32fc_deinterleave_32f_x2.h | 213 ++ kernels/volk/volk_32fc_deinterleave_64f_x2.h | 310 +++ .../volk/volk_32fc_deinterleave_imag_32f.h | 198 ++ .../volk/volk_32fc_deinterleave_real_32f.h | 159 ++ .../volk/volk_32fc_deinterleave_real_64f.h | 130 + kernels/volk/volk_32fc_index_max_16u.h | 266 ++ kernels/volk/volk_32fc_index_max_32u.h | 253 ++ kernels/volk/volk_32fc_magnitude_32f.h | 468 ++++ .../volk/volk_32fc_magnitude_squared_32f.h | 382 +++ kernels/volk/volk_32fc_s32f_atan2_32f.h | 211 ++ .../volk_32fc_s32f_deinterleave_real_16i.h | 146 + kernels/volk/volk_32fc_s32f_magnitude_16i.h | 225 ++ kernels/volk/volk_32fc_s32f_power_32fc.h | 159 ++ .../volk/volk_32fc_s32f_power_spectrum_32f.h | 167 ++ ..._32fc_s32f_x2_power_spectral_density_32f.h | 268 ++ kernels/volk/volk_32fc_s32fc_multiply_32fc.h | 337 +++ .../volk/volk_32fc_s32fc_rotatorpuppet_32fc.h | 88 + .../volk/volk_32fc_s32fc_x2_rotator_32fc.h | 539 ++++ .../volk_32fc_x2_conjugate_dot_prod_32fc.h | 605 +++++ kernels/volk/volk_32fc_x2_divide_32fc.h | 337 +++ kernels/volk/volk_32fc_x2_dot_prod_32fc.h | 1151 ++++++++ kernels/volk/volk_32fc_x2_multiply_32fc.h | 472 ++++ .../volk_32fc_x2_multiply_conjugate_32fc.h | 315 +++ ...32fc_x2_s32f_square_dist_scalar_mult_32f.h | 204 ++ kernels/volk/volk_32fc_x2_square_dist_32f.h | 227 ++ kernels/volk/volk_32i_s32f_convert_32f.h | 193 ++ kernels/volk/volk_32i_x2_and_32i.h | 187 ++ kernels/volk/volk_32i_x2_or_32i.h | 187 ++ kernels/volk/volk_32u_byteswap.h | 329 +++ kernels/volk/volk_32u_byteswappuppet_32u.h | 62 + kernels/volk/volk_32u_popcnt.h | 94 + kernels/volk/volk_32u_popcntpuppet_32u.h | 47 + kernels/volk/volk_64f_convert_32f.h | 177 ++ kernels/volk/volk_64f_x2_max_64f.h | 136 + kernels/volk/volk_64f_x2_min_64f.h | 136 + kernels/volk/volk_64u_byteswap.h | 470 ++++ kernels/volk/volk_64u_byteswappuppet_64u.h | 81 + kernels/volk/volk_64u_popcnt.h | 134 + kernels/volk/volk_64u_popcntpuppet_64u.h | 60 + kernels/volk/volk_8i_convert_16i.h | 235 ++ kernels/volk/volk_8i_s32f_convert_32f.h | 238 ++ kernels/volk/volk_8ic_deinterleave_16i_x2.h | 188 ++ kernels/volk/volk_8ic_deinterleave_real_16i.h | 159 ++ kernels/volk/volk_8ic_deinterleave_real_8i.h | 197 ++ .../volk/volk_8ic_s32f_deinterleave_32f_x2.h | 212 ++ .../volk_8ic_s32f_deinterleave_real_32f.h | 179 ++ .../volk_8ic_x2_multiply_conjugate_16ic.h | 123 + ...volk_8ic_x2_s32f_multiply_conjugate_32fc.h | 172 ++ kernels/volk/volk_8u_conv_k7_r2puppet_8u.h | 264 ++ kernels/volk/volk_8u_x2_encodeframepolar_8u.h | 323 +++ kernels/volk/volk_8u_x3_encodepolar_8u_x2.h | 139 + .../volk/volk_8u_x3_encodepolarpuppet_8u.h | 105 + kernels/volk/volk_8u_x4_conv_k7_r2_8u.h | 451 ++++ lib/CMakeLists.txt | 610 +++++ lib/constants.c.in | 57 + lib/kernel_tests.h | 147 + lib/qa_utils.cc | 600 +++++ lib/qa_utils.h | 145 + lib/testqa.cc | 128 + lib/volk_malloc.c | 129 + lib/volk_prefs.c | 59 + lib/volk_rank_archs.c | 105 + lib/volk_rank_archs.h | 50 + python/volk_modtool/CMakeLists.txt | 39 + python/volk_modtool/README | 114 + python/volk_modtool/__init__.py | 24 + python/volk_modtool/cfg.py | 104 + python/volk_modtool/volk_modtool | 128 + python/volk_modtool/volk_modtool_generate.py | 312 +++ tmpl/volk.tmpl.c | 212 ++ tmpl/volk.tmpl.h | 94 + tmpl/volk_config_fixed.tmpl.h | 29 + tmpl/volk_cpu.tmpl.c | 202 ++ tmpl/volk_cpu.tmpl.h | 42 + tmpl/volk_machine_xxx.tmpl.c | 79 + tmpl/volk_machines.tmpl.c | 34 + tmpl/volk_machines.tmpl.h | 55 + tmpl/volk_typedefs.tmpl.h | 32 + volk.pc.in | 13 + 234 files changed, 43315 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 Doxyfile.in create mode 100644 DoxygenLayout.xml create mode 100644 README create mode 100644 apps/CMakeLists.txt create mode 100644 apps/volk-config-info.cc create mode 100644 apps/volk_profile.cc create mode 100644 apps/volk_profile.h create mode 100644 cmake/Modules/CMakeParseArgumentsCopy.cmake create mode 100644 cmake/Modules/FindORC.cmake create mode 100644 cmake/Modules/VolkAddTest.cmake create mode 100644 cmake/Modules/VolkBoost.cmake create mode 100644 cmake/Modules/VolkBuildTypes.cmake create mode 100644 cmake/Modules/VolkConfig.cmake.in create mode 100644 cmake/Modules/VolkConfigVersion.cmake.in create mode 100644 cmake/Modules/VolkPython.cmake create mode 100644 cmake/Modules/VolkVersion.cmake create mode 100644 cmake/Toolchains/arm_cortex_a8_softfp_native.cmake create mode 100644 cmake/Toolchains/oe-sdk_cross.cmake create mode 100644 cmake/cmake_uninstall.cmake.in create mode 100644 cmake/msvc/config.h create mode 100644 cmake/msvc/inttypes.h create mode 100644 cmake/msvc/stdbool.h create mode 100644 cmake/msvc/stdint.h create mode 100644 docs/extending_volk.dox create mode 100644 docs/kernels.dox create mode 100644 docs/main_page.dox create mode 100644 docs/terms_and_techniques.dox create mode 100644 docs/using_volk.dox create mode 100644 gen/archs.xml create mode 100644 gen/machines.xml create mode 100644 gen/volk_arch_defs.py create mode 100644 gen/volk_compile_utils.py create mode 100644 gen/volk_kernel_defs.py create mode 100644 gen/volk_machine_defs.py create mode 100644 gen/volk_tmpl_utils.py create mode 100644 include/volk/constants.h create mode 100644 include/volk/saturation_arithmetic.h create mode 100644 include/volk/volk_avx_intrinsics.h create mode 100644 include/volk/volk_common.h create mode 100644 include/volk/volk_complex.h create mode 100644 include/volk/volk_malloc.h create mode 100644 include/volk/volk_neon_intrinsics.h create mode 100644 include/volk/volk_prefs.h create mode 100644 include/volk/volk_sse3_intrinsics.h create mode 100644 include/volk/volk_sse_intrinsics.h create mode 100644 kernels/README.txt create mode 100644 kernels/volk/asm/neon/volk_16i_max_star_horizontal_16i.s create mode 100644 kernels/volk/asm/neon/volk_32f_s32f_multiply_32f_neonasm.s create mode 100644 kernels/volk/asm/neon/volk_32f_x2_add_32f_neonasm.s create mode 100644 kernels/volk/asm/neon/volk_32f_x2_add_32f_neonpipeline.s create mode 100644 kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm.s create mode 100644 kernels/volk/asm/neon/volk_32f_x2_dot_prod_32f_neonasm_opts.s create mode 100644 kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasm.s create mode 100644 kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonasmvmla.s create mode 100644 kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_a_neonpipeline.s create mode 100644 kernels/volk/asm/neon/volk_32fc_32f_dot_prod_32fc_unrollasm.s create mode 100644 kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm.s create mode 100644 kernels/volk/asm/neon/volk_32fc_x2_dot_prod_32fc_neonasm_opttests.s create mode 100644 kernels/volk/asm/neon/volk_32fc_x2_multiply_32fc_neonasm.s create mode 100644 kernels/volk/asm/orc/volk_16ic_deinterleave_16i_x2_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_16ic_deinterleave_real_8i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_16ic_magnitude_16i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_16ic_s32f_deinterleave_32f_x2_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_16sc_magnitude_32f_aligned16_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_16u_byteswap_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_s32f_multiply_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_s32f_normalize_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_sqrt_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_add_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_divide_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_dot_prod_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_max_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_min_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_multiply_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32f_x2_subtract_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32fc_32f_multiply_32fc_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32fc_magnitude_32f_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32fc_s32f_magnitude_16i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32fc_s32fc_multiply_32fc_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32fc_x2_multiply_32fc_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32i_x2_and_32i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_32i_x2_or_32i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_8i_convert_16i_a_orc_impl.orc create mode 100644 kernels/volk/asm/orc/volk_8i_s32f_convert_32f_a_orc_impl.orc create mode 100644 kernels/volk/volk_16i_32fc_dot_prod_32fc.h create mode 100644 kernels/volk/volk_16i_branch_4_state_8.h create mode 100644 kernels/volk/volk_16i_convert_8i.h create mode 100644 kernels/volk/volk_16i_max_star_16i.h create mode 100644 kernels/volk/volk_16i_max_star_horizontal_16i.h create mode 100644 kernels/volk/volk_16i_permute_and_scalar_add.h create mode 100644 kernels/volk/volk_16i_s32f_convert_32f.h create mode 100644 kernels/volk/volk_16i_x4_quad_max_star_16i.h create mode 100644 kernels/volk/volk_16i_x5_add_quad_16i_x4.h create mode 100644 kernels/volk/volk_16ic_convert_32fc.h create mode 100644 kernels/volk/volk_16ic_deinterleave_16i_x2.h create mode 100644 kernels/volk/volk_16ic_deinterleave_real_16i.h create mode 100644 kernels/volk/volk_16ic_deinterleave_real_8i.h create mode 100644 kernels/volk/volk_16ic_magnitude_16i.h create mode 100644 kernels/volk/volk_16ic_s32f_deinterleave_32f_x2.h create mode 100644 kernels/volk/volk_16ic_s32f_deinterleave_real_32f.h create mode 100644 kernels/volk/volk_16ic_s32f_magnitude_32f.h create mode 100644 kernels/volk/volk_16ic_x2_dot_prod_16ic.h create mode 100644 kernels/volk/volk_16ic_x2_multiply_16ic.h create mode 100644 kernels/volk/volk_16u_byteswap.h create mode 100644 kernels/volk/volk_16u_byteswappuppet_16u.h create mode 100644 kernels/volk/volk_32f_8u_polarbutterfly_32f.h create mode 100644 kernels/volk/volk_32f_8u_polarbutterflypuppet_32f.h create mode 100644 kernels/volk/volk_32f_accumulator_s32f.h create mode 100644 kernels/volk/volk_32f_acos_32f.h create mode 100644 kernels/volk/volk_32f_asin_32f.h create mode 100644 kernels/volk/volk_32f_atan_32f.h create mode 100644 kernels/volk/volk_32f_binary_slicer_32i.h create mode 100644 kernels/volk/volk_32f_binary_slicer_8i.h create mode 100644 kernels/volk/volk_32f_convert_64f.h create mode 100644 kernels/volk/volk_32f_cos_32f.h create mode 100644 kernels/volk/volk_32f_expfast_32f.h create mode 100644 kernels/volk/volk_32f_index_max_16u.h create mode 100644 kernels/volk/volk_32f_index_max_32u.h create mode 100644 kernels/volk/volk_32f_invsqrt_32f.h create mode 100644 kernels/volk/volk_32f_log2_32f.h create mode 100644 kernels/volk/volk_32f_null_32f.h create mode 100644 kernels/volk/volk_32f_s32f_32f_fm_detect_32f.h create mode 100644 kernels/volk/volk_32f_s32f_calc_spectral_noise_floor_32f.h create mode 100644 kernels/volk/volk_32f_s32f_convert_16i.h create mode 100644 kernels/volk/volk_32f_s32f_convert_32i.h create mode 100644 kernels/volk/volk_32f_s32f_convert_8i.h create mode 100644 kernels/volk/volk_32f_s32f_multiply_32f.h create mode 100644 kernels/volk/volk_32f_s32f_normalize.h create mode 100644 kernels/volk/volk_32f_s32f_power_32f.h create mode 100644 kernels/volk/volk_32f_s32f_stddev_32f.h create mode 100644 kernels/volk/volk_32f_sin_32f.h create mode 100644 kernels/volk/volk_32f_sqrt_32f.h create mode 100644 kernels/volk/volk_32f_stddev_and_mean_32f_x2.h create mode 100644 kernels/volk/volk_32f_tan_32f.h create mode 100644 kernels/volk/volk_32f_tanh_32f.h create mode 100644 kernels/volk/volk_32f_x2_add_32f.h create mode 100644 kernels/volk/volk_32f_x2_divide_32f.h create mode 100644 kernels/volk/volk_32f_x2_dot_prod_16i.h create mode 100644 kernels/volk/volk_32f_x2_dot_prod_32f.h create mode 100644 kernels/volk/volk_32f_x2_fm_detectpuppet_32f.h create mode 100644 kernels/volk/volk_32f_x2_interleave_32fc.h create mode 100644 kernels/volk/volk_32f_x2_max_32f.h create mode 100644 kernels/volk/volk_32f_x2_min_32f.h create mode 100644 kernels/volk/volk_32f_x2_multiply_32f.h create mode 100644 kernels/volk/volk_32f_x2_pow_32f.h create mode 100644 kernels/volk/volk_32f_x2_s32f_interleave_16ic.h create mode 100644 kernels/volk/volk_32f_x2_subtract_32f.h create mode 100644 kernels/volk/volk_32f_x3_sum_of_poly_32f.h create mode 100644 kernels/volk/volk_32fc_32f_dot_prod_32fc.h create mode 100644 kernels/volk/volk_32fc_32f_multiply_32fc.h create mode 100644 kernels/volk/volk_32fc_conjugate_32fc.h create mode 100644 kernels/volk/volk_32fc_convert_16ic.h create mode 100644 kernels/volk/volk_32fc_deinterleave_32f_x2.h create mode 100644 kernels/volk/volk_32fc_deinterleave_64f_x2.h create mode 100644 kernels/volk/volk_32fc_deinterleave_imag_32f.h create mode 100644 kernels/volk/volk_32fc_deinterleave_real_32f.h create mode 100644 kernels/volk/volk_32fc_deinterleave_real_64f.h create mode 100644 kernels/volk/volk_32fc_index_max_16u.h create mode 100644 kernels/volk/volk_32fc_index_max_32u.h create mode 100644 kernels/volk/volk_32fc_magnitude_32f.h create mode 100644 kernels/volk/volk_32fc_magnitude_squared_32f.h create mode 100644 kernels/volk/volk_32fc_s32f_atan2_32f.h create mode 100644 kernels/volk/volk_32fc_s32f_deinterleave_real_16i.h create mode 100644 kernels/volk/volk_32fc_s32f_magnitude_16i.h create mode 100644 kernels/volk/volk_32fc_s32f_power_32fc.h create mode 100644 kernels/volk/volk_32fc_s32f_power_spectrum_32f.h create mode 100644 kernels/volk/volk_32fc_s32f_x2_power_spectral_density_32f.h create mode 100644 kernels/volk/volk_32fc_s32fc_multiply_32fc.h create mode 100644 kernels/volk/volk_32fc_s32fc_rotatorpuppet_32fc.h create mode 100644 kernels/volk/volk_32fc_s32fc_x2_rotator_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_conjugate_dot_prod_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_divide_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_dot_prod_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_multiply_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_multiply_conjugate_32fc.h create mode 100644 kernels/volk/volk_32fc_x2_s32f_square_dist_scalar_mult_32f.h create mode 100644 kernels/volk/volk_32fc_x2_square_dist_32f.h create mode 100644 kernels/volk/volk_32i_s32f_convert_32f.h create mode 100644 kernels/volk/volk_32i_x2_and_32i.h create mode 100644 kernels/volk/volk_32i_x2_or_32i.h create mode 100644 kernels/volk/volk_32u_byteswap.h create mode 100644 kernels/volk/volk_32u_byteswappuppet_32u.h create mode 100644 kernels/volk/volk_32u_popcnt.h create mode 100644 kernels/volk/volk_32u_popcntpuppet_32u.h create mode 100644 kernels/volk/volk_64f_convert_32f.h create mode 100644 kernels/volk/volk_64f_x2_max_64f.h create mode 100644 kernels/volk/volk_64f_x2_min_64f.h create mode 100644 kernels/volk/volk_64u_byteswap.h create mode 100644 kernels/volk/volk_64u_byteswappuppet_64u.h create mode 100644 kernels/volk/volk_64u_popcnt.h create mode 100644 kernels/volk/volk_64u_popcntpuppet_64u.h create mode 100644 kernels/volk/volk_8i_convert_16i.h create mode 100644 kernels/volk/volk_8i_s32f_convert_32f.h create mode 100644 kernels/volk/volk_8ic_deinterleave_16i_x2.h create mode 100644 kernels/volk/volk_8ic_deinterleave_real_16i.h create mode 100644 kernels/volk/volk_8ic_deinterleave_real_8i.h create mode 100644 kernels/volk/volk_8ic_s32f_deinterleave_32f_x2.h create mode 100644 kernels/volk/volk_8ic_s32f_deinterleave_real_32f.h create mode 100644 kernels/volk/volk_8ic_x2_multiply_conjugate_16ic.h create mode 100644 kernels/volk/volk_8ic_x2_s32f_multiply_conjugate_32fc.h create mode 100644 kernels/volk/volk_8u_conv_k7_r2puppet_8u.h create mode 100644 kernels/volk/volk_8u_x2_encodeframepolar_8u.h create mode 100644 kernels/volk/volk_8u_x3_encodepolar_8u_x2.h create mode 100644 kernels/volk/volk_8u_x3_encodepolarpuppet_8u.h create mode 100644 kernels/volk/volk_8u_x4_conv_k7_r2_8u.h create mode 100644 lib/CMakeLists.txt create mode 100644 lib/constants.c.in create mode 100644 lib/kernel_tests.h create mode 100644 lib/qa_utils.cc create mode 100644 lib/qa_utils.h create mode 100644 lib/testqa.cc create mode 100644 lib/volk_malloc.c create mode 100644 lib/volk_prefs.c create mode 100644 lib/volk_rank_archs.c create mode 100644 lib/volk_rank_archs.h create mode 100644 python/volk_modtool/CMakeLists.txt create mode 100644 python/volk_modtool/README create mode 100644 python/volk_modtool/__init__.py create mode 100644 python/volk_modtool/cfg.py create mode 100755 python/volk_modtool/volk_modtool create mode 100644 python/volk_modtool/volk_modtool_generate.py create mode 100644 tmpl/volk.tmpl.c create mode 100644 tmpl/volk.tmpl.h create mode 100644 tmpl/volk_config_fixed.tmpl.h create mode 100644 tmpl/volk_cpu.tmpl.c create mode 100644 tmpl/volk_cpu.tmpl.h create mode 100644 tmpl/volk_machine_xxx.tmpl.c create mode 100644 tmpl/volk_machines.tmpl.c create mode 100644 tmpl/volk_machines.tmpl.h create mode 100644 tmpl/volk_typedefs.tmpl.h create mode 100644 volk.pc.in diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a185998 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*~ +*.pyc +*.pyo +build/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5ecc9c2 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,295 @@ +# +# Copyright 2011 Free Software Foundation, Inc. +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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, see . +# + +######################################################################## +# Project setup +######################################################################## +cmake_minimum_required(VERSION 2.6) +set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type: None Debug Release RelWithDebInfo MinSizeRel") +project(volk) +enable_language(CXX) +enable_language(C) +enable_testing() + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") +add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1) + +set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) #allows this to be a sub-project +set(CMAKE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) #allows this to be a sub-project +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules) #location for custom "Modules" + +include(VolkBuildTypes) +#select the release build type by default to get optimization flags +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") + message(STATUS "Build type not specified: defaulting to release.") +endif() +VOLK_CHECK_BUILD_TYPE(${CMAKE_BUILD_TYPE}) +set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") +message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.") + +set(VERSION_INFO_MAJOR_VERSION 1) +set(VERSION_INFO_MINOR_VERSION 3) +set(VERSION_INFO_MAINT_VERSION 0) +include(VolkVersion) #setup version info + + +######################################################################## +# Environment setup +######################################################################## +IF(NOT DEFINED BOOST_ROOT AND NOT DEFINED ENV{BOOST_ROOT}) + SET(BOOST_ROOT ${CMAKE_INSTALL_PREFIX}) +ENDIF() + +IF(NOT DEFINED CROSSCOMPILE_MULTILIB) + SET(CROSSCOMPILE_MULTILIB "") +ENDIF() +SET(CROSSCOMPILE_MULTILIB ${CROSSCOMPILE_MULTILIB} CACHE STRING "Define \"true\" if you have and want to use multiple C development libs installed for cross compile") + + +######################################################################## +# Dependencies setup +######################################################################## + +# Python +include(VolkPython) #sets PYTHON_EXECUTABLE and PYTHON_DASH_B +VOLK_PYTHON_CHECK_MODULE("python >= 2.5" sys "sys.version.split()[0] >= '2.5'" PYTHON_MIN_VER_FOUND) +VOLK_PYTHON_CHECK_MODULE("Cheetah >= 2.0.0" Cheetah "Cheetah.Version >= '2.0.0'" CHEETAH_FOUND) + +if(NOT PYTHON_MIN_VER_FOUND) + message(FATAL_ERROR "Python 2.5 or greater required to build VOLK") +endif() + +# Cheetah +if(NOT CHEETAH_FOUND) + message(FATAL_ERROR "Cheetah templates required to build VOLK") +endif() + +# Boost +if(MSVC) + if (NOT DEFINED BOOST_ALL_DYN_LINK) + set(BOOST_ALL_DYN_LINK TRUE) + endif() + set(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking") + if(BOOST_ALL_DYN_LINK) + add_definitions(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc + else(BOOST_ALL_DYN_LINK) + unset(BOOST_REQUIRED_COMPONENTS) #empty components list for static link + endif(BOOST_ALL_DYN_LINK) +endif(MSVC) + +include(VolkBoost) + +if(NOT Boost_FOUND) + message(FATAL_ERROR "VOLK Requires boost to build") +endif() + +# Orc +option(ENABLE_ORC "Enable Orc" True) +if(ENABLE_ORC) + find_package(ORC) +else(ENABLE_ORC) + message(STATUS "Disabling use of ORC") +endif(ENABLE_ORC) + +######################################################################## +# Setup doxygen +######################################################################## +find_package(Doxygen) +if(DOXYGEN_FOUND) + configure_file( + ${CMAKE_SOURCE_DIR}/Doxyfile.in + ${CMAKE_BINARY_DIR}/Doxyfile + @ONLY) + + add_custom_target(doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating documentation with Doxygen" VERBATIM + ) +endif(DOXYGEN_FOUND) + +######################################################################## +# Setup the package config file +######################################################################## +#set variables found in the pc.in file +set(prefix ${CMAKE_INSTALL_PREFIX}) +set(exec_prefix "\${prefix}") +set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}") +set(includedir "\${prefix}/include") + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/volk.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/volk.pc +@ONLY) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/volk.pc + DESTINATION lib${LIB_SUFFIX}/pkgconfig + COMPONENT "volk_devel" +) + +######################################################################## +# Install all headers in the include directories +######################################################################## +set(VOLK_RUNTIME_DIR bin) +set(VOLK_LIBRARY_DIR lib${LIB_SUFFIX}) +set(VOLK_INCLUDE_DIR include) + +install( + DIRECTORY ${CMAKE_SOURCE_DIR}/kernels/volk + DESTINATION include COMPONENT "volk_devel" + FILES_MATCHING PATTERN "*.h" +) + +install(FILES + ${CMAKE_SOURCE_DIR}/include/volk/volk_prefs.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_complex.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_common.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_avx_intrinsics.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_sse3_intrinsics.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_neon_intrinsics.h + ${CMAKE_BINARY_DIR}/include/volk/volk.h + ${CMAKE_BINARY_DIR}/include/volk/volk_cpu.h + ${CMAKE_BINARY_DIR}/include/volk/volk_config_fixed.h + ${CMAKE_BINARY_DIR}/include/volk/volk_typedefs.h + ${CMAKE_SOURCE_DIR}/include/volk/volk_malloc.h + DESTINATION include/volk + COMPONENT "volk_devel" +) + +######################################################################## +# On Apple only, set install name and use rpath correctly, if not already set +######################################################################## +if(APPLE) + if(NOT CMAKE_INSTALL_NAME_DIR) + set(CMAKE_INSTALL_NAME_DIR + ${CMAKE_INSTALL_PREFIX}/${VOLK_LIBRARY_DIR} CACHE + PATH "Library Install Name Destination Directory" FORCE) + endif(NOT CMAKE_INSTALL_NAME_DIR) + if(NOT CMAKE_INSTALL_RPATH) + set(CMAKE_INSTALL_RPATH + ${CMAKE_INSTALL_PREFIX}/${VOLK_LIBRARY_DIR} CACHE + PATH "Library Install RPath" FORCE) + endif(NOT CMAKE_INSTALL_RPATH) + if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE + BOOL "Do Build Using Library Install RPath" FORCE) + endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH) +endif(APPLE) + +######################################################################## +# Create uninstall target +######################################################################## +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake +@ONLY) + +# Only add the target if there isn't one defined already +if(NOT TARGET uninstall) + add_custom_target(uninstall + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake + ) +endif() + + +######################################################################## +# Install our Cmake modules into $prefix/lib/cmake/volk +# See "Package Configuration Files" on page: +# http://www.cmake.org/Wiki/CMake/Tutorials/Packaging +######################################################################## + +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/Modules/VolkConfig.cmake.in + ${CMAKE_BINARY_DIR}/cmake/Modules/VolkConfig.cmake +@ONLY) + +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/Modules/VolkConfigVersion.cmake.in + ${CMAKE_BINARY_DIR}/cmake/Modules/VolkConfigVersion.cmake +@ONLY) + + +######################################################################## +# Install cmake search routine for external use +######################################################################## + +if(NOT CMAKE_MODULES_DIR) + set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake) +endif(NOT CMAKE_MODULES_DIR) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/cmake/Modules/VolkConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/Modules/VolkConfigVersion.cmake + DESTINATION ${CMAKE_MODULES_DIR}/volk + COMPONENT "volk_devel" +) + +######################################################################## +# Option to enable QA testing, on by default +######################################################################## +OPTION(ENABLE_TESTING "Enable QA testing" ON) +if(ENABLE_TESTING) + message(STATUS "QA Testing is enabled.") +else() + message(STATUS "QA Testing is disabled.") +endif() +message(STATUS " Modify using: -DENABLE_TESTING=ON/OFF") + +######################################################################## +# Option to enable post-build profiling using volk_profile, off by default +######################################################################## +OPTION(ENABLE_PROFILING "Launch system profiler after build" OFF) +if(ENABLE_PROFILING) + if(DEFINED VOLK_CONFIGPATH) + get_filename_component(VOLK_CONFIGPATH ${VOLK_CONFIGPATH} ABSOLUTE) + set(VOLK_CONFIGPATH "${VOLK_CONFIGPATH}/volk") + message(STATUS "System profiling is enabled, using path: ${VOLK_CONFIGPATH}") + elseif(DEFINED ENV{VOLK_CONFIGPATH}) + set(VOLK_CONFIGPATH "$ENV{VOLK_CONFIGPATH}/volk") + message(STATUS "System profiling is enabled, using env path: $ENV{VOLK_CONFIGPATH}") + else() + message(STATUS "System profiling is enabled with default paths.") + if(DEFINED ENV{HOME}) + set(VOLK_CONFIGPATH "$ENV{HOME}/.volk") + elseif(DEFINED ENV{APPDATA}) + set(VOLK_CONFIGPATH "$ENV{APPDATA}/.volk") + endif() + endif() +else() + message(STATUS "System profiling is disabled.") +endif() +message(STATUS " Modify using: -DENABLE_PROFILING=ON/OFF") + +######################################################################## +# Setup the library +######################################################################## +add_subdirectory(lib) + +######################################################################## +# And the utility apps +######################################################################## +add_subdirectory(apps) +add_subdirectory(python/volk_modtool) + +######################################################################## +# Print summary +######################################################################## +message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}") diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 of the License, or + (at your option) any later version. + + This program 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Doxyfile.in b/Doxyfile.in new file mode 100644 index 0000000..a933fec --- /dev/null +++ b/Doxyfile.in @@ -0,0 +1,2364 @@ +# Doxyfile 1.8.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Vector Optimized Library of Kernels" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = @VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Architecture-tuned implementations of math kernels" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +# TODO: configure this to be a special docs directory. nw tried, but running +# make doc won' create the directory, but with doxygen it will. why? + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = @CMAKE_SOURCE_DIR@/DoxygenLayout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. Do not use file names with spaces, bibtex cannot handle them. See +# also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = @CMAKE_SOURCE_DIR@ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.as \ + *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = @CMAKE_BINARY_DIR@ + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- +# defined cascading style sheet that is included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet file to the output directory. For an example +# see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /