From 55be47c99b99c4ca702bdb99e0a88417ee8b7c3f Mon Sep 17 00:00:00 2001 From: "A. Maitland Bottoms" Date: Tue, 18 Feb 2020 22:56:58 +0000 Subject: [PATCH] Import volk_2.2.0-2.debian.tar.xz [dgit import tarball volk 2.2.0-2 volk_2.2.0-2.debian.tar.xz] --- 1.3_to_1.4_compat_report.html | 1069 ++++++++++++++ 1.4_to_2.0_compat_report.html | 1855 ++++++++++++++++++++++++ changelog | 408 ++++++ compat | 1 + control | 79 + copyright | 187 +++ libvolk2-bin.install | 2 + libvolk2-bin.manpages | 3 + libvolk2-dev.abi.tar.gz.amd64 | Bin 0 -> 59831 bytes libvolk2-dev.acc | 50 + libvolk2-dev.docs | 2 + libvolk2-dev.install | 5 + libvolk2-doc.doc-base | 19 + libvolk2-doc.docs | 1 + libvolk2.2.install | 1 + patches/make-acc-happy | 60 + patches/optional-static-apps | 20 + patches/remove-external-HTML-resources | 8 + patches/series | 3 + rules | 23 + 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 | 4 + 27 files changed, 4016 insertions(+) create mode 100644 1.3_to_1.4_compat_report.html create mode 100644 1.4_to_2.0_compat_report.html create mode 100644 changelog create mode 100644 compat create mode 100644 control create mode 100644 copyright create mode 100644 libvolk2-bin.install create mode 100644 libvolk2-bin.manpages create mode 100644 libvolk2-dev.abi.tar.gz.amd64 create mode 100644 libvolk2-dev.acc create mode 100644 libvolk2-dev.docs create mode 100644 libvolk2-dev.install create mode 100644 libvolk2-doc.doc-base create mode 100644 libvolk2-doc.docs create mode 100644 libvolk2.2.install create mode 100644 patches/make-acc-happy create mode 100644 patches/optional-static-apps create mode 100644 patches/remove-external-HTML-resources create mode 100644 patches/series 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/1.3_to_1.4_compat_report.html b/1.3_to_1.4_compat_report.html new file mode 100644 index 0000000..f9614d6 --- /dev/null +++ b/1.3_to_1.4_compat_report.html @@ -0,0 +1,1069 @@ + + + + + + + + +libvolk1-dev: 1.3-3 to 1.4-1 compatibility report + + + +

API compatibility report for the libvolk1-dev library between 1.3-3 and 1.4-1 versions on x86_64

+ +
+
+ Binary
Compatibility
+ Source
Compatibility
+
+

Test Info


+ + + + + + + +
Library Namelibvolk1-dev
Version #11.3-3
Version #21.4-1
Archx86_64
GCC Version7
SubjectBinary Compatibility
+

Test Results


+ + + + + + +
Total Header Files135
Total Libraries1
Total Symbols / Types614 / 233
Compatibility99.8%
+

Problem Summary


+ + + + + + + + + +
SeverityCount
Added Symbols-45
Removed SymbolsHigh0
Problems with
Data Types
High0
Medium0
Low1
Problems with
Symbols
High1
Medium0
Low0
Problems with
Constants
Low1
+ +

Added Symbols  45 


