From a53d1c7240afffe0c8d9ec3c5de3fb12b097b405 Mon Sep 17 00:00:00 2001 From: Raspbian forward porter Date: Sat, 9 Jul 2016 13:42:11 +0000 Subject: [PATCH] Import volk_1.3-1+rpi1.debian.tar.xz [dgit import tarball volk 1.3-1+rpi1 volk_1.3-1+rpi1.debian.tar.xz] --- changelog | 309 +++++++++++++++++++++++++++++ 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/disable-neon | 42 ++++ patches/install-all-headers | 33 +++ patches/make-acc-happy | 53 +++++ patches/native-armv7-build-support | 59 ++++++ patches/series | 5 + 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 + 24 files changed, 977 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/disable-neon 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..e737ea7 --- /dev/null +++ b/changelog @@ -0,0 +1,309 @@ +volk (1.3-1+rpi1) stretch-staging; urgency=medium + + [changes brought forward from 1.1-1+rpi1 by Peter Michael Green at Sun, 20 Sep 2015 20:30:19 +0000] + * Disable neon. + + -- Raspbian forward porter Sat, 09 Jul 2016 13:42:11 +0000 + +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/disable-neon b/patches/disable-neon new file mode 100644 index 0000000..8459f65 --- /dev/null +++ b/patches/disable-neon @@ -0,0 +1,42 @@ +Description: Disable neon. +Author: Peter Michael Green + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: https://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +Index: volk-1.1/lib/CMakeLists.txt +=================================================================== +--- volk-1.1.orig/lib/CMakeLists.txt ++++ volk-1.1/lib/CMakeLists.txt +@@ -237,9 +237,9 @@ 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") ++#if(${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi") ++ OVERRULE_ARCH(neon "We don't want neon on raspbian") ++#endif(${CMAKE_LIBRARY_ARCHITECTURE} STREQUAL "arm-linux-gnueabi") + + ######################################################################## + # implement overruling in the ORC case, +@@ -414,7 +414,7 @@ if((${CMAKE_VERSION} VERSION_GREATER "2. + # 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" ) OR ( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7")) ++ if(( ASM_ARCH STREQUAL "neonxxxx" ) OR ( ${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7xxxx")) + message(STATUS "---- Adding ASM files") # we always use ATT syntax + message(STATUS "-- Detected neon architecture; enabling ASM") + # setup architecture specific assembler flags 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..087911d --- /dev/null +++ b/patches/series @@ -0,0 +1,5 @@ +native-armv7-build-support +make-acc-happy +sort-cmake-glob-lists +install-all-headers +disable-neon 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 -- 2.30.2