From 72a2b062386beafd0548faf004af347da37db4d5 Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Fri, 9 Jun 2017 11:33:46 +0200 Subject: [PATCH] Fixed incompatibility with volk1.2 Make pointer type warnings an error --- CMakeLists.txt | 4 ++-- cmake/modules/FindVolk.cmake | 20 ++++++++++++++------ lib/src/phy/CMakeLists.txt | 2 +- lib/src/phy/utils/vector.c | 24 ++++++++++++++++++------ 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83ebeb618..4f3cb5f8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,7 +194,7 @@ macro(ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have) endmacro(ADD_CXX_COMPILER_FLAG_IF_AVAILABLE) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${GCC_ARCH} -Wall -Wno-comment -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable -std=c++03") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=${GCC_ARCH} -Wall -Werror=incompatible-pointer-types -Wno-comment -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable -std=c++03") if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -DDEBUG_MODE") @@ -216,7 +216,7 @@ endif(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clan if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${GCC_ARCH} -Wall -Wno-comment -Wno-write-strings -Wno-format-extra-args -Winline -Wno-unused-result -Wno-format -std=c99 -D_GNU_SOURCE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=${GCC_ARCH} -Wall -Werror=incompatible-pointer-types -Wno-comment -Wno-write-strings -Wno-format-extra-args -Winline -Wno-unused-result -Wno-format -std=c99 -D_GNU_SOURCE") if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -DDEBUG_MODE") diff --git a/cmake/modules/FindVolk.cmake b/cmake/modules/FindVolk.cmake index 92b2b91ea..96262a3b8 100644 --- a/cmake/modules/FindVolk.cmake +++ b/cmake/modules/FindVolk.cmake @@ -31,7 +31,8 @@ MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_DEFINITIONS) IF(VOLK_FOUND) SET(CMAKE_REQUIRED_LIBRARIES ${VOLK_LIBRARIES} m) CHECK_FUNCTION_EXISTS_MATH(volk_16i_s32f_convert_32f HAVE_VOLK_CONVERT_IF_FUNCTION) - CHECK_FUNCTION_EXISTS_MATH(volk_32f_index_max_16u HAVE_VOLK_MAX_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_index_max_16u HAVE_VOLK_MAX_FUNCTION_16) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_index_max_32u HAVE_VOLK_MAX_FUNCTION_32) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_max_32f HAVE_VOLK_MAX_VEC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_accumulator_s32f HAVE_VOLK_ACC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32fc_multiply_32fc HAVE_VOLK_MULT_FUNCTION) @@ -55,7 +56,8 @@ IF(VOLK_FOUND) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_add_32f HAVE_VOLK_ADD_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_square_dist_32f HAVE_VOLK_SQUARE_DIST_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_real_32f HAVE_VOLK_DEINTERLEAVE_REAL_FUNCTION) - CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_16u HAVE_VOLK_MAX_ABS_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_16u HAVE_VOLK_MAX_ABS_FUNCTION_16) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_32u HAVE_VOLK_MAX_ABS_FUNCTION_32) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_multiply_32f HAVE_VOLK_MULT_REAL2_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_16i_max_star_16i HAVE_VOLK_MAX_STAR_S_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_8i_convert_16i HAVE_VOLK_CONVERT_CI_FUNCTION) @@ -75,8 +77,11 @@ IF(VOLK_FOUND) IF(${HAVE_VOLK_MAX_STAR_S_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_STAR_S_FUNCTION") ENDIF() - IF(${HAVE_VOLK_MAX_ABS_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_ABS_FUNCTION") + IF(${HAVE_VOLK_MAX_ABS_FUNCTION_16}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_ABS_FUNCTION_16") + ENDIF() + IF(${HAVE_VOLK_MAX_ABS_FUNCTION_32}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_ABS_FUNCTION_32") ENDIF() IF(${HAVE_VOLK_MAX_VEC_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_VEC_FUNCTION") @@ -111,8 +116,11 @@ IF(VOLK_FOUND) IF(${HAVE_VOLK_CONVERT_FI_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_CONVERT_FI_FUNCTION") ENDIF() - IF(${HAVE_VOLK_MAX_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_FUNCTION") + IF(${HAVE_VOLK_MAX_FUNCTION_16}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_FUNCTION_16") + ENDIF() + IF(${HAVE_VOLK_MAX_FUNCTION_32}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_FUNCTION_32") ENDIF() IF(${HAVE_VOLK_ACC_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ACC_FUNCTION") diff --git a/lib/src/phy/CMakeLists.txt b/lib/src/phy/CMakeLists.txt index 074ddec55..118827bd1 100644 --- a/lib/src/phy/CMakeLists.txt +++ b/lib/src/phy/CMakeLists.txt @@ -54,7 +54,7 @@ set(srslte_srcs $ $ ) -add_library(srslte_phy STATIC ${srslte_srcs}) +add_library(srslte_phy SHARED ${srslte_srcs}) set_target_properties(srslte_phy PROPERTIES VERSION ${SRSLTE_VERSION_MAJOR}.${SRSLTE_VERSION_MINOR}) diff --git a/lib/src/phy/utils/vector.c b/lib/src/phy/utils/vector.c index 26be1b2b4..725fdfd98 100644 --- a/lib/src/phy/utils/vector.c +++ b/lib/src/phy/utils/vector.c @@ -717,11 +717,17 @@ void srslte_vec_arg_cf(cf_t *x, float *arg, uint32_t len) { } uint32_t srslte_vec_max_fi(float *x, uint32_t len) { -#ifdef HAVE_VOLK_MAX_FUNCTION - uint16_t target=0; + + // This is to solve an issue with incorrect type of 1st parameter in version 1.2 of volk +#ifdef HAVE_VOLK_MAX_FUNCTION_32 + uint32_t target=0; + volk_32f_index_max_32u(&target,x,len); + return target; +#else +#ifdef HAVE_VOLK_MAX_FUNCTION_16 + uint32_t target=0; volk_32f_index_max_16u(&target,x,len); return target; - #else uint32_t i; float m=-FLT_MAX; @@ -734,6 +740,7 @@ uint32_t srslte_vec_max_fi(float *x, uint32_t len) { } return p; #endif +#endif } int16_t srslte_vec_max_star_si(int16_t *x, uint32_t len) { @@ -782,11 +789,15 @@ void srslte_vec_max_fff(float *x, float *y, float *z, uint32_t len) { uint32_t srslte_vec_max_abs_ci(cf_t *x, uint32_t len) { -#ifdef HAVE_VOLK_MAX_ABS_FUNCTION - uint16_t target=0; +#ifdef HAVE_VOLK_MAX_ABS_FUNCTION_32 + uint32_t target=0; + volk_32fc_index_max_32u(&target,x,len); + return target; +#else +#ifdef HAVE_VOLK_MAX_ABS_FUNCTION_16 + uint32_t target=0; volk_32fc_index_max_16u(&target,x,len); return target; - #else uint32_t i; float m=-FLT_MAX; @@ -801,6 +812,7 @@ uint32_t srslte_vec_max_abs_ci(cf_t *x, uint32_t len) { } return p; #endif +#endif } void srslte_vec_quant_fuc(float *in, uint8_t *out, float gain, float offset, float clip, uint32_t len) {