+volk.h, libvolk.so.1.4
+volk_32f_64f_add_64f [data]
+volk_32f_64f_add_64f_a [data]
+volk_32f_64f_add_64f_get_func_desc ( )
+volk_32f_64f_add_64f_manual ( double* cVector, float const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_32f_64f_add_64f_u [data]
+volk_32f_64f_multiply_64f [data]
+volk_32f_64f_multiply_64f_a [data]
+volk_32f_64f_multiply_64f_get_func_desc ( )
+volk_32f_64f_multiply_64f_manual ( double* cVector, float const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_32f_64f_multiply_64f_u [data]
+volk_32f_s32f_mod_rangepuppet_32f [data]
+volk_32f_s32f_mod_rangepuppet_32f_a [data]
+volk_32f_s32f_mod_rangepuppet_32f_get_func_desc ( )
+volk_32f_s32f_mod_rangepuppet_32f_manual ( float* output, float const* input, float bound, unsigned int num_points, char const* impl_name )
+volk_32f_s32f_mod_rangepuppet_32f_u [data]
+volk_32f_s32f_s32f_mod_range_32f [data]
+volk_32f_s32f_s32f_mod_range_32f_a [data]
+volk_32f_s32f_s32f_mod_range_32f_get_func_desc ( )
+volk_32f_s32f_s32f_mod_range_32f_manual ( float* outputVector, float const* inputVector, float const lower_bound, float const upper_bound, unsigned int num_points, char const* impl_name )
+volk_32f_s32f_s32f_mod_range_32f_u [data]
+volk_32fc_32f_add_32fc [data]
+volk_32fc_32f_add_32fc_a [data]
+volk_32fc_32f_add_32fc_get_func_desc ( )
+volk_32fc_32f_add_32fc_manual ( lv_32fc_t* cVector, lv_32fc_t const* aVector, float const* bVector, unsigned int num_points, char const* impl_name )
+volk_32fc_32f_add_32fc_u [data]
+volk_32fc_x2_add_32fc [data]
+volk_32fc_x2_add_32fc_a [data]
+volk_32fc_x2_add_32fc_get_func_desc ( )
+volk_32fc_x2_add_32fc_manual ( lv_32fc_t* cVector, lv_32fc_t const* aVector, lv_32fc_t const* bVector, unsigned int num_points, char const* impl_name )
+volk_32fc_x2_add_32fc_u [data]
+volk_32u_reverse_32u [data]
+volk_32u_reverse_32u_a [data]
+volk_32u_reverse_32u_get_func_desc ( )
+volk_32u_reverse_32u_manual ( uint32_t* out, uint32_t const* in, unsigned int num_points, char const* impl_name )
+volk_32u_reverse_32u_u [data]
+volk_64f_x2_add_64f [data]
+volk_64f_x2_add_64f_a [data]
+volk_64f_x2_add_64f_get_func_desc ( )
+volk_64f_x2_add_64f_manual ( double* cVector, double const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_64f_x2_add_64f_u [data]
+volk_64f_x2_multiply_64f [data]
+volk_64f_x2_multiply_64f_a [data]
+volk_64f_x2_multiply_64f_get_func_desc ( )
+volk_64f_x2_multiply_64f_manual ( double* cVector, double const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_64f_x2_multiply_64f_u [data]
+
+to the top
+ +

Problems with Symbols, High Severity  1 


+volk.h, libvolk.so.1.3
+ +[+] volk_32f_8u_polarbutterfly_32f_manual ( float* llrs, unsigned char* u, int const frame_size, int const frame_exp, int const stage, int const u_num, int const row, char const* impl_name )  1  +
+ +
+to the top
+ +

Problems with Data Types, Low Severity  1 


+volk_typedefs.h
+ +[+] typedef p_32f_8u_polarbutterfly_32f  1  +
+ + +
+to the top
+ +

Problems with Constants, Low Severity  1 


+volk_32f_log2_32f.h
+ +[+] LOG_POLY_DEGREE +
+ + +
+to the top
+

Header Files  135 


+
+constants.h
+saturation_arithmetic.h
+volk.h
+volk_16i_32fc_dot_prod_32fc.h
+volk_16i_branch_4_state_8.h
+volk_16i_convert_8i.h
+volk_16i_max_star_16i.h
+volk_16i_max_star_horizontal_16i.h
+volk_16i_permute_and_scalar_add.h
+volk_16i_s32f_convert_32f.h
+volk_16i_x4_quad_max_star_16i.h
+volk_16i_x5_add_quad_16i_x4.h
+volk_16ic_convert_32fc.h
+volk_16ic_deinterleave_16i_x2.h
+volk_16ic_deinterleave_real_16i.h
+volk_16ic_deinterleave_real_8i.h
+volk_16ic_magnitude_16i.h
+volk_16ic_s32f_deinterleave_32f_x2.h
+volk_16ic_s32f_deinterleave_real_32f.h
+volk_16ic_s32f_magnitude_32f.h
+volk_16ic_x2_dot_prod_16ic.h
+volk_16ic_x2_multiply_16ic.h
+volk_16u_byteswap.h
+volk_16u_byteswappuppet_16u.h
+volk_32f_8u_polarbutterfly_32f.h
+volk_32f_8u_polarbutterflypuppet_32f.h
+volk_32f_accumulator_s32f.h
+volk_32f_acos_32f.h
+volk_32f_asin_32f.h
+volk_32f_atan_32f.h
+volk_32f_binary_slicer_32i.h
+volk_32f_binary_slicer_8i.h
+volk_32f_convert_64f.h
+volk_32f_cos_32f.h
+volk_32f_expfast_32f.h
+volk_32f_index_max_16u.h
+volk_32f_index_max_32u.h
+volk_32f_invsqrt_32f.h
+volk_32f_log2_32f.h
+volk_32f_null_32f.h
+volk_32f_s32f_32f_fm_detect_32f.h
+volk_32f_s32f_calc_spectral_noise_floor_32f.h
+volk_32f_s32f_convert_16i.h
+volk_32f_s32f_convert_32i.h
+volk_32f_s32f_convert_8i.h
+volk_32f_s32f_multiply_32f.h
+volk_32f_s32f_normalize.h
+volk_32f_s32f_power_32f.h
+volk_32f_s32f_stddev_32f.h
+volk_32f_sin_32f.h
+volk_32f_sqrt_32f.h
+volk_32f_stddev_and_mean_32f_x2.h
+volk_32f_tan_32f.h
+volk_32f_tanh_32f.h
+volk_32f_x2_add_32f.h
+volk_32f_x2_divide_32f.h
+volk_32f_x2_dot_prod_16i.h
+volk_32f_x2_dot_prod_32f.h
+volk_32f_x2_fm_detectpuppet_32f.h
+volk_32f_x2_interleave_32fc.h
+volk_32f_x2_max_32f.h
+volk_32f_x2_min_32f.h
+volk_32f_x2_multiply_32f.h
+volk_32f_x2_pow_32f.h
+volk_32f_x2_s32f_interleave_16ic.h
+volk_32f_x2_subtract_32f.h
+volk_32f_x3_sum_of_poly_32f.h
+volk_32fc_32f_dot_prod_32fc.h
+volk_32fc_32f_multiply_32fc.h
+volk_32fc_conjugate_32fc.h
+volk_32fc_convert_16ic.h
+volk_32fc_deinterleave_32f_x2.h
+volk_32fc_deinterleave_64f_x2.h
+volk_32fc_deinterleave_imag_32f.h
+volk_32fc_deinterleave_real_32f.h
+volk_32fc_deinterleave_real_64f.h
+volk_32fc_index_max_16u.h
+volk_32fc_index_max_32u.h
+volk_32fc_magnitude_32f.h
+volk_32fc_magnitude_squared_32f.h
+volk_32fc_s32f_atan2_32f.h
+volk_32fc_s32f_deinterleave_real_16i.h
+volk_32fc_s32f_magnitude_16i.h
+volk_32fc_s32f_power_32fc.h
+volk_32fc_s32f_power_spectrum_32f.h
+volk_32fc_s32f_x2_power_spectral_density_32f.h
+volk_32fc_s32fc_multiply_32fc.h
+volk_32fc_s32fc_rotatorpuppet_32fc.h
+volk_32fc_s32fc_x2_rotator_32fc.h
+volk_32fc_x2_conjugate_dot_prod_32fc.h
+volk_32fc_x2_divide_32fc.h
+volk_32fc_x2_dot_prod_32fc.h
+volk_32fc_x2_multiply_32fc.h
+volk_32fc_x2_multiply_conjugate_32fc.h
+volk_32fc_x2_s32f_square_dist_scalar_mult_32f.h
+volk_32fc_x2_square_dist_32f.h
+volk_32i_s32f_convert_32f.h
+volk_32i_x2_and_32i.h
+volk_32i_x2_or_32i.h
+volk_32u_byteswap.h
+volk_32u_byteswappuppet_32u.h
+volk_32u_popcnt.h
+volk_32u_popcntpuppet_32u.h
+volk_64f_convert_32f.h
+volk_64f_x2_max_64f.h
+volk_64f_x2_min_64f.h
+volk_64u_byteswap.h
+volk_64u_byteswappuppet_64u.h
+volk_64u_popcnt.h
+volk_64u_popcntpuppet_64u.h
+volk_8i_convert_16i.h
+volk_8i_s32f_convert_32f.h
+volk_8ic_deinterleave_16i_x2.h
+volk_8ic_deinterleave_real_16i.h
+volk_8ic_deinterleave_real_8i.h
+volk_8ic_s32f_deinterleave_32f_x2.h
+volk_8ic_s32f_deinterleave_real_32f.h
+volk_8ic_x2_multiply_conjugate_16ic.h
+volk_8ic_x2_s32f_multiply_conjugate_32fc.h
+volk_8u_conv_k7_r2puppet_8u.h
+volk_8u_x2_encodeframepolar_8u.h
+volk_8u_x3_encodepolar_8u_x2.h
+volk_8u_x3_encodepolarpuppet_8u.h
+volk_8u_x4_conv_k7_r2_8u.h
+volk_avx_intrinsics.h
+volk_common.h
+volk_complex.h
+volk_config_fixed.h
+volk_cpu.h
+volk_malloc.h
+volk_neon_intrinsics.h
+volk_prefs.h
+volk_sse3_intrinsics.h
+volk_sse_intrinsics.h
+volk_typedefs.h
+
+
to the top
+

Libraries  1 


+
+libvolk.so.1.3
+
+
to the top
+


+

Test Info


+ + + + + + +
Library Namelibvolk1-dev
Version #11.3-3
Version #21.4-1
Archx86_64
SubjectSource Compatibility
+

Test Results


+ + + + + + +
Total Header Files135
Total Libraries1
Total Symbols / Types660 / 235
Compatibility99.1%
+

Problem Summary


+ + + + + + + + + + +
SeverityCount
Added Symbols-46
Removed SymbolsHigh5
Problems with
Data Types
High0
Medium0
Low1
Problems with
Symbols
High1
Medium0
Low0
Problems with
Constants
Low1
Other Changes
in Constants
-2
+ +

Added Symbols  46 


+volk.h
+volk_32f_64f_add_64f [data]
+volk_32f_64f_add_64f_a [data]
+volk_32f_64f_add_64f_get_func_desc ( )
+volk_32f_64f_add_64f_manual ( double* cVector, float const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_32f_64f_add_64f_u [data]
+volk_32f_64f_multiply_64f [data]
+volk_32f_64f_multiply_64f_a [data]
+volk_32f_64f_multiply_64f_get_func_desc ( )
+volk_32f_64f_multiply_64f_manual ( double* cVector, float const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_32f_64f_multiply_64f_u [data]
+volk_32f_s32f_mod_rangepuppet_32f [data]
+volk_32f_s32f_mod_rangepuppet_32f_a [data]
+volk_32f_s32f_mod_rangepuppet_32f_get_func_desc ( )
+volk_32f_s32f_mod_rangepuppet_32f_manual ( float* output, float const* input, float bound, unsigned int num_points, char const* impl_name )
+volk_32f_s32f_mod_rangepuppet_32f_u [data]
+volk_32f_s32f_s32f_mod_range_32f [data]
+volk_32f_s32f_s32f_mod_range_32f_a [data]
+volk_32f_s32f_s32f_mod_range_32f_get_func_desc ( )
+volk_32f_s32f_s32f_mod_range_32f_manual ( float* outputVector, float const* inputVector, float const lower_bound, float const upper_bound, unsigned int num_points, char const* impl_name )
+volk_32f_s32f_s32f_mod_range_32f_u [data]
+volk_32fc_32f_add_32fc [data]
+volk_32fc_32f_add_32fc_a [data]
+volk_32fc_32f_add_32fc_get_func_desc ( )
+volk_32fc_32f_add_32fc_manual ( lv_32fc_t* cVector, lv_32fc_t const* aVector, float const* bVector, unsigned int num_points, char const* impl_name )
+volk_32fc_32f_add_32fc_u [data]
+volk_32fc_x2_add_32fc [data]
+volk_32fc_x2_add_32fc_a [data]
+volk_32fc_x2_add_32fc_get_func_desc ( )
+volk_32fc_x2_add_32fc_manual ( lv_32fc_t* cVector, lv_32fc_t const* aVector, lv_32fc_t const* bVector, unsigned int num_points, char const* impl_name )
+volk_32fc_x2_add_32fc_u [data]
+volk_32u_reverse_32u [data]
+volk_32u_reverse_32u_a [data]
+volk_32u_reverse_32u_get_func_desc ( )
+volk_32u_reverse_32u_manual ( uint32_t* out, uint32_t const* in, unsigned int num_points, char const* impl_name )
+volk_32u_reverse_32u_u [data]
+volk_64f_x2_add_64f [data]
+volk_64f_x2_add_64f_a [data]
+volk_64f_x2_add_64f_get_func_desc ( )
+volk_64f_x2_add_64f_manual ( double* cVector, double const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_64f_x2_add_64f_u [data]
+volk_64f_x2_multiply_64f [data]
+volk_64f_x2_multiply_64f_a [data]
+volk_64f_x2_multiply_64f_get_func_desc ( )
+volk_64f_x2_multiply_64f_manual ( double* cVector, double const* aVector, double const* bVector, unsigned int num_points, char const* impl_name )
+volk_64f_x2_multiply_64f_u [data]
+
+volk_32u_reverse_32u.h
+ +BitReverseTable256 [data] +
+ + +
+to the top
+

Removed Symbols  5 


+constants.h
+volk_available_machines ( )
+volk_c_compiler ( )
+volk_compiler_flags ( )
+volk_prefix ( )
+volk_version ( )
+
+to the top
+ +

Problems with Symbols, High Severity  1 


+volk.h
+ +[+] volk_32f_8u_polarbutterfly_32f_manual ( float* llrs, unsigned char* u, int const frame_size, int const frame_exp, int const stage, int const u_num, int const row, char const* impl_name )  1  +
+ +
+to the top
+ +

Problems with Data Types, Low Severity  1 


+volk_typedefs.h
+ +[+] typedef p_32f_8u_polarbutterfly_32f  1  +
+ + +
+to the top
+ +

Problems with Constants, Low Severity  1 


+volk_32f_log2_32f.h
+ +[+] LOG_POLY_DEGREE +
+ + +
+to the top
+ +

Other Changes in Constants  2 


+volk_common.h
+ +[+] __VOLK_ASM +
+ + + +[+] __VOLK_VOLATILE +
+ + +
+to the top
+

Header Files  135 


+
+constants.h
+saturation_arithmetic.h
+volk.h
+volk_16i_32fc_dot_prod_32fc.h
+volk_16i_branch_4_state_8.h
+volk_16i_convert_8i.h
+volk_16i_max_star_16i.h
+volk_16i_max_star_horizontal_16i.h
+volk_16i_permute_and_scalar_add.h
+volk_16i_s32f_convert_32f.h
+volk_16i_x4_quad_max_star_16i.h
+volk_16i_x5_add_quad_16i_x4.h
+volk_16ic_convert_32fc.h
+volk_16ic_deinterleave_16i_x2.h
+volk_16ic_deinterleave_real_16i.h
+volk_16ic_deinterleave_real_8i.h
+volk_16ic_magnitude_16i.h
+volk_16ic_s32f_deinterleave_32f_x2.h
+volk_16ic_s32f_deinterleave_real_32f.h
+volk_16ic_s32f_magnitude_32f.h
+volk_16ic_x2_dot_prod_16ic.h
+volk_16ic_x2_multiply_16ic.h
+volk_16u_byteswap.h
+volk_16u_byteswappuppet_16u.h
+volk_32f_8u_polarbutterfly_32f.h
+volk_32f_8u_polarbutterflypuppet_32f.h
+volk_32f_accumulator_s32f.h
+volk_32f_acos_32f.h
+volk_32f_asin_32f.h
+volk_32f_atan_32f.h
+volk_32f_binary_slicer_32i.h
+volk_32f_binary_slicer_8i.h
+volk_32f_convert_64f.h
+volk_32f_cos_32f.h
+volk_32f_expfast_32f.h
+volk_32f_index_max_16u.h
+volk_32f_index_max_32u.h
+volk_32f_invsqrt_32f.h
+volk_32f_log2_32f.h
+volk_32f_null_32f.h
+volk_32f_s32f_32f_fm_detect_32f.h
+volk_32f_s32f_calc_spectral_noise_floor_32f.h
+volk_32f_s32f_convert_16i.h
+volk_32f_s32f_convert_32i.h
+volk_32f_s32f_convert_8i.h
+volk_32f_s32f_multiply_32f.h
+volk_32f_s32f_normalize.h
+volk_32f_s32f_power_32f.h
+volk_32f_s32f_stddev_32f.h
+volk_32f_sin_32f.h
+volk_32f_sqrt_32f.h
+volk_32f_stddev_and_mean_32f_x2.h
+volk_32f_tan_32f.h
+volk_32f_tanh_32f.h
+volk_32f_x2_add_32f.h
+volk_32f_x2_divide_32f.h
+volk_32f_x2_dot_prod_16i.h
+volk_32f_x2_dot_prod_32f.h
+volk_32f_x2_fm_detectpuppet_32f.h
+volk_32f_x2_interleave_32fc.h
+volk_32f_x2_max_32f.h
+volk_32f_x2_min_32f.h
+volk_32f_x2_multiply_32f.h
+volk_32f_x2_pow_32f.h
+volk_32f_x2_s32f_interleave_16ic.h
+volk_32f_x2_subtract_32f.h
+volk_32f_x3_sum_of_poly_32f.h
+volk_32fc_32f_dot_prod_32fc.h
+volk_32fc_32f_multiply_32fc.h
+volk_32fc_conjugate_32fc.h
+volk_32fc_convert_16ic.h
+volk_32fc_deinterleave_32f_x2.h
+volk_32fc_deinterleave_64f_x2.h
+volk_32fc_deinterleave_imag_32f.h
+volk_32fc_deinterleave_real_32f.h
+volk_32fc_deinterleave_real_64f.h
+volk_32fc_index_max_16u.h
+volk_32fc_index_max_32u.h
+volk_32fc_magnitude_32f.h
+volk_32fc_magnitude_squared_32f.h
+volk_32fc_s32f_atan2_32f.h
+volk_32fc_s32f_deinterleave_real_16i.h
+volk_32fc_s32f_magnitude_16i.h
+volk_32fc_s32f_power_32fc.h
+volk_32fc_s32f_power_spectrum_32f.h
+volk_32fc_s32f_x2_power_spectral_density_32f.h
+volk_32fc_s32fc_multiply_32fc.h
+volk_32fc_s32fc_rotatorpuppet_32fc.h
+volk_32fc_s32fc_x2_rotator_32fc.h
+volk_32fc_x2_conjugate_dot_prod_32fc.h
+volk_32fc_x2_divide_32fc.h
+volk_32fc_x2_dot_prod_32fc.h
+volk_32fc_x2_multiply_32fc.h
+volk_32fc_x2_multiply_conjugate_32fc.h
+volk_32fc_x2_s32f_square_dist_scalar_mult_32f.h
+volk_32fc_x2_square_dist_32f.h
+volk_32i_s32f_convert_32f.h
+volk_32i_x2_and_32i.h
+volk_32i_x2_or_32i.h
+volk_32u_byteswap.h
+volk_32u_byteswappuppet_32u.h
+volk_32u_popcnt.h
+volk_32u_popcntpuppet_32u.h
+volk_64f_convert_32f.h
+volk_64f_x2_max_64f.h
+volk_64f_x2_min_64f.h
+volk_64u_byteswap.h
+volk_64u_byteswappuppet_64u.h
+volk_64u_popcnt.h
+volk_64u_popcntpuppet_64u.h
+volk_8i_convert_16i.h
+volk_8i_s32f_convert_32f.h
+volk_8ic_deinterleave_16i_x2.h
+volk_8ic_deinterleave_real_16i.h
+volk_8ic_deinterleave_real_8i.h
+volk_8ic_s32f_deinterleave_32f_x2.h
+volk_8ic_s32f_deinterleave_real_32f.h
+volk_8ic_x2_multiply_conjugate_16ic.h
+volk_8ic_x2_s32f_multiply_conjugate_32fc.h
+volk_8u_conv_k7_r2puppet_8u.h
+volk_8u_x2_encodeframepolar_8u.h
+volk_8u_x3_encodepolar_8u_x2.h
+volk_8u_x3_encodepolarpuppet_8u.h
+volk_8u_x4_conv_k7_r2_8u.h
+volk_avx_intrinsics.h
+volk_common.h
+volk_complex.h
+volk_config_fixed.h
+volk_cpu.h
+volk_malloc.h
+volk_neon_intrinsics.h
+volk_prefs.h
+volk_sse3_intrinsics.h
+volk_sse_intrinsics.h
+volk_typedefs.h
+
+
to the top
+

Libraries  1 


+
+libvolk.so.1.3
+
+
to the top
+



+ +
+ + diff --git a/1.4_to_2.0_compat_report.html b/1.4_to_2.0_compat_report.html new file mode 100644 index 0000000..0bb6275 --- /dev/null +++ b/1.4_to_2.0_compat_report.html @@ -0,0 +1,1855 @@ + + + + + + + + + +volk: 1.4 to 2.0 compatibility report + + + +

API compatibility report for the volk library between 1.4 and 2.0 versions on x86_64

+ +
+
+ Binary
Compatibility
+ Source
Compatibility
+
+

Test Info


+ + + + + + + +
Library Namevolk
Version #11.4
Version #22.0
Archx86_64
GCC Version8
SubjectBinary Compatibility
+

Test Results


+ + + + + + +
Total Header Files143
Total Libraries1
Total Symbols / Types660 / 244
Compatibility99.8%
+

Problem Summary


+ + + + + + + + + + +
SeverityCount
Added Symbols-0
Removed SymbolsHigh0
Problems with
Data Types
High0
Medium2
Low3
Problems with
Symbols
High0
Medium2
Low0
Problems with
Constants
Low18
Other Changes
in Constants
-5
+ + +

Problems with Data Types, Medium Severity  2 


+volk_cpu.h
+ +[+] struct VOLK_CPU  2  +
+ + +
+to the top
+ +

Problems with Symbols, Medium Severity  2 


+volk_cpu.h
+ +[+] volk_cpu [data]  1  +
+ +
+volk_prefs.h, libvolk.so.1.4
+ +[+] volk_get_config_path ( char* p1 )  1  +
+ +
+to the top
+ +

Problems with Data Types, Low Severity  3 


+volk_cpu.h
+ +[+] struct VOLK_CPU  3  +
+ + +
+to the top
+ +

Problems with Constants, Low Severity  18 


+volk_config_fixed.h
+ +[+] LV_32 +
+ + + +[+] LV_3DNOW +
+ + + +[+] LV_64 +
+ + + +[+] LV_ABM +
+ + + +[+] LV_AVX +
+ + + +[+] LV_AVX2 +
+ + + +[+] LV_FMA +
+ + + +[+] LV_MMX +
+ + + +[+] LV_NORC +
+ + + +[+] LV_ORC +
+ + + +[+] LV_POPCOUNT +
+ + + +[+] LV_SSE +
+ + + +[+] LV_SSE2 +
+ + + +[+] LV_SSE3 +
+ + + +[+] LV_SSE4_1 +
+ + + +[+] LV_SSE4_2 +
+ + + +[+] LV_SSE4_A +
+ + + +[+] LV_SSSE3 +
+ + +
+to the top
+ +

Other Changes in Constants  5 


+volk_32f_log2_32f.h
+ +[+] LOG_POLY_DEGREE +
+ + +
+volk_config_fixed.h
+ +[+] LV_AVX512CD +
+ + + +[+] LV_AVX512F +
+ + + +[+] LV_NEONV7 +
+ + + +[+] LV_NEONV8 +
+ + +
+to the top
+

Header Files  143 


+
+saturation_arithmetic.h
+volk.h
+volk_16i_32fc_dot_prod_32fc.h
+volk_16i_branch_4_state_8.h
+volk_16i_convert_8i.h
+volk_16i_max_star_16i.h
+volk_16i_max_star_horizontal_16i.h
+volk_16i_permute_and_scalar_add.h
+volk_16i_s32f_convert_32f.h
+volk_16i_x4_quad_max_star_16i.h
+volk_16i_x5_add_quad_16i_x4.h
+volk_16ic_convert_32fc.h
+volk_16ic_deinterleave_16i_x2.h
+volk_16ic_deinterleave_real_16i.h
+volk_16ic_deinterleave_real_8i.h
+volk_16ic_magnitude_16i.h
+volk_16ic_s32f_deinterleave_32f_x2.h
+volk_16ic_s32f_deinterleave_real_32f.h
+volk_16ic_s32f_magnitude_32f.h
+volk_16ic_x2_dot_prod_16ic.h
+volk_16ic_x2_multiply_16ic.h
+volk_16u_byteswap.h
+volk_16u_byteswappuppet_16u.h
+volk_32f_64f_add_64f.h
+volk_32f_64f_multiply_64f.h
+volk_32f_8u_polarbutterfly_32f.h
+volk_32f_8u_polarbutterflypuppet_32f.h
+volk_32f_accumulator_s32f.h
+volk_32f_acos_32f.h
+volk_32f_asin_32f.h
+volk_32f_atan_32f.h
+volk_32f_binary_slicer_32i.h
+volk_32f_binary_slicer_8i.h
+volk_32f_convert_64f.h
+volk_32f_cos_32f.h
+volk_32f_expfast_32f.h
+volk_32f_index_max_16u.h
+volk_32f_index_max_32u.h
+volk_32f_invsqrt_32f.h
+volk_32f_log2_32f.h
+volk_32f_null_32f.h
+volk_32f_s32f_32f_fm_detect_32f.h
+volk_32f_s32f_calc_spectral_noise_floor_32f.h
+volk_32f_s32f_convert_16i.h
+volk_32f_s32f_convert_32i.h
+volk_32f_s32f_convert_8i.h
+volk_32f_s32f_mod_rangepuppet_32f.h
+volk_32f_s32f_multiply_32f.h
+volk_32f_s32f_normalize.h
+volk_32f_s32f_power_32f.h
+volk_32f_s32f_s32f_mod_range_32f.h
+volk_32f_s32f_stddev_32f.h
+volk_32f_sin_32f.h
+volk_32f_sqrt_32f.h
+volk_32f_stddev_and_mean_32f_x2.h
+volk_32f_tan_32f.h
+volk_32f_tanh_32f.h
+volk_32f_x2_add_32f.h
+volk_32f_x2_divide_32f.h
+volk_32f_x2_dot_prod_16i.h
+volk_32f_x2_dot_prod_32f.h
+volk_32f_x2_fm_detectpuppet_32f.h
+volk_32f_x2_interleave_32fc.h
+volk_32f_x2_max_32f.h
+volk_32f_x2_min_32f.h
+volk_32f_x2_multiply_32f.h
+volk_32f_x2_pow_32f.h
+volk_32f_x2_s32f_interleave_16ic.h
+volk_32f_x2_subtract_32f.h
+volk_32f_x3_sum_of_poly_32f.h
+volk_32fc_32f_add_32fc.h
+volk_32fc_32f_dot_prod_32fc.h
+volk_32fc_32f_multiply_32fc.h
+volk_32fc_conjugate_32fc.h
+volk_32fc_convert_16ic.h
+volk_32fc_deinterleave_32f_x2.h
+volk_32fc_deinterleave_64f_x2.h
+volk_32fc_deinterleave_imag_32f.h
+volk_32fc_deinterleave_real_32f.h
+volk_32fc_deinterleave_real_64f.h
+volk_32fc_index_max_16u.h
+volk_32fc_index_max_32u.h
+volk_32fc_magnitude_32f.h
+volk_32fc_magnitude_squared_32f.h
+volk_32fc_s32f_atan2_32f.h
+volk_32fc_s32f_deinterleave_real_16i.h
+volk_32fc_s32f_magnitude_16i.h
+volk_32fc_s32f_power_32fc.h
+volk_32fc_s32f_power_spectrum_32f.h
+volk_32fc_s32f_x2_power_spectral_density_32f.h
+volk_32fc_s32fc_multiply_32fc.h
+volk_32fc_s32fc_rotatorpuppet_32fc.h
+volk_32fc_s32fc_x2_rotator_32fc.h
+volk_32fc_x2_add_32fc.h
+volk_32fc_x2_conjugate_dot_prod_32fc.h
+volk_32fc_x2_divide_32fc.h
+volk_32fc_x2_dot_prod_32fc.h
+volk_32fc_x2_multiply_32fc.h
+volk_32fc_x2_multiply_conjugate_32fc.h
+volk_32fc_x2_s32f_square_dist_scalar_mult_32f.h
+volk_32fc_x2_square_dist_32f.h
+volk_32i_s32f_convert_32f.h
+volk_32i_x2_and_32i.h
+volk_32i_x2_or_32i.h
+volk_32u_byteswap.h
+volk_32u_byteswappuppet_32u.h
+volk_32u_popcnt.h
+volk_32u_popcntpuppet_32u.h
+volk_32u_reverse_32u.h
+volk_64f_convert_32f.h
+volk_64f_x2_add_64f.h
+volk_64f_x2_max_64f.h
+volk_64f_x2_min_64f.h
+volk_64f_x2_multiply_64f.h
+volk_64u_byteswap.h
+volk_64u_byteswappuppet_64u.h
+volk_64u_popcnt.h
+volk_64u_popcntpuppet_64u.h
+volk_8i_convert_16i.h
+volk_8i_s32f_convert_32f.h
+volk_8ic_deinterleave_16i_x2.h
+volk_8ic_deinterleave_real_16i.h
+volk_8ic_deinterleave_real_8i.h
+volk_8ic_s32f_deinterleave_32f_x2.h
+volk_8ic_s32f_deinterleave_real_32f.h
+volk_8ic_x2_multiply_conjugate_16ic.h
+volk_8ic_x2_s32f_multiply_conjugate_32fc.h
+volk_8u_conv_k7_r2puppet_8u.h
+volk_8u_x2_encodeframepolar_8u.h
+volk_8u_x3_encodepolar_8u_x2.h
+volk_8u_x3_encodepolarpuppet_8u.h
+volk_8u_x4_conv_k7_r2_8u.h
+volk_avx_intrinsics.h
+volk_common.h
+volk_complex.h
+volk_config_fixed.h
+volk_cpu.h
+volk_malloc.h
+volk_neon_intrinsics.h
+volk_prefs.h
+volk_sse3_intrinsics.h
+volk_sse_intrinsics.h
+volk_typedefs.h
+
+
to the top
+

Libraries  1 


+
+libvolk.so.1.4
+
+
to the top
+


+

Test Info


+ + + + + + +
Library Namevolk
Version #11.4
Version #22.0
Archx86_64
SubjectSource Compatibility
+

Test Results


+ + + + + + +
Total Header Files143
Total Libraries1
Total Symbols / Types705 / 246
Compatibility99.9%
+

Problem Summary


+ + + + + + + + + + +
SeverityCount
Added Symbols-5
Removed SymbolsHigh0
Problems with
Data Types
High0
Medium0
Low4
Problems with
Symbols
High0
Medium1
Low0
Problems with
Constants
Low18
Other Changes
in Constants
-5
+ +

Added Symbols  5 


+constants.h
+volk_available_machines ( )
+volk_c_compiler ( )
+volk_compiler_flags ( )
+volk_prefix ( )
+volk_version ( )
+
+to the top
+ +

Problems with Symbols, Medium Severity  1 


+volk_prefs.h
+ +[+] volk_get_config_path ( char* p1 )  1  +
+ +
+to the top
+ +

Problems with Data Types, Low Severity  4 


+volk_cpu.h
+ +[+] struct VOLK_CPU  4  +
+ + +
+to the top
+ +

Problems with Constants, Low Severity  18 


+volk_config_fixed.h
+ +[+] LV_32 +
+ + + +[+] LV_3DNOW +
+ + + +[+] LV_64 +
+ + + +[+] LV_ABM +
+ + + +[+] LV_AVX +
+ + + +[+] LV_AVX2 +
+ + + +[+] LV_FMA +
+ + + +[+] LV_MMX +
+ + + +[+] LV_NORC +
+ + + +[+] LV_ORC +
+ + + +[+] LV_POPCOUNT +
+ + + +[+] LV_SSE +
+ + + +[+] LV_SSE2 +
+ + + +[+] LV_SSE3 +
+ + + +[+] LV_SSE4_1 +
+ + + +[+] LV_SSE4_2 +
+ + + +[+] LV_SSE4_A +
+ + + +[+] LV_SSSE3 +
+ + +
+to the top
+ +

Other Changes in Constants  5 


+volk_32f_log2_32f.h
+ +[+] LOG_POLY_DEGREE +
+ + +
+volk_config_fixed.h
+ +[+] LV_AVX512CD +
+ + + +[+] LV_AVX512F +
+ + + +[+] LV_NEONV7 +
+ + + +[+] LV_NEONV8 +
+ + +
+to the top
+

Header Files  143 


+
+saturation_arithmetic.h
+volk.h
+volk_16i_32fc_dot_prod_32fc.h
+volk_16i_branch_4_state_8.h
+volk_16i_convert_8i.h
+volk_16i_max_star_16i.h
+volk_16i_max_star_horizontal_16i.h
+volk_16i_permute_and_scalar_add.h
+volk_16i_s32f_convert_32f.h
+volk_16i_x4_quad_max_star_16i.h
+volk_16i_x5_add_quad_16i_x4.h
+volk_16ic_convert_32fc.h
+volk_16ic_deinterleave_16i_x2.h
+volk_16ic_deinterleave_real_16i.h
+volk_16ic_deinterleave_real_8i.h
+volk_16ic_magnitude_16i.h
+volk_16ic_s32f_deinterleave_32f_x2.h
+volk_16ic_s32f_deinterleave_real_32f.h
+volk_16ic_s32f_magnitude_32f.h
+volk_16ic_x2_dot_prod_16ic.h
+volk_16ic_x2_multiply_16ic.h
+volk_16u_byteswap.h
+volk_16u_byteswappuppet_16u.h
+volk_32f_64f_add_64f.h
+volk_32f_64f_multiply_64f.h
+volk_32f_8u_polarbutterfly_32f.h
+volk_32f_8u_polarbutterflypuppet_32f.h
+volk_32f_accumulator_s32f.h
+volk_32f_acos_32f.h
+volk_32f_asin_32f.h
+volk_32f_atan_32f.h
+volk_32f_binary_slicer_32i.h
+volk_32f_binary_slicer_8i.h
+volk_32f_convert_64f.h
+volk_32f_cos_32f.h
+volk_32f_expfast_32f.h
+volk_32f_index_max_16u.h
+volk_32f_index_max_32u.h
+volk_32f_invsqrt_32f.h
+volk_32f_log2_32f.h
+volk_32f_null_32f.h
+volk_32f_s32f_32f_fm_detect_32f.h
+volk_32f_s32f_calc_spectral_noise_floor_32f.h
+volk_32f_s32f_convert_16i.h
+volk_32f_s32f_convert_32i.h
+volk_32f_s32f_convert_8i.h
+volk_32f_s32f_mod_rangepuppet_32f.h
+volk_32f_s32f_multiply_32f.h
+volk_32f_s32f_normalize.h
+volk_32f_s32f_power_32f.h
+volk_32f_s32f_s32f_mod_range_32f.h
+volk_32f_s32f_stddev_32f.h
+volk_32f_sin_32f.h
+volk_32f_sqrt_32f.h
+volk_32f_stddev_and_mean_32f_x2.h
+volk_32f_tan_32f.h
+volk_32f_tanh_32f.h
+volk_32f_x2_add_32f.h
+volk_32f_x2_divide_32f.h
+volk_32f_x2_dot_prod_16i.h
+volk_32f_x2_dot_prod_32f.h
+volk_32f_x2_fm_detectpuppet_32f.h
+volk_32f_x2_interleave_32fc.h
+volk_32f_x2_max_32f.h
+volk_32f_x2_min_32f.h
+volk_32f_x2_multiply_32f.h
+volk_32f_x2_pow_32f.h
+volk_32f_x2_s32f_interleave_16ic.h
+volk_32f_x2_subtract_32f.h
+volk_32f_x3_sum_of_poly_32f.h
+volk_32fc_32f_add_32fc.h
+volk_32fc_32f_dot_prod_32fc.h
+volk_32fc_32f_multiply_32fc.h
+volk_32fc_conjugate_32fc.h
+volk_32fc_convert_16ic.h
+volk_32fc_deinterleave_32f_x2.h
+volk_32fc_deinterleave_64f_x2.h
+volk_32fc_deinterleave_imag_32f.h
+volk_32fc_deinterleave_real_32f.h
+volk_32fc_deinterleave_real_64f.h
+volk_32fc_index_max_16u.h
+volk_32fc_index_max_32u.h
+volk_32fc_magnitude_32f.h
+volk_32fc_magnitude_squared_32f.h
+volk_32fc_s32f_atan2_32f.h
+volk_32fc_s32f_deinterleave_real_16i.h
+volk_32fc_s32f_magnitude_16i.h
+volk_32fc_s32f_power_32fc.h
+volk_32fc_s32f_power_spectrum_32f.h
+volk_32fc_s32f_x2_power_spectral_density_32f.h
+volk_32fc_s32fc_multiply_32fc.h
+volk_32fc_s32fc_rotatorpuppet_32fc.h
+volk_32fc_s32fc_x2_rotator_32fc.h
+volk_32fc_x2_add_32fc.h
+volk_32fc_x2_conjugate_dot_prod_32fc.h
+volk_32fc_x2_divide_32fc.h
+volk_32fc_x2_dot_prod_32fc.h
+volk_32fc_x2_multiply_32fc.h
+volk_32fc_x2_multiply_conjugate_32fc.h
+volk_32fc_x2_s32f_square_dist_scalar_mult_32f.h
+volk_32fc_x2_square_dist_32f.h
+volk_32i_s32f_convert_32f.h
+volk_32i_x2_and_32i.h
+volk_32i_x2_or_32i.h
+volk_32u_byteswap.h
+volk_32u_byteswappuppet_32u.h
+volk_32u_popcnt.h
+volk_32u_popcntpuppet_32u.h
+volk_32u_reverse_32u.h
+volk_64f_convert_32f.h
+volk_64f_x2_add_64f.h
+volk_64f_x2_max_64f.h
+volk_64f_x2_min_64f.h
+volk_64f_x2_multiply_64f.h
+volk_64u_byteswap.h
+volk_64u_byteswappuppet_64u.h
+volk_64u_popcnt.h
+volk_64u_popcntpuppet_64u.h
+volk_8i_convert_16i.h
+volk_8i_s32f_convert_32f.h
+volk_8ic_deinterleave_16i_x2.h
+volk_8ic_deinterleave_real_16i.h
+volk_8ic_deinterleave_real_8i.h
+volk_8ic_s32f_deinterleave_32f_x2.h
+volk_8ic_s32f_deinterleave_real_32f.h
+volk_8ic_x2_multiply_conjugate_16ic.h
+volk_8ic_x2_s32f_multiply_conjugate_32fc.h
+volk_8u_conv_k7_r2puppet_8u.h
+volk_8u_x2_encodeframepolar_8u.h
+volk_8u_x3_encodepolar_8u_x2.h
+volk_8u_x3_encodepolarpuppet_8u.h
+volk_8u_x4_conv_k7_r2_8u.h
+volk_avx_intrinsics.h
+volk_common.h
+volk_complex.h
+volk_config_fixed.h
+volk_cpu.h
+volk_malloc.h
+volk_neon_intrinsics.h
+volk_prefs.h
+volk_sse3_intrinsics.h
+volk_sse_intrinsics.h
+volk_typedefs.h
+
+
to the top
+

Libraries  1 


+
+libvolk.so.1.4
+
+
to the top
+



+ +
+ + diff --git a/changelog b/changelog new file mode 100644 index 0000000..e65f3e1 --- /dev/null +++ b/changelog @@ -0,0 +1,408 @@ +volk (2.2.0-2) unstable; urgency=medium + + * Upload to unstable + + -- A. Maitland Bottoms Tue, 18 Feb 2020 17:56:58 -0500 + +volk (2.2.0-1) experimental; urgency=medium + + * New upstream release + - Remove build dependency on python six + - Fixup VolkConfigVersion + - add volk_version.h + + -- A. Maitland Bottoms Sun, 16 Feb 2020 18:25:20 -0500 + +volk (2.1.0-2) unstable; urgency=medium + + * Upload to unstable + + -- A. Maitland Bottoms Sun, 05 Jan 2020 23:17:57 -0500 + +volk (2.1.0-1) experimental; urgency=medium + + * New upstream release + - The AVX FMA rotator bug is fixed + - VOLK offers `volk::vector<>` for C++ to follow RAII + - Use C++17 `std::filesystem` + - This enables VOLK to be built without Boost if available! + - lots of bugfixes + - more optimized kernels, especially more NEON versions + * Upload to experimental for new ABI library package libvolk2.1 + + -- A. Maitland Bottoms Sun, 22 Dec 2019 10:27:36 -0500 + +volk (2.0.0-3) unstable; urgency=medium + + * update to v2.0.0-4-gf04a46f + + -- A. Maitland Bottoms Thu, 14 Nov 2019 22:47:23 -0500 + +volk (2.0.0-2) unstable; urgency=medium + + * Upload to unstable + + -- A. Maitland Bottoms Mon, 12 Aug 2019 22:49:11 -0400 + +volk (2.0.0-1) experimental; urgency=medium + + * New upstream release + + -- A. Maitland Bottoms Wed, 07 Aug 2019 23:31:20 -0400 + +volk (1.4-4) unstable; urgency=medium + + * working volk_modtool with Python 3 + * build and install libvolk.a + + -- A. Maitland Bottoms Mon, 29 Oct 2018 01:32:05 -0400 + +volk (1.4-3) unstable; urgency=medium + + * update to v1.4-9-g297fefd + Added an AVX protokernel for volk_32fc_x2_32f_square_dist_scalar_mult_32f + fixed a buffer over-read and over-write in + volk_32fc_x2_s32f_square_dist_scalar_mult_32f_a_avx + Fix 32u_reverse_32u for ARM + + -- A. Maitland Bottoms Sat, 12 May 2018 15:25:04 -0400 + +volk (1.4-2) unstable; urgency=medium + + * Upload to unstable, needed by gnuradio (>= 3.7.12.0) + + -- A. Maitland Bottoms Tue, 03 Apr 2018 01:03:19 -0400 + +volk (1.4-1) experimental; urgency=medium + + * New upstream release + upstream changelog http://libvolk.org/release-v14.html + + -- A. Maitland Bottoms Tue, 27 Mar 2018 22:57:42 -0400 + +volk (1.3.1-1) unstable; urgency=medium + + * New upstream bugfix release + * Refresh all debian patches for use with git am + + -- A. Maitland Bottoms Tue, 27 Mar 2018 21:54:29 -0400 + +volk (1.3-3) unstable; urgency=medium + + * update to v1.3-23-g0109b2e + * update debian/libvolk1-dev.abi.tar.gz.amd64 + * Add breaks/replaces gnuradio (<=3.7.2.1) (LP: #1614235) + + -- A. Maitland Bottoms Sun, 04 Feb 2018 13:12:21 -0500 + +volk (1.3-2) unstable; urgency=medium + + * update to v1.3-16-g28b03a9 + apps: fix profile update reading end of lines + qa: lower tolerance for 32fc_mag to fix issue #96 + * include upstream master patch to sort input files + + -- A. Maitland Bottoms Sun, 27 Aug 2017 13:44:55 -0400 + +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..48082f7 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +12 diff --git a/control b/control new file mode 100644 index 0000000..28f6605 --- /dev/null +++ b/control @@ -0,0 +1,79 @@ +Source: volk +Section: libdevel +Priority: optional +Maintainer: A. Maitland Bottoms +Build-Depends: cmake, + debhelper (>= 12~), + dh-python, + liborc-0.4-dev, + python3-dev, + python3-mako +Build-Depends-Indep: doxygen +Standards-Version: 4.4.0 +Homepage: http://libvolk.org +Vcs-Browser: https://salsa.debian.org/bottoms/pkg-volk +Vcs-Git: https://salsa.debian.org/bottoms/pkg-volk.git + +Package: libvolk2.2 +Section: libs +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: ${misc:Depends}, ${shlibs:Depends} +Multi-Arch: same +Recommends: libvolk2-bin +Suggests: libvolk2-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: libvolk2-dev +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: libvolk2.2 (=${binary:Version}), ${misc:Depends} +Breaks: gnuradio-dev (<<3.7.8), libvolk-dev, libvolk1.0-dev, libvolk1-dev +Replaces: gnuradio-dev (<<3.7.8), libvolk-dev, libvolk1.0-dev, libvolk1-dev +Suggests: libvolk2-doc +Multi-Arch: same +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: libvolk2-bin +Section: libs +Architecture: any +Pre-Depends: ${misc:Pre-Depends} +Depends: libvolk2.2 (=${binary:Version}), + ${misc:Depends}, + ${python3:Depends}, + ${shlibs:Depends} +Breaks: libvolk1-bin, libvolk-bin, libvolk1.0-bin, gnuradio (<=3.7.2.1) +Replaces: libvolk1-bin, libvolk-bin, libvolk1.0-bin, gnuradio (<=3.7.2.1) +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. + +Package: libvolk2-doc +Section: doc +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Recommends: lynx | www-browser +Description: vector optimized library documentation + 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 Doxygen generated documentation in + /usr/share/doc/libvolk2-dev/html/index.html diff --git a/copyright b/copyright new file mode 100644 index 0000000..0dc7d72 --- /dev/null +++ b/copyright @@ -0,0 +1,187 @@ +Format: https://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 + git archive --format=tar --prefix=volk-2.1.0/ v2.1.0 | xz > ../volk_2.1.0.orig.tar.xz + . + Upstream Maintainers: + Johannes Demel + Michael Dickens +Copyright: 2014-2019 Free Software Foundation, Inc. +License: GPL-3+ + +Files: * +Copyright: 2006, 2009-2020, Free Software Foundation, Inc. +License: GPL-3+ + +Files: Doxyfile.in + DoxygenLayout.xml + volk.pc.in +Copyright: 2014-2020 Free Software Foundation, Inc. +License: GPL-3+ + +Files: apps/volk_profile.h +Copyright: 2014-2020 Free Software Foundation, Inc. +License: GPL-3+ + +Files: appveyor.yml +Copyright: 2016 Paul Cercueil +License: GPL-3+ + +Files: cmake/* +Copyright: 2014-2020 Free Software Foundation, Inc. +License: GPL-3+ + +Files: cmake/Modules/* +Copyright: 2006, 2009-2020, Free Software Foundation, Inc. +License: GPL-3+ + +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. + +Files: cmake/Modules/FindORC.cmake + cmake/Modules/VolkConfig.cmake.in +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: cmake/msvc/* +Copyright: 2006-2008, Alexander Chemeris +License: BSD-2-clause + 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 +Copyright: 2005, 2006 Apple Computer, Inc. +License: LGPL-2+ + +Files: cmake/msvc/stdbool.h +Copyright: 2005, 2006, Apple Computer, Inc. +License: LGPL-2+ + +Files: debian/* +Copyright: 2015-2020 Free Software Foundation, Inc +License: GPL-3+ +Comment: assigned by A. Maitland Bottoms + +Files: debian/libvolk2-dev.abi.tar.gz.amd64 +Copyright: 2019 Free Software Foundation, Inc +License: GPL-3+ + +Files: docs/* +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: gen/archs.xml + gen/machines.xml +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: include/volk/volk_common.h + include/volk/volk_complex.h + include/volk/volk_prefs.h +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: kernels/volk/asm/* +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: kernels/volk/volk_16u_byteswappuppet_16u.h + kernels/volk/volk_32u_byteswappuppet_32u.h + kernels/volk/volk_64u_byteswappuppet_64u.h +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +Files: lib/kernel_tests.h + lib/qa_utils.cc + lib/qa_utils.h + lib/volk_prefs.c +Copyright: 2014-2015 Free Software Foundation, Inc. +License: GPL-3+ + +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. + +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/libvolk2-bin.install b/libvolk2-bin.install new file mode 100644 index 0000000..7221b71 --- /dev/null +++ b/libvolk2-bin.install @@ -0,0 +1,2 @@ +usr/bin/volk* +usr/lib/python3/dist-packages diff --git a/libvolk2-bin.manpages b/libvolk2-bin.manpages new file mode 100644 index 0000000..95bae9e --- /dev/null +++ b/libvolk2-bin.manpages @@ -0,0 +1,3 @@ +debian/volk-config-info.1 +debian/volk_modtool.1 +debian/volk_profile.1 diff --git a/libvolk2-dev.abi.tar.gz.amd64 b/libvolk2-dev.abi.tar.gz.amd64 new file mode 100644 index 0000000000000000000000000000000000000000..ff8acb11bc9086448184fa5deb3829b35b249e12 GIT binary patch literal 59831 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 e*q(YcbTXIftmyv=t^MvFG&^4{K4O0T=>GxJ; + + + + -DHAVE_CPUID_H + -DHAVE_DLFCN_H + -DHAVE_FENV_H + -DHAVE_POSIX_MEMALIGN + -DHAVE_XGETBV + -D_GLIBCXX_USE_CXX11_ABI=1 + -I/usr/include/orc-0.4 + -DNDEBUG + -std=gnu11 + -m64 + -mmmx + -msse + -msse2 + -msse3 + -mssse3 + -msse4.1 + -msse4.2 + -mpopcnt + -mavx + -mfma + -mavx2 + -mavx512f + -mavx512cd + -fPIC + -g + -O2 + -fstack-protector-strong + -Wformat + -Werror=format-security + -Wdate-time + -D_FORTIFY_SOURCE=2 + -fvisibility=hidden + -Wsign-compare + -Wall + -Wno-uninitialized + + + +debian/libvolk2-dev/usr/include/volk/ + + + +debian/libvolk2.0/usr/lib/ + + + diff --git a/libvolk2-dev.docs b/libvolk2-dev.docs new file mode 100644 index 0000000..a536950 --- /dev/null +++ b/libvolk2-dev.docs @@ -0,0 +1,2 @@ +debian/1.3_to_1.4_compat_report.html +debian/1.4_to_2.0_compat_report.html diff --git a/libvolk2-dev.install b/libvolk2-dev.install new file mode 100644 index 0000000..8b14c56 --- /dev/null +++ b/libvolk2-dev.install @@ -0,0 +1,5 @@ +usr/include/* +usr/lib/*/*volk.a +usr/lib/*/*volk*so +usr/lib/*/cmake/volk +usr/lib/*/pkgconfig/*volk* diff --git a/libvolk2-doc.doc-base b/libvolk2-doc.doc-base new file mode 100644 index 0000000..3d5fdc8 --- /dev/null +++ b/libvolk2-doc.doc-base @@ -0,0 +1,19 @@ +Document: libvolk2-doc +Title: Vector-Optimized Library of Kernels Reference Manual +Author: GNU Radio Developers +Abstract: VOLK is the Vector-Optimized Library of Kernels. + It is a library that contains kernels of hand-written SIMD code for + different mathematical operations. Since each SIMD architecture can + be very different and no compiler has yet come along to handle + vectorization properly or highly efficiently, VOLK approaches the + problem differently. For each architecture or platform that a + developer wishes to vectorize for, a new proto-kernel is added to + VOLK. At runtime, VOLK will select the correct proto-kernel. In this + way, the users of VOLK call a kernel for performing the operation + that is platform/architecture agnostic. This allows us to write + portable SIMD code. +Section: Programming/C++ + +Format: HTML +Index: /usr/share/doc/libvolk2-dev/html/index.html +Files: /usr/share/doc/libvolk2-dev/html/*.html diff --git a/libvolk2-doc.docs b/libvolk2-doc.docs new file mode 100644 index 0000000..87dd314 --- /dev/null +++ b/libvolk2-doc.docs @@ -0,0 +1 @@ +obj-*/html diff --git a/libvolk2.2.install b/libvolk2.2.install new file mode 100644 index 0000000..e4252f4 --- /dev/null +++ b/libvolk2.2.install @@ -0,0 +1 @@ +usr/lib/*/libvolk.so.* diff --git a/patches/make-acc-happy b/patches/make-acc-happy new file mode 100644 index 0000000..07ee498 --- /dev/null +++ b/patches/make-acc-happy @@ -0,0 +1,60 @@ +From 799245ea6e9e05cc0ed0fabe783fbbe1a5054fd4 Mon Sep 17 00:00:00 2001 +From: "A. Maitland Bottoms" +Date: Tue, 27 Mar 2018 22:02:59 -0400 +Subject: [PATCH 2/6] 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 problems. +--- + include/volk/volk_neon_intrinsics.h | 2 ++ + kernels/volk/volk_32f_8u_polarbutterflypuppet_32f.h | 1 + + kernels/volk/volk_8u_x2_encodeframepolar_8u.h | 3 --- + 3 files changed, 3 insertions(+), 3 deletions(-) + +--- a/include/volk/volk_neon_intrinsics.h ++++ b/include/volk/volk_neon_intrinsics.h +@@ -79,6 +79,7 @@ + + #ifndef INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ + #define INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ ++#ifdef LV_HAVE_NEON + #include + + +@@ -275,4 +276,5 @@ + } + + ++#endif /*LV_HAVE_NEON*/ + #endif /* INCLUDE_VOLK_VOLK_NEON_INTRINSICS_H_ */ +--- 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/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/optional-static-apps b/patches/optional-static-apps new file mode 100644 index 0000000..399ee9b --- /dev/null +++ b/patches/optional-static-apps @@ -0,0 +1,20 @@ +--- a/apps/CMakeLists.txt ++++ b/apps/CMakeLists.txt +@@ -62,7 +62,7 @@ + target_link_libraries(volk_profile PRIVATE std::filesystem) + endif() + +-if(ENABLE_STATIC_LIBS) ++if(ENABLE_STATIC_LIBS AND ENABLE_STATIC_APPS) + target_link_libraries(volk_profile PRIVATE volk_static) + set_target_properties(volk_profile PROPERTIES LINK_FLAGS "-static") + else() +@@ -79,7 +79,7 @@ + add_executable(volk-config-info volk-config-info.cc ${CMAKE_CURRENT_SOURCE_DIR}/volk_option_helpers.cc + ) + +-if(ENABLE_STATIC_LIBS) ++if(ENABLE_STATIC_LIBS AND ENABLE_STATIC_APPS) + target_link_libraries(volk-config-info volk_static) + set_target_properties(volk-config-info PROPERTIES LINK_FLAGS "-static") + else() diff --git a/patches/remove-external-HTML-resources b/patches/remove-external-HTML-resources new file mode 100644 index 0000000..493356f --- /dev/null +++ b/patches/remove-external-HTML-resources @@ -0,0 +1,8 @@ +--- a/README.md ++++ b/README.md +@@ -1,5 +1,3 @@ +-[![Build Status](https://travis-ci.org/gnuradio/volk.svg?branch=master)](https://travis-ci.org/gnuradio/volk) [![Build status](https://ci.appveyor.com/api/projects/status/5o56mgw0do20jlh3/branch/master?svg=true)](https://ci.appveyor.com/project/gnuradio/volk/branch/master) +- + ![VOLK Logo](/docs/volk_logo.png) + + # Welcome to VOLK! diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..54934f3 --- /dev/null +++ b/patches/series @@ -0,0 +1,3 @@ +make-acc-happy +optional-static-apps +remove-external-HTML-resources diff --git a/rules b/rules new file mode 100755 index 0000000..f80dbba --- /dev/null +++ b/rules @@ -0,0 +1,23 @@ +#!/usr/bin/make -f +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +export DEB_HOST_MULTIARCH +export DH_VERBOSE=1 + +%: + dh $@ --with python3 + +override_dh_auto_configure: + dh_auto_configure -- -DLIB_SUFFIX="/$(DEB_HOST_MULTIARCH)" \ + -DENABLE_STATIC_LIBS=On, -DPYTHON_EXECUTABLE=/usr/bin/python3 \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo + +override_dh_auto_build-indep: + cmake --build obj-* --target volk_doc + +override_dh_auto_test: + - dh_auto_test -- CTEST_TEST_TIMEOUT=60 + +override_dh_acc: + - abi-compliance-checker -l libvolk2-dev -v1 2.0.0-1 -dump debian/libvolk2-dev.acc -dump-path debian/libvolk2-dev/usr/lib/x86_64-linux-gnu/dh-acc/libvolk2-dev_2.0.0-1.abi.tar.gz + - cat logs/libvolk2-dev/2.0.0-1/log.txt + - 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..2a77b05 --- /dev/null +++ b/source/include-binaries @@ -0,0 +1 @@ +debian/libvolk2-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..1339ebb --- /dev/null +++ b/watch @@ -0,0 +1,4 @@ +version=4 + opts="pgpsigurlmangle=s%$%.asc%,filenamemangle=s%(?:.*?)?volk-?(\d[\d.]*)\.tar\.xz%volk_$1.orig.tar.xz%" \ + https://github.com/gnuradio/volk/releases \ + (?:.*?/)?volk-?(\d[\d.]*)\.tar\.xz debian uupdate -- 2.30.2