mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2026-05-02 19:51:25 +00:00
volk_gnsssdr: improve install path detection
Re-enable usage of own cpu_features if volk >= 3.1 and not found Add toolchain file for riscv64 RVV and CI tests
This commit is contained in:
@@ -394,23 +394,12 @@ endif()
|
||||
########################################################################
|
||||
# Detect /lib versus /lib64
|
||||
########################################################################
|
||||
if(${CMAKE_INSTALL_LIBDIR} MATCHES lib64)
|
||||
set(LIB_SUFFIX 64)
|
||||
endif()
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Setup the package config file
|
||||
########################################################################
|
||||
# set variables found in the pc.in file
|
||||
if(NOT LIB_SUFFIX)
|
||||
set(LIB_SUFFIX "")
|
||||
endif()
|
||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
set(exec_prefix "\${prefix}")
|
||||
set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
|
||||
set(includedir "\${prefix}/include")
|
||||
|
||||
configure_file(
|
||||
${PROJECT_SOURCE_DIR}/tmpl/volk_gnsssdr.pc.in
|
||||
${PROJECT_BINARY_DIR}/volk_gnsssdr.pc
|
||||
@@ -419,7 +408,7 @@ configure_file(
|
||||
|
||||
install(
|
||||
FILES ${PROJECT_BINARY_DIR}/volk_gnsssdr.pc
|
||||
DESTINATION lib${LIB_SUFFIX}/pkgconfig
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||
COMPONENT "volk_gnsssdr_devel"
|
||||
)
|
||||
|
||||
@@ -427,7 +416,7 @@ install(
|
||||
# Install all headers in the include directories
|
||||
########################################################################
|
||||
set(VOLK_RUNTIME_DIR bin)
|
||||
set(VOLK_LIBRARY_DIR lib${LIB_SUFFIX})
|
||||
set(VOLK_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR})
|
||||
set(VOLK_INCLUDE_DIR include)
|
||||
|
||||
install(
|
||||
@@ -524,7 +513,7 @@ configure_file(
|
||||
########################################################################
|
||||
|
||||
if(NOT CMAKE_MODULES_DIR)
|
||||
set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)
|
||||
set(CMAKE_MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/cmake)
|
||||
endif()
|
||||
|
||||
install(
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
|
||||
# This file is part of GNSS-SDR.
|
||||
#
|
||||
# Copyright (C) 2011-2025 (see AUTHORS file for a list of contributors)
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR riscv64)
|
||||
|
||||
set(CMAKE_C_COMPILER $ENV{CC})
|
||||
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
|
||||
set(CMAKE_CXX_COMPILER $ENV{CXX})
|
||||
|
||||
set(CMAKE_C_FLAGS "$ENV{CFLAGS} -march=rv64gcv" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "" FORCE)
|
||||
set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -g" CACHE STRING "" FORCE)
|
||||
|
||||
set(CMAKE_OBJCOPY
|
||||
${RISCV64_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy
|
||||
CACHE INTERNAL "objcopy tool")
|
||||
set(CMAKE_SIZE_UTIL
|
||||
${RISCV64_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size
|
||||
CACHE INTERNAL "size tool")
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH})
|
||||
|
||||
set(QEMU_VLEN $ENV{VLEN})
|
||||
if(NOT QEMU_VLEN)
|
||||
set(QEMU_VLEN "128")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CROSSCOMPILING_EMULATOR "qemu-riscv64-static -L /usr/riscv64-linux-gnu/ -cpu rv64,zba=true,zbb=true,v=on,vlen=${QEMU_VLEN},rvv_ta_all_1s=on,rvv_ma_all_1s=on")
|
||||
@@ -534,4 +534,48 @@ static inline void volk_gnsssdr_32f_index_max_32u_neon(uint32_t* target, const f
|
||||
|
||||
#endif /* LV_HAVE_NEON */
|
||||
|
||||
#ifdef LV_HAVE_RVV
|
||||
#include <riscv_vector.h>
|
||||
|
||||
static inline void volk_gnsssdr_32f_index_max_32u_rvv(uint32_t* target, const float* src0, uint32_t num_points)
|
||||
{
|
||||
if (num_points == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
float max_val = src0[0];
|
||||
uint32_t max_idx = 0;
|
||||
size_t vl;
|
||||
|
||||
// Process in chunks
|
||||
for (size_t i = 0; i < num_points; i += vl)
|
||||
{
|
||||
// Set vector length for this iteration
|
||||
vl = __riscv_vsetvl_e32m1(num_points - i);
|
||||
|
||||
// Load vector of values
|
||||
vfloat32m1_t v_vals = __riscv_vle32_v_f32m1(&src0[i], vl);
|
||||
|
||||
// Process each element in the vector
|
||||
for (size_t j = 0; j < vl; j++)
|
||||
{
|
||||
float val = __riscv_vfmv_f_s_f32m1_f32(v_vals);
|
||||
if (val > max_val)
|
||||
{
|
||||
max_val = val;
|
||||
max_idx = i + j;
|
||||
}
|
||||
// Shift to next element by reloading
|
||||
if (j + 1 < vl)
|
||||
{
|
||||
v_vals = __riscv_vle32_v_f32m1(&src0[i + j + 1], vl - j - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
target[0] = max_idx;
|
||||
}
|
||||
|
||||
#endif /* LV_HAVE_RVV */
|
||||
|
||||
#endif /* INCLUDED_volk_gnsssdr_32f_index_max_32u_H */
|
||||
|
||||
@@ -655,8 +655,8 @@ if(NOT (ENABLE_STATIC_LIBS AND (CMAKE_GENERATOR STREQUAL Xcode)))
|
||||
# Install locations
|
||||
install(TARGETS volk_gnsssdr
|
||||
EXPORT VOLK_GNSSSDR-export
|
||||
LIBRARY DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_runtime" # .so file
|
||||
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_devel" # .lib file
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT "volk_gnsssdr_runtime" # .so file
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT "volk_gnsssdr_devel" # .lib file
|
||||
RUNTIME DESTINATION bin COMPONENT "volk_gnsssdr_runtime" # .dll file
|
||||
)
|
||||
endif()
|
||||
@@ -703,7 +703,7 @@ if(ENABLE_STATIC_LIBS)
|
||||
|
||||
install(TARGETS volk_gnsssdr_static
|
||||
EXPORT VOLK_GNSSSDR-export
|
||||
ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "volk_gnsssdr_devel"
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT "volk_gnsssdr_devel"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# SPDX-FileCopyrightText: 2014 Carles Fernandez-Prades <carles.fernandez@cttc.es>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
exec_prefix=@CMAKE_INSTALL_PREFIX@
|
||||
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||
LV_CXXFLAGS=@LV_CXXFLAGS@
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user