Bug#828034: gnss-sdr: FTBFS on i386 and amd64: cannot convert 'unsigned int*' to 'uint16_t*
tags 828034 + patch
Workaround for this issue is available here:
https://github.com/gnss-sdr/gnss-sdr/issues/31
Patch that contains backported changes from mentioned workaround is attached.
With this patch applied I was able to build gnss-sdr successfully for i386, amd64, mips*.
Note:
For mips* it is needed to include patch available here:
https://bugs.debian.org/828040
--- gnss-sdr-0.0.7.orig/cmake/Modules/FindVolk.cmake
+++ gnss-sdr-0.0.7/cmake/Modules/FindVolk.cmake
@@ -27,7 +27,7 @@ FIND_LIBRARY(
${GNURADIO_INSTALL_PREFIX}/lib
)
-set(VOLK_VERSION ${PC_VOLK_VERSION})
+## set(VOLK_VERSION ${PC_VOLK_VERSION})
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/CMakeLists.txt
@@ -46,6 +46,30 @@ include_directories(
${VOLK_GNSSSDR_INCLUDE_DIRS}
)
+## Workaround for issues with the change of VOLK API
+## See https://github.com/gnuradio/volk/issues/84
+## and https://github.com/gnss-sdr/gnss-sdr/issues/31
+
+if(NOT VOLK_VERSION)
+ set(VOLK_VERSION "1.2.2")
+endif(NOT VOLK_VERSION)
+
+if(VOLK_VERSION VERSION_EQUAL 1.2.2)
+ find_file(VOLK_GREATER_THAN_122
+ NAMES volk/volk_32f_index_max_32u.h
+ HINTS ${CMAKE_INSTALL_PREFIX}/include
+ PATHS /usr/local/include
+ /usr/include
+ ${CMAKE_INSTALL_PREFIX}/include
+ )
+ if(VOLK_GREATER_THAN_122)
+ set(VOLK_VERSION "1.2.3+")
+ endif(VOLK_GREATER_THAN_122)
+endif(VOLK_VERSION VERSION_EQUAL 1.2.2)
+
+if(VOLK_VERSION VERSION_GREATER 1.2.2)
+ add_definitions(-DVOLK_GT_122=1)
+endif(VOLK_VERSION VERSION_GREATER 1.2.2)
if(OPENCL_FOUND)
include_directories( ${OPENCL_INCLUDE_DIRS} )
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/galileo_e5a_noncoherent_iq_acquisition_caf_cc.cc
@@ -424,11 +424,22 @@ int galileo_e5a_noncoherentIQ_acquisitio
// initialize acquisition algorithm
int doppler;
+
+#if VOLK_GT_122
+ uint16_t indext = 0;
+ uint16_t indext_IA = 0;
+ uint16_t indext_IB = 0;
+ uint16_t indext_QA = 0;
+ uint16_t indext_QB = 0;
+#else
unsigned int indext = 0;
unsigned int indext_IA = 0;
unsigned int indext_IB = 0;
unsigned int indext_QA = 0;
unsigned int indext_QB = 0;
+#endif
+
+
float magt = 0.0;
float magt_IA = 0.0;
float magt_IB = 0.0;
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/galileo_pcps_8ms_acquisition_cc.cc
@@ -242,9 +242,15 @@ int galileo_pcps_8ms_acquisition_cc::gen
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+ uint16_t indext_A = 0;
+ uint16_t indext_B = 0;
+#else
unsigned int indext = 0;
unsigned int indext_A = 0;
unsigned int indext_B = 0;
+#endif
float magt = 0.0;
float magt_A = 0.0;
float magt_B = 0.0;
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_cc.cc
@@ -284,7 +284,11 @@ int pcps_acquisition_cc::general_work(in
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_fine_doppler_cc.cc
@@ -222,8 +222,13 @@ double pcps_acquisition_fine_doppler_cc:
float magt = 0.0;
float fft_normalization_factor;
int index_doppler = 0;
+#if VOLK_GT_122
+ uint16_t tmp_intex_t;
+ uint16_t index_time = 0;
+#else
unsigned int tmp_intex_t;
unsigned int index_time = 0;
+#endif
for (int i=0;i<d_num_doppler_points;i++)
{
@@ -359,7 +364,11 @@ int pcps_acquisition_fine_doppler_cc::es
volk_32fc_magnitude_squared_32f(p_tmp_vector, fft_operator->get_outbuf(), fft_size_extended);
+#if VOLK_GT_122
+ uint16_t tmp_index_freq = 0;
+#else
unsigned int tmp_index_freq = 0;
+#endif
volk_32f_index_max_16u(&tmp_index_freq, p_tmp_vector, fft_size_extended);
//case even
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_acquisition_sc.cc
@@ -281,7 +281,11 @@ int pcps_acquisition_sc::general_work(in
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
const lv_16sc_t *in = (const lv_16sc_t *)input_items[0]; //Get the input samples pointer
int effective_fft_size = ( d_bit_transition_flag ? d_fft_size/2 : d_fft_size );
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_assisted_acquisition_cc.cc
@@ -268,8 +268,13 @@ double pcps_assisted_acquisition_cc::sea
float magt = 0.0;
float fft_normalization_factor;
int index_doppler = 0;
+#if VOLK_GT_122
+ uint16_t tmp_intex_t;
+ uint16_t index_time = 0;
+#else
unsigned int tmp_intex_t;
unsigned int index_time = 0;
+#endif
for (int i=0;i<d_num_doppler_points;i++)
{
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_cccwsr_acquisition_cc.cc
@@ -254,9 +254,15 @@ int pcps_cccwsr_acquisition_cc::general_
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+ uint16_t indext_plus = 0;
+ uint16_t indext_minus = 0;
+#else
unsigned int indext = 0;
unsigned int indext_plus = 0;
unsigned int indext_minus = 0;
+#endif
float magt = 0.0;
float magt_plus = 0.0;
float magt_minus = 0.0;
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_multithread_acquisition_cc.cc
@@ -200,7 +200,11 @@ void pcps_multithread_acquisition_cc::ac
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
float fft_normalization_factor = (float)d_fft_size * (float)d_fft_size;
gr_complex* in = d_in_buffer[d_well_count];
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_opencl_acquisition_cc.cc
@@ -386,7 +386,11 @@ void pcps_opencl_acquisition_cc::acquisi
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
float fft_normalization_factor = static_cast<float>(d_fft_size) * static_cast<float>(d_fft_size);
gr_complex* in = d_in_buffer[d_well_count];
@@ -508,7 +512,11 @@ void pcps_opencl_acquisition_cc::acquisi
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
float fft_normalization_factor = (static_cast<float>(d_fft_size_pow2) * static_cast<float>(d_fft_size)); //This works, but I am not sure why.
gr_complex* in = d_in_buffer[d_well_count];
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_quicksync_acquisition_cc.cc
@@ -301,7 +301,11 @@ int pcps_quicksync_acquisition_cc::gener
/* initialize acquisition implementing the QuickSync algorithm*/
//DLOG(INFO) << "START CASE 1";
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer
--- gnss-sdr-0.0.7.orig/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc
+++ gnss-sdr-0.0.7/src/algorithms/acquisition/gnuradio_blocks/pcps_tong_acquisition_cc.cc
@@ -279,7 +279,11 @@ int pcps_tong_acquisition_cc::general_wo
{
// initialize acquisition algorithm
int doppler;
+#if VOLK_GT_122
+ uint16_t indext = 0;
+#else
unsigned int indext = 0;
+#endif
float magt = 0.0;
const gr_complex *in = (const gr_complex *)input_items[0]; //Get the input samples pointer
float fft_normalization_factor = static_cast<float>(d_fft_size) * static_cast<float>(d_fft_size);
Reply to: