mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Merge branch 'next' of github.com:gnss-sdr/gnss-sdr into pps_lime
This commit is contained in:
		
							
								
								
									
										79
									
								
								.github/workflows/gnss-sdr_archs.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								.github/workflows/gnss-sdr_archs.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  | # SPDX-FileCopyrightText: 2023 Carles Fernandez-Prades <carles.fernandez@cttc.es> | ||||||
|  |  | ||||||
|  | name: Run gnss-sdr in non-x86 archs | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - "**-archs" | ||||||
|  |       - main | ||||||
|  |   workflow_dispatch: | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   gnss-sdr-non-x86: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     name: ${{ matrix.distro }} ${{ matrix.arch }} ${{ matrix.compiler.name }} | ||||||
|  |  | ||||||
|  |     # Run steps on a matrix of archs. | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         include: | ||||||
|  |           - arch: aarch64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: aarch64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: clang-14, cc: clang-14, cxx: clang++-14 } | ||||||
|  |           - arch: armv7 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: ppc64le | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: s390x | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: riscv64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |  | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3.1.0 | ||||||
|  |       - uses: uraimo/run-on-arch-action@v2.5.0 | ||||||
|  |         name: Test in non-x86 container | ||||||
|  |         continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} | ||||||
|  |         id: test | ||||||
|  |         with: | ||||||
|  |           arch: ${{ matrix.arch }} | ||||||
|  |           distro: ${{ matrix.distro }} | ||||||
|  |           githubToken: ${{ github.token }} # Not required, but speeds up builds | ||||||
|  |           setup: | | ||||||
|  |             mkdir -p "${PWD}/testing" | ||||||
|  |           dockerRunArgs: | | ||||||
|  |             --volume "${PWD}:/gnss-sdr" | ||||||
|  |           env: | | ||||||
|  |             CC: ${{ matrix.compiler.cc }} | ||||||
|  |             CXX: ${{ matrix.compiler.cxx }} | ||||||
|  |           shell: /bin/sh | ||||||
|  |           install: | | ||||||
|  |             apt-get update -q -y | ||||||
|  |             apt-get install -q -y ${{ matrix.compiler.name }} git ninja-build cmake \ | ||||||
|  |             libboost-dev libboost-date-time-dev libboost-system-dev libboost-filesystem-dev \ | ||||||
|  |             libboost-thread-dev libboost-chrono-dev libboost-serialization-dev \ | ||||||
|  |             liblog4cpp5-dev gnuradio-dev gr-osmosdr libpugixml-dev libpcap-dev libblas-dev \ | ||||||
|  |             liblapack-dev libarmadillo-dev libgflags-dev libgoogle-glog-dev \ | ||||||
|  |             libgnutls-openssl-dev libmatio-dev googletest protobuf-compiler libprotobuf-dev \ | ||||||
|  |             python3-mako liborc-0.4-dev | ||||||
|  |           run: | | ||||||
|  |             git config --global --add safe.directory /gnss-sdr | ||||||
|  |             cd /gnss-sdr | ||||||
|  |             cd testing | ||||||
|  |             mkdir install | ||||||
|  |             cmake -DENABLE_SYSTEM_TESTING_EXTRA=ON -DCMAKE_INSTALL_PREFIX=/gnss-sdr/testing/install -DENABLE_INSTALL_TESTS=ON .. | ||||||
|  |             echo "Build with $(nproc) thread(s)" | ||||||
|  |             make -j$(nproc) | ||||||
|  |             make install | ||||||
|  |             cd install/bin | ||||||
|  |             ./position_test | ||||||
							
								
								
									
										3
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							| @@ -9,6 +9,7 @@ on: | |||||||
|   push: |   push: | ||||||
|     paths-ignore: |     paths-ignore: | ||||||
|       - "**/CITATION.cff" |       - "**/CITATION.cff" | ||||||
|  |   workflow_dispatch: | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build-ubuntu: |   build-ubuntu: | ||||||
| @@ -113,7 +114,7 @@ jobs: | |||||||
|           ln -s $(brew --prefix llvm)/bin/clang-apply-replacements /usr/local/bin |           ln -s $(brew --prefix llvm)/bin/clang-apply-replacements /usr/local/bin | ||||||
|           ln -s $(brew --prefix llvm)/bin/run-clang-tidy /usr/local/bin |           ln -s $(brew --prefix llvm)/bin/run-clang-tidy /usr/local/bin | ||||||
|       - name: Prepare run |       - name: Prepare run | ||||||
|         run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.12.1 core_monitor core_libs pvt_libs |         run: cd build && cmake .. && make volk_gnsssdr_module gtest-1.13.0 core_monitor core_libs pvt_libs | ||||||
|       - name: run clang-tidy |       - name: run clang-tidy | ||||||
|         run: cd build && run-clang-tidy -fix |         run: cd build && run-clang-tidy -fix | ||||||
|       - name: check |       - name: check | ||||||
|   | |||||||
| @@ -4,12 +4,14 @@ on: | |||||||
|   push: |   push: | ||||||
|     paths: |     paths: | ||||||
|       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" |       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" | ||||||
|  |       - "CMakeLists.txt" | ||||||
|   pull_request: |   pull_request: | ||||||
|     paths: |     paths: | ||||||
|       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" |       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" | ||||||
|  |       - "CMakeLists.txt" | ||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
| 
 | 
 | ||||||
| name: Build volk-gnssdr on Android NDK | name: Build volk_gnsssdr on Android NDK | ||||||
| jobs: | jobs: | ||||||
|   build: |   build: | ||||||
|     name: Build on Android NDK ${{ matrix.arch.name }} |     name: Build on Android NDK ${{ matrix.arch.name }} | ||||||
							
								
								
									
										80
									
								
								.github/workflows/volk_gnsssdr_archs.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								.github/workflows/volk_gnsssdr_archs.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | # SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  | # SPDX-FileCopyrightText: 2023 Carles Fernandez-Prades <carles.fernandez@cttc.es> | ||||||
|  |  | ||||||
|  | name: Run volk_gnsssdr tests | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     paths: | ||||||
|  |       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" | ||||||
|  |       - "CMakeLists.txt" | ||||||
|  |   pull_request: | ||||||
|  |     paths: | ||||||
|  |       - "src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/**" | ||||||
|  |       - "CMakeLists.txt" | ||||||
|  |   workflow_dispatch: | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   build-ubuntu-non-x86: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     name: ${{ matrix.distro }} ${{ matrix.arch }} ${{ matrix.compiler.name }} | ||||||
|  |  | ||||||
|  |     # Run steps on a matrix of archs. | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         include: | ||||||
|  |           - arch: aarch64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: aarch64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: clang-14, cc: clang-14, cxx: clang++-14 } | ||||||
|  |           - arch: armv7 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: ppc64le | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: s390x | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |           - arch: riscv64 | ||||||
|  |             distro: ubuntu22.04 | ||||||
|  |             compiler: { name: g++-12, cc: gcc-12, cxx: g++-12 } | ||||||
|  |  | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3.1.0 | ||||||
|  |       - uses: uraimo/run-on-arch-action@v2.5.0 | ||||||
|  |         name: Build in non-x86 container | ||||||
|  |         # continue-on-error: ${{ contains(fromJson('["ppc64le", "s390x"]'), matrix.arch) }} | ||||||
|  |         id: build | ||||||
|  |         with: | ||||||
|  |           arch: ${{ matrix.arch }} | ||||||
|  |           distro: ${{ matrix.distro }} | ||||||
|  |           githubToken: ${{ github.token }} # Not required, but speeds up builds | ||||||
|  |           setup: | | ||||||
|  |             mkdir -p "${PWD}/testing" | ||||||
|  |           dockerRunArgs: | | ||||||
|  |             --volume "${PWD}:/volk_gnsssdr" | ||||||
|  |           env: | | ||||||
|  |             CC: ${{ matrix.compiler.cc }} | ||||||
|  |             CXX: ${{ matrix.compiler.cxx }} | ||||||
|  |           shell: /bin/sh | ||||||
|  |           install: | | ||||||
|  |             apt-get update -q -y | ||||||
|  |             apt-get install -q -y git cmake python3-mako liborc-dev ${{ matrix.compiler.name }} | ||||||
|  |           run: | | ||||||
|  |             git config --global --add safe.directory /volk_gnsssdr | ||||||
|  |             cd /volk_gnsssdr | ||||||
|  |             cd testing | ||||||
|  |             cmake ../src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/ | ||||||
|  |             echo "Build with $(nproc) thread(s)" | ||||||
|  |             make -j$(nproc) | ||||||
|  |             ./cpu_features/list_cpu_features | ||||||
|  |             ./apps/volk_gnsssdr-config-info --alignment | ||||||
|  |             ./apps/volk_gnsssdr-config-info --avail-machines | ||||||
|  |             ./apps/volk_gnsssdr-config-info --all-machines | ||||||
|  |             ./apps/volk_gnsssdr-config-info --malloc | ||||||
|  |             ./apps/volk_gnsssdr-config-info --cc | ||||||
|  |             ctest -V | ||||||
| @@ -50,7 +50,7 @@ option(ENABLE_FLEXIBAND "Enable the use of the signal source adater for the Tele | |||||||
|  |  | ||||||
| option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) | option(ENABLE_ARRAY "Enable the use of CTTC's antenna array front-end as signal source (experimental)" OFF) | ||||||
|  |  | ||||||
| option(ENABLE_ZMQ "Enable GNU Radio ZeroMQ Messaging, requires gr-zeromq" OFF) | option(ENABLE_ZMQ "Enable GNU Radio ZeroMQ Messaging, requires gr-zeromq" ON) | ||||||
|  |  | ||||||
| # Performance analysis tools | # Performance analysis tools | ||||||
| option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF) | option(ENABLE_GPERFTOOLS "Enable linking to Gperftools libraries (tcmalloc and profiler)" OFF) | ||||||
| @@ -70,8 +70,6 @@ option(ENABLE_CUDA "Enable building of processing blocks implemented with CUDA ( | |||||||
| option(ENABLE_FPGA "Enable building of processing blocks implementing FPGA offloading" OFF) | option(ENABLE_FPGA "Enable building of processing blocks implementing FPGA offloading" OFF) | ||||||
|  |  | ||||||
| # Building and packaging options | # Building and packaging options | ||||||
| option(ENABLE_GENERIC_ARCH "Builds a portable binary" OFF) |  | ||||||
|  |  | ||||||
| option(ENABLE_PACKAGING "Enable software packaging" OFF) | option(ENABLE_PACKAGING "Enable software packaging" OFF) | ||||||
|  |  | ||||||
| option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF) | option(ENABLE_OWN_GLOG "Download glog and link it to gflags" OFF) | ||||||
| @@ -87,7 +85,6 @@ option(ENABLE_STRIP "Create stripped binaries without debugging symbols (in Rele | |||||||
| option(Boost_USE_STATIC_LIBS "Use Boost static libs" OFF) | option(Boost_USE_STATIC_LIBS "Use Boost static libs" OFF) | ||||||
|  |  | ||||||
| if(ENABLE_PACKAGING) | if(ENABLE_PACKAGING) | ||||||
|     set(ENABLE_GENERIC_ARCH ON) |  | ||||||
|     set(ENABLE_ARMA_NO_DEBUG ON) |     set(ENABLE_ARMA_NO_DEBUG ON) | ||||||
|     set(CMAKE_VERBOSE_MAKEFILE ON) |     set(CMAKE_VERBOSE_MAKEFILE ON) | ||||||
|     set(ENABLE_STRIP OFF) |     set(ENABLE_STRIP OFF) | ||||||
| @@ -346,7 +343,7 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_ | |||||||
|   CMAKE_VERSION VERSION_LESS 3.5) |   CMAKE_VERSION VERSION_LESS 3.5) | ||||||
|     set(GNSSSDR_GTEST_LOCAL_VERSION "1.10.x") |     set(GNSSSDR_GTEST_LOCAL_VERSION "1.10.x") | ||||||
| else() | else() | ||||||
|     set(GNSSSDR_GTEST_LOCAL_VERSION "1.12.1") |     set(GNSSSDR_GTEST_LOCAL_VERSION "1.13.0") | ||||||
| endif() | endif() | ||||||
| set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") | ||||||
| if(CMAKE_VERSION VERSION_GREATER 3.17.0) | if(CMAKE_VERSION VERSION_GREATER 3.17.0) | ||||||
| @@ -444,7 +441,6 @@ endif() | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # Set minimal C and C++ standards | # Set minimal C and C++ standards | ||||||
| ################################################################################ | ################################################################################ | ||||||
| @@ -503,23 +499,19 @@ endif() | |||||||
| ################################################################################ | ################################################################################ | ||||||
| # Check if the compiler defines the architecture as ARM | # Check if the compiler defines the architecture as ARM | ||||||
| ################################################################################ | ################################################################################ | ||||||
|  | if(CMAKE_SYSTEM_PROCESSOR MATCHES "(^arm)|(^aarch64)") | ||||||
|  |     set(IS_ARM TRUE) | ||||||
|  | endif() | ||||||
| if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) | if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) | ||||||
|     if(CMAKE_CROSSCOMPILING) |     if(CMAKE_CROSSCOMPILING) | ||||||
|         set(IS_ARM TRUE) |  | ||||||
|         if(NOT CMAKE_NO_SYSTEM_FROM_IMPORTED) |         if(NOT CMAKE_NO_SYSTEM_FROM_IMPORTED) | ||||||
|             set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) |             set(CMAKE_NO_SYSTEM_FROM_IMPORTED TRUE) | ||||||
|         endif() |         endif() | ||||||
|     else() |  | ||||||
|         if(NOT IS_ARM) |  | ||||||
|             include(TestForARM) |  | ||||||
|         endif() |  | ||||||
|     endif() |  | ||||||
| else() |  | ||||||
|     if(CMAKE_SYSTEM_PROCESSOR MATCHES "(^aarch64)|(arm64)") |  | ||||||
|         set(IS_ARM TRUE) |  | ||||||
|     endif() |     endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # pkg-config - Helper tool used when compiling applications and libraries. | # pkg-config - Helper tool used when compiling applications and libraries. | ||||||
| ################################################################################ | ################################################################################ | ||||||
| @@ -528,6 +520,7 @@ set(FPHSA_NAME_MISMATCHED ON) | |||||||
| find_package(PkgConfig) | find_package(PkgConfig) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # Find the POSIX thread (pthread) libraries | # Find the POSIX thread (pthread) libraries | ||||||
| ################################################################################ | ################################################################################ | ||||||
| @@ -622,8 +615,17 @@ if(ENABLE_UHD) | |||||||
|     endif() |     endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | find_package(ZEROMQ) | ||||||
|  | set_package_properties(ZEROMQ PROPERTIES | ||||||
|  |     PURPOSE "Used by the ZMQ_Signal_Source." | ||||||
|  |     TYPE OPTIONAL | ||||||
|  | ) | ||||||
| if(ENABLE_ZMQ) | if(ENABLE_ZMQ) | ||||||
|  |     if(NOT ZEROMQ_FOUND) | ||||||
|  |         set(ENABLE_ZMQ OFF) | ||||||
|  |     else() | ||||||
|         list(APPEND GR_REQUIRED_COMPONENTS ZEROMQ) |         list(APPEND GR_REQUIRED_COMPONENTS ZEROMQ) | ||||||
|  |     endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| find_package(GNURADIO) | find_package(GNURADIO) | ||||||
| @@ -1195,7 +1197,7 @@ if(NOT VOLKGNSSSDR_FOUND) | |||||||
|     include(GNUInstallDirs) |     include(GNUInstallDirs) | ||||||
|     set(SUPPORTED_CPU_FEATURES_ARCH FALSE) |     set(SUPPORTED_CPU_FEATURES_ARCH FALSE) | ||||||
|     if(CMAKE_SYSTEM_PROCESSOR MATCHES |     if(CMAKE_SYSTEM_PROCESSOR MATCHES | ||||||
|         "(^mips)|(^arm)|(^aarch64)|(x86_64)|(AMD64|amd64)|(^i.86$)|(^powerpc)|(^ppc)|(^s390x)") |         "(^mips)|(^arm)|(^aarch64)|(x86_64)|(AMD64|amd64)|(^i.86$)|(^powerpc)|(^ppc)|(^s390x)|^riscv") | ||||||
|         set(SUPPORTED_CPU_FEATURES_ARCH TRUE) |         set(SUPPORTED_CPU_FEATURES_ARCH TRUE) | ||||||
|     endif() |     endif() | ||||||
|     if(${CMAKE_INSTALL_LIBDIR} MATCHES lib64) |     if(${CMAKE_INSTALL_LIBDIR} MATCHES lib64) | ||||||
| @@ -1234,11 +1236,14 @@ if(NOT VOLKGNSSSDR_FOUND) | |||||||
|                 set_package_properties(CPUFEATURES PROPERTIES |                 set_package_properties(CPUFEATURES PROPERTIES | ||||||
|                     DESCRIPTION "A cross platform C99 library to get CPU features at runtime (version: ${CPUFEATURES_VERSION})" |                     DESCRIPTION "A cross platform C99 library to get CPU features at runtime (version: ${CPUFEATURES_VERSION})" | ||||||
|                 ) |                 ) | ||||||
|  |                 if((CMAKE_SYSTEM_PROCESSOR MATCHES "(^s390x)|^riscv") AND (CPUFEATURES_VERSION VERSION_LESS "0.8.0")) # detect cpu_features without s390x / riscv support | ||||||
|  |                     set(ENABLE_CPUFEATURES OFF) | ||||||
|  |                 endif() | ||||||
|             else() |             else() | ||||||
|                 set_package_properties(CPUFEATURES PROPERTIES |                 set_package_properties(CPUFEATURES PROPERTIES | ||||||
|                     DESCRIPTION "A cross platform C99 library to get CPU features at runtime" |                     DESCRIPTION "A cross platform C99 library to get CPU features at runtime" | ||||||
|                 ) |                 ) | ||||||
|                 if(VOLK_VERSION AND VOLK_VERSION VERSION_GREATER "2.3" AND VOLK_VERSION VERSION_LESS "2.5.2") # detect "hidden" cpu_features 0.6.0 |                 if(DEFINED VOLK_VERSION AND VOLK_VERSION VERSION_GREATER "2.3") # avoid clash with volk's cpufeatures. | ||||||
|                     set(ENABLE_CPUFEATURES OFF) |                     set(ENABLE_CPUFEATURES OFF) | ||||||
|                 else() |                 else() | ||||||
|                     set_package_properties(CPUFEATURES PROPERTIES |                     set_package_properties(CPUFEATURES PROPERTIES | ||||||
| @@ -1807,6 +1812,9 @@ else() | |||||||
|     if(NOT BLA_VENDOR) |     if(NOT BLA_VENDOR) | ||||||
|         set(BLA_VENDOR "Generic") |         set(BLA_VENDOR "Generic") | ||||||
|     endif() |     endif() | ||||||
|  |     if(NOT CMAKE_CROSSCOMPILING AND NOT DEFINED BLA_PREFER_PKGCONFIG) | ||||||
|  |         set(BLA_PREFER_PKGCONFIG ON)  # Required by riscv64 arch | ||||||
|  |     endif() | ||||||
|     find_package(BLAS) |     find_package(BLAS) | ||||||
|     set_package_properties(BLAS PROPERTIES |     set_package_properties(BLAS PROPERTIES | ||||||
|         URL "https://www.netlib.org/blas/" |         URL "https://www.netlib.org/blas/" | ||||||
| @@ -2905,9 +2913,9 @@ if(ENABLE_OPENCL) | |||||||
|             message(STATUS " You can disable OpenCL use by doing 'cmake -DENABLE_OPENCL=OFF ..'") |             message(STATUS " You can disable OpenCL use by doing 'cmake -DENABLE_OPENCL=OFF ..'") | ||||||
|         endif() |         endif() | ||||||
|     endif() |     endif() | ||||||
|     if(ENABLE_GENERIC_ARCH) |     if(ENABLE_PACKAGING) | ||||||
|         set(ENABLE_OPENCL OFF) |         set(ENABLE_OPENCL OFF) | ||||||
|         message(STATUS "ENABLE_GENERIC_ARCH is set to ON so the use of OpenCL has been disabled.") |         message(STATUS "ENABLE_PACKAGING is set to ON so the use of OpenCL has been disabled.") | ||||||
|     endif() |     endif() | ||||||
|     if(NOT OPENCL_FOUND) |     if(NOT OPENCL_FOUND) | ||||||
|         message(STATUS "Processing blocks using OpenCL will not be built.") |         message(STATUS "Processing blocks using OpenCL will not be built.") | ||||||
| @@ -3286,36 +3294,6 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") | |||||||
|     endif() |     endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| # Processor-architecture related flags |  | ||||||
| # See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html |  | ||||||
| if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) |  | ||||||
|     if(NOT ENABLE_GENERIC_ARCH) |  | ||||||
|         if(IS_ARM) |  | ||||||
|             # ARM-specific options |  | ||||||
|             # See https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html |  | ||||||
|             if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_TOOLCHAIN_FILE) |  | ||||||
|                 add_compile_options(-mtune=native) |  | ||||||
|             endif() |  | ||||||
|         else() |  | ||||||
|             if(NOT ENABLE_CUDA) |  | ||||||
|                 add_compile_options(-march=native) |  | ||||||
|             endif() |  | ||||||
|         endif() |  | ||||||
|     endif() |  | ||||||
| endif() |  | ||||||
| if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") |  | ||||||
|     if(NOT ENABLE_GENERIC_ARCH) |  | ||||||
|         if(IS_ARM) |  | ||||||
|             # ARM-specific options |  | ||||||
|             if(NOT CMAKE_CROSSCOMPILING AND NOT CMAKE_TOOLCHAIN_FILE) |  | ||||||
|                 add_compile_options(-mcpu=native) |  | ||||||
|             endif() |  | ||||||
|         else() |  | ||||||
|             add_compile_options(-march=native) |  | ||||||
|         endif() |  | ||||||
|     endif() |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ################################################################################ | ################################################################################ | ||||||
| @@ -3389,7 +3367,6 @@ add_feature_info(ENABLE_OPENCL ENABLE_OPENCL "Enables GPS_L1_CA_PCPS_OpenCl_Acqu | |||||||
| add_feature_info(ENABLE_CUDA ENABLE_CUDA "Enables GPS_L1_CA_DLL_PLL_Tracking_GPU (experimental). Requires CUDA.") | add_feature_info(ENABLE_CUDA ENABLE_CUDA "Enables GPS_L1_CA_DLL_PLL_Tracking_GPU (experimental). Requires CUDA.") | ||||||
| add_feature_info(ENABLE_FPGA ENABLE_FPGA "Enables building of processing blocks for FPGA offloading.") | add_feature_info(ENABLE_FPGA ENABLE_FPGA "Enables building of processing blocks for FPGA offloading.") | ||||||
| add_feature_info(ENABLE_ARMA_NO_DEBUG ENABLE_ARMA_NO_DEBUG "Enables passing the ARMA_NO_DEBUG macro to Armadillo, hence disabling bound checking.") | add_feature_info(ENABLE_ARMA_NO_DEBUG ENABLE_ARMA_NO_DEBUG "Enables passing the ARMA_NO_DEBUG macro to Armadillo, hence disabling bound checking.") | ||||||
| add_feature_info(ENABLE_GENERIC_ARCH ENABLE_GENERIC_ARCH "When disabled, flags such as '-march=native' are passed to the compiler.") |  | ||||||
| add_feature_info(ENABLE_PACKAGING ENABLE_PACKAGING "Enables software packaging.") | add_feature_info(ENABLE_PACKAGING ENABLE_PACKAGING "Enables software packaging.") | ||||||
| add_feature_info(ENABLE_OWN_GLOG ENABLE_OWN_GLOG "Forces the downloading and building of Google glog.") | add_feature_info(ENABLE_OWN_GLOG ENABLE_OWN_GLOG "Forces the downloading and building of Google glog.") | ||||||
| add_feature_info(ENABLE_OWN_ARMADILLO ENABLE_OWN_ARMADILLO "Forces the downloading and building of Armadillo.") | add_feature_info(ENABLE_OWN_ARMADILLO ENABLE_OWN_ARMADILLO "Forces the downloading and building of Armadillo.") | ||||||
|   | |||||||
							
								
								
									
										61
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								README.md
									
									
									
									
									
								
							| @@ -64,11 +64,12 @@ information about this open-source, software-defined GNSS receiver. | |||||||
|    1. [GNU/Linux](#gnulinux) |    1. [GNU/Linux](#gnulinux) | ||||||
|       1. [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages) |       1. [Alternative 1: Install dependencies using software packages](#alternative-1-install-dependencies-using-software-packages) | ||||||
|          1. [Debian / Ubuntu](#debian--ubuntu) |          1. [Debian / Ubuntu](#debian--ubuntu) | ||||||
|          2. [Arch Linux](#arch-linux) |          2. [AlmaLinux](#almalinux) | ||||||
|          3. [CentOS](#centos) |          3. [Arch Linux](#arch-linux) | ||||||
|          4. [Fedora](#fedora) |          4. [CentOS](#centos) | ||||||
|          5. [openSUSE](#opensuse) |          5. [Fedora](#fedora) | ||||||
|          6. [Rocky Linux](#rocky-linux) |          6. [openSUSE](#opensuse) | ||||||
|  |          7. [Rocky Linux](#rocky-linux) | ||||||
|       2. [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs) |       2. [Alternative 2: Install dependencies using PyBOMBS](#alternative-2-install-dependencies-using-pybombs) | ||||||
|       3. [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies) |       3. [Manual installation of other required dependencies](#manual-installation-of-other-required-dependencies) | ||||||
|          1. [Install Armadillo, a C++ linear algebra library](#install-armadillo-a-c-linear-algebra-library) |          1. [Install Armadillo, a C++ linear algebra library](#install-armadillo-a-c-linear-algebra-library) | ||||||
| @@ -85,7 +86,6 @@ information about this open-source, software-defined GNSS receiver. | |||||||
|          2. [Build FMCOMMS2 based SDR Hardware support (OPTIONAL)](#build-fmcomms2-based-sdr-hardware-support-optional) |          2. [Build FMCOMMS2 based SDR Hardware support (OPTIONAL)](#build-fmcomms2-based-sdr-hardware-support-optional) | ||||||
|          3. [Build OpenCL support (OPTIONAL)](#build-opencl-support-optional) |          3. [Build OpenCL support (OPTIONAL)](#build-opencl-support-optional) | ||||||
|          4. [Build CUDA support (OPTIONAL)](#build-cuda-support-optional) |          4. [Build CUDA support (OPTIONAL)](#build-cuda-support-optional) | ||||||
|          5. [Build a portable binary](#build-a-portable-binary) |  | ||||||
|    2. [macOS](#macos) |    2. [macOS](#macos) | ||||||
|       1. [Macports](#macports) |       1. [Macports](#macports) | ||||||
|       2. [Homebrew](#homebrew) |       2. [Homebrew](#homebrew) | ||||||
| @@ -142,6 +142,7 @@ This section describes how to set up the compilation environment in GNU/Linux or | |||||||
|     Motorola (now Freescale), and Apple. |     Motorola (now Freescale), and Apple. | ||||||
|   - ppc64: 64-bit big-endian PowerPC architecture. |   - ppc64: 64-bit big-endian PowerPC architecture. | ||||||
|   - ppc64el: 64-bit little-endian PowerPC architecture. |   - ppc64el: 64-bit little-endian PowerPC architecture. | ||||||
|  |   - riscv64: 64-bit RISC-V open standard instruction set architecture. | ||||||
|   - s390x: IBM System z architecture for mainframe computers. |   - s390x: IBM System z architecture for mainframe computers. | ||||||
|  |  | ||||||
| Older distribution releases might work as well, but you will need GCC 4.7 or | Older distribution releases might work as well, but you will need GCC 4.7 or | ||||||
| @@ -201,6 +202,26 @@ need `python-six`. | |||||||
| Once you have installed these packages, you can jump directly to | Once you have installed these packages, you can jump directly to | ||||||
| [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). | [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). | ||||||
|  |  | ||||||
|  | #### AlmaLinux | ||||||
|  |  | ||||||
|  | If you are using AlmaLinux: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | # dnf update -y | ||||||
|  | # dnf install -y 'dnf-command(config-manager)' | ||||||
|  | # dnf config-manager --set-enabled powertools | ||||||
|  | # dnf install -y epel-release | ||||||
|  | # dnf install -y make gcc gcc-c++ kernel-devel cmake git boost-devel \ | ||||||
|  |       boost-date-time boost-system boost-thread boost-chrono \ | ||||||
|  |       boost-serialization log4cpp-devel gmp-devel uhd-devel gnuradio-devel \ | ||||||
|  |       pugixml-devel matio-devel protobuf-devel glog-devel libpcap-devel \ | ||||||
|  |       blas-devel lapack-devel armadillo-devel openssl-devel python3-mako \ | ||||||
|  |       libarchive | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Once you have installed these packages, you can jump directly to | ||||||
|  | [download the source code and build GNSS-SDR](#clone-gnss-sdrs-git-repository). | ||||||
|  |  | ||||||
| #### Arch Linux | #### Arch Linux | ||||||
|  |  | ||||||
| If you are using Arch Linux: | If you are using Arch Linux: | ||||||
| @@ -496,8 +517,8 @@ $ sudo ldconfig | |||||||
| #### Download [GoogleTest](https://github.com/google/googletest "Googletest Homepage") | #### Download [GoogleTest](https://github.com/google/googletest "Googletest Homepage") | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ wget https://github.com/google/googletest/archive/release-1.12.1.zip | $ wget https://github.com/google/googletest/archive/refs/tags/v1.13.0.zip | ||||||
| $ unzip release-1.12.1.zip | $ unzip v1.13.0.zip | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Please **DO NOT build or install** Google Test. Every user needs to compile | Please **DO NOT build or install** Google Test. Every user needs to compile | ||||||
| @@ -521,10 +542,10 @@ downloaded resides. Just type in your terminal (or add it to your | |||||||
| `$HOME/.bashrc` file for a permanent solution) the following line: | `$HOME/.bashrc` file for a permanent solution) the following line: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| export GTEST_DIR=/home/username/googletest-release-1.12.1 | export GTEST_DIR=/home/username/googletest-1.13.0 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| changing `/home/username/googletest-release-1.12.1` by the actual path where you | changing `/home/username/googletest-1.13.0` by the actual path where you | ||||||
| unpacked Google Test. If the CMake script does not find that folder, or the | unpacked Google Test. If the CMake script does not find that folder, or the | ||||||
| environment variable is not defined, or the source code is not installed by a | environment variable is not defined, or the source code is not installed by a | ||||||
| package, then it will download a fresh copy of the Google Test source code and | package, then it will download a fresh copy of the Google Test source code and | ||||||
| @@ -790,26 +811,6 @@ $ sudo make install | |||||||
| Of course, you will also need a GPU that | Of course, you will also need a GPU that | ||||||
| [supports CUDA](https://developer.nvidia.com/cuda-gpus "CUDA GPUs"). | [supports CUDA](https://developer.nvidia.com/cuda-gpus "CUDA GPUs"). | ||||||
|  |  | ||||||
| #### Build a portable binary |  | ||||||
|  |  | ||||||
| In order to build an executable that not depends on the specific SIMD |  | ||||||
| instruction set that is present in the processor of the compiling machine, so |  | ||||||
| other users can execute it in other machines without those particular sets, use: |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| $ cmake -DENABLE_GENERIC_ARCH=ON .. |  | ||||||
| $ make |  | ||||||
| $ sudo make install |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Using this option, all SIMD instructions are exclusively accessed via VOLK, |  | ||||||
| which automatically includes versions of each function for different SIMD |  | ||||||
| instruction sets, then detects at runtime which to use, or if there are none, |  | ||||||
| substitutes a generic, non-SIMD implementation. |  | ||||||
|  |  | ||||||
| More details can be found in our tutorial about |  | ||||||
| [GNSS-SDR configuration options at building time](https://gnss-sdr.org/docs/tutorials/using-git/ "Configuration options at building time"). |  | ||||||
|  |  | ||||||
| ## macOS | ## macOS | ||||||
|  |  | ||||||
| GNSS-SDR can be built on macOS (or the former Mac OS X), starting from 10.9 | GNSS-SDR can be built on macOS (or the former Mac OS X), starting from 10.9 | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ if(DEFINED ENV{GFORTRAN_ROOT}) | |||||||
|     ) |     ) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| set(GCC_MAJOR_SERIES 12 11 10 9 8 7 6 5) | set(GCC_MAJOR_SERIES 13 12 11 10 9 8 7 6 5) | ||||||
| set(GCC4_SERIES 4.9.1 4.9 4.8.3 4.8.1 4.7.2 4.7 4.8.2 4.8 4.7 4.6 4.5 4.4.4 4.4) | set(GCC4_SERIES 4.9.1 4.9 4.8.3 4.8.1 4.7.2 4.7 4.8.2 4.8 4.7 4.6 4.5 4.4.4 4.4) | ||||||
| set(GCC_SERIES ${GCC_MAJOR_SERIES} ${GCC4_SERIES}) | set(GCC_SERIES ${GCC_MAJOR_SERIES} ${GCC4_SERIES}) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								cmake/Modules/FindZEROMQ.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								cmake/Modules/FindZEROMQ.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | # GNSS-SDR is a Global Navigation Satellite System software-defined receiver. | ||||||
|  | # This file is part of GNSS-SDR. | ||||||
|  | # | ||||||
|  | # SPDX-FileCopyrightText: 2023 C. Fernandez-Prades cfernandez(at)cttc.es | ||||||
|  | # SPDX-License-Identifier: BSD-3-Clause | ||||||
|  |  | ||||||
|  | # | ||||||
|  | # Provides the following imported target: | ||||||
|  | # ZeroMQ::ZeroMQ | ||||||
|  | # | ||||||
|  |  | ||||||
|  | if(NOT COMMAND feature_summary) | ||||||
|  |     include(FeatureSummary) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(NOT PKG_CONFIG_FOUND) | ||||||
|  |     include(FindPkgConfig) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | find_package(PkgConfig) | ||||||
|  | pkg_check_modules(PC_ZEROMQ "libzmq") | ||||||
|  |  | ||||||
|  | find_path(ZEROMQ_INCLUDE_DIRS | ||||||
|  |     NAMES zmq.hpp | ||||||
|  |     HINTS ${PC_ZEROMQ_INCLUDE_DIR} ${CMAKE_INSTALL_PREFIX}/include | ||||||
|  |     PATHS /usr/local/include /usr/include /opt/local/include | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | find_library(ZEROMQ_LIBRARIES | ||||||
|  |     NAMES zmq libzmq.so.5 ${ZEROMQ_LIBRARY_NAME} | ||||||
|  |     HINTS ${PC_ZEROMQ_LIBDIR} ${CMAKE_INSTALL_PREFIX}/lib ${CMAKE_INSTALL_PREFIX}/lib64 | ||||||
|  |     PATHS /usr/lib | ||||||
|  |         /usr/lib64 | ||||||
|  |         /usr/lib/alpha-linux-gnu | ||||||
|  |         /usr/lib/x86_64-linux-gnu | ||||||
|  |         /usr/lib/aarch64-linux-gnu | ||||||
|  |         /usr/lib/arm-linux-gnueabi | ||||||
|  |         /usr/lib/arm-linux-gnueabihf | ||||||
|  |         /usr/lib/hppa-linux-gnu | ||||||
|  |         /usr/lib/i386-linux-gnu | ||||||
|  |         /usr/lib/m68k-linux-gnu | ||||||
|  |         /usr/lib/mips-linux-gnu | ||||||
|  |         /usr/lib/mips64el-linux-gnuabi64 | ||||||
|  |         /usr/lib/mipsel-linux-gnu | ||||||
|  |         /usr/lib/powerpc-linux-gnuspe | ||||||
|  |         /usr/lib/powerpc64-linux-gnu | ||||||
|  |         /usr/lib/powerpc64le-linux-gnu | ||||||
|  |         /usr/lib/riscv64-linux-gnu | ||||||
|  |         /usr/lib/s390x-linux-gnu | ||||||
|  |         /usr/lib/sh4-linux-gnu | ||||||
|  |         /usr/lib/sparc64-linux-gnu | ||||||
|  |         /usr/lib/x86_64-linux-gnux32 | ||||||
|  |         /usr/lib/x86_64-kfreebsd-gnu | ||||||
|  |         /usr/lib/i386-kfreebsd-gnu | ||||||
|  |         /usr/local/lib | ||||||
|  |         /usr/local/lib64 | ||||||
|  |         /opt/local/lib | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | include(FindPackageHandleStandardArgs) | ||||||
|  | # This is just to detect presence, include files not required | ||||||
|  | find_package_handle_standard_args(ZEROMQ DEFAULT_MSG ZEROMQ_LIBRARIES) | ||||||
|  | mark_as_advanced(ZEROMQ_LIBRARIES ZEROMQ_INCLUDE_DIRS) | ||||||
|  |  | ||||||
|  | set_package_properties(ZEROMQ PROPERTIES URL "https://zeromq.org/") | ||||||
|  | if(PC_ZEROMQ_VERSION) | ||||||
|  |     set_package_properties(ZEROMQ PROPERTIES | ||||||
|  |         DESCRIPTION "An open-source universal messaging library (found: v${PC_ZEROMQ_VERSION})" | ||||||
|  |     ) | ||||||
|  | else() | ||||||
|  |     set_package_properties(ZEROMQ PROPERTIES | ||||||
|  |         DESCRIPTION "An open-source universal messaging library" | ||||||
|  |     ) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(ZEROMQ_FOUND AND ZEROMQ_INCLUDE_DIRS AND NOT TARGET ZeroMQ::ZeroMQ) | ||||||
|  |     add_library(ZeroMQ::ZeroMQ INTERFACE IMPORTED) | ||||||
|  |     set_target_properties(ZeroMQ::ZeroMQ PROPERTIES | ||||||
|  |         INTERFACE_INCLUDE_DIRECTORIES "${ZEROMQ_INCLUDE_DIRS}" | ||||||
|  |         INTERFACE_LINK_LIBRARIES "${ZEROMQ_LIBRARIES}" | ||||||
|  |     ) | ||||||
|  | endif() | ||||||
| @@ -12,13 +12,22 @@ | |||||||
| # - cmd an additional command to run | # - cmd an additional command to run | ||||||
| # - have the result variable to set | # - have the result variable to set | ||||||
| ######################################################################## | ######################################################################## | ||||||
| macro(GNSSSDR_PYTHON_CHECK_MODULE_RAW desc python_code have) | macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have) | ||||||
|  |     message(STATUS "Python checking for ${desc}") | ||||||
|     execute_process( |     execute_process( | ||||||
|         COMMAND ${PYTHON_EXECUTABLE} -c "${python_code}" |         COMMAND ${PYTHON_EXECUTABLE} -c " | ||||||
|  | ######################################### | ||||||
|  | try: import ${mod} | ||||||
|  | except: | ||||||
|  |     try: ${mod} | ||||||
|  |     except: exit(-1) | ||||||
|  | try: assert ${cmd} | ||||||
|  | except: exit(-1) | ||||||
|  | #########################################" | ||||||
|         OUTPUT_QUIET ERROR_QUIET |         OUTPUT_QUIET ERROR_QUIET | ||||||
|         RESULT_VARIABLE return_code |         RESULT_VARIABLE ${have} | ||||||
|     ) |     ) | ||||||
|     if(return_code EQUAL 0) |     if(${have} EQUAL 0) | ||||||
|         message(STATUS "Python checking for ${desc} - found") |         message(STATUS "Python checking for ${desc} - found") | ||||||
|         set(${have} TRUE) |         set(${have} TRUE) | ||||||
|     else() |     else() | ||||||
| @@ -27,19 +36,6 @@ macro(GNSSSDR_PYTHON_CHECK_MODULE_RAW desc python_code have) | |||||||
|     endif() |     endif() | ||||||
| endmacro() | endmacro() | ||||||
|  |  | ||||||
| macro(GNSSSDR_PYTHON_CHECK_MODULE desc mod cmd have) |  | ||||||
|     gnsssdr_python_check_module_raw( |  | ||||||
|         "${desc}" " |  | ||||||
| ######################################### |  | ||||||
| try: |  | ||||||
|     import ${mod} |  | ||||||
|     assert ${cmd} |  | ||||||
| except (ImportError, AssertionError): exit(-1) |  | ||||||
| except: pass |  | ||||||
| #########################################" |  | ||||||
|     "${have}") |  | ||||||
| endmacro() |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ######################################################################## | ######################################################################## | ||||||
| # Setup the python interpreter: | # Setup the python interpreter: | ||||||
|   | |||||||
| @@ -1,115 +0,0 @@ | |||||||
| # GNSS-SDR is a Global Navigation Satellite System software-defined receiver. |  | ||||||
| # This file is part of GNSS-SDR. |  | ||||||
| # |  | ||||||
| # SPDX-FileCopyrightText: 2011-2020 C. Fernandez-Prades cfernandez(at)cttc.es |  | ||||||
| # SPDX-License-Identifier: BSD-3-Clause |  | ||||||
|  |  | ||||||
| ############################################################################## |  | ||||||
| # check if the compiler defines the architecture as ARM  and set the |  | ||||||
| # version, if found. |  | ||||||
| # |  | ||||||
| # - Anthony Arnold |  | ||||||
| ############################################################################## |  | ||||||
|  |  | ||||||
| if(__TEST_FOR_ARM_INCLUDED) |  | ||||||
|     return() |  | ||||||
| endif() |  | ||||||
| set(__TEST_FOR_ARM_INCLUDED TRUE) |  | ||||||
|  |  | ||||||
| # Function checks if the input string defines ARM version and sets the |  | ||||||
| # output variable if found. |  | ||||||
| function(check_arm_version ppdef input_string version output_var) |  | ||||||
|     string(REGEX MATCH "${ppdef}"  _VERSION_MATCH "${input_string}") |  | ||||||
|     if(NOT _VERSION_MATCH STREQUAL "") |  | ||||||
|         set(${output_var} "${version}" PARENT_SCOPE) |  | ||||||
|     endif() |  | ||||||
| endfunction() |  | ||||||
|  |  | ||||||
| message(STATUS "Checking for ARM") |  | ||||||
|  |  | ||||||
| set(IS_ARM FALSE) |  | ||||||
| set(ARM_VERSION "") |  | ||||||
|  |  | ||||||
| if(ENABLE_PACKAGING) |  | ||||||
|     set(VERBOSE_BUILDING "-v") |  | ||||||
| else() |  | ||||||
|     set(VERBOSE_BUILDING "") |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |  | ||||||
|     execute_process(COMMAND echo "int main(){}" |  | ||||||
|         COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dM ${VERBOSE_BUILDING} -E - |  | ||||||
|         OUTPUT_VARIABLE TEST_FOR_ARM_RESULTS |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|     string(REGEX MATCH "__arm" ARM_FOUND "${TEST_FOR_ARM_RESULTS}") |  | ||||||
|     if(ARM_FOUND STREQUAL "") |  | ||||||
|         string(REGEX MATCH "__aarch64" ARM_FOUND "${TEST_FOR_ARM_RESULTS}") |  | ||||||
|     endif() |  | ||||||
|     if(ARM_FOUND STREQUAL "") |  | ||||||
|         if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm") |  | ||||||
|             set(ARM_FOUND ${CMAKE_HOST_SYSTEM_PROCESSOR}) |  | ||||||
|         endif() |  | ||||||
|     endif() |  | ||||||
|  |  | ||||||
|     if(NOT ARM_FOUND STREQUAL "") |  | ||||||
|         set(IS_ARM TRUE) |  | ||||||
|         message(STATUS "ARM system detected.") |  | ||||||
|  |  | ||||||
|         # detect the version |  | ||||||
|         check_arm_version("__ARM_ARCH_2__" ${TEST_FOR_ARM_RESULTS} "armv2" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_2A__" ${TEST_FOR_ARM_RESULTS} "armv2a" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_3__" ${TEST_FOR_ARM_RESULTS} "armv3" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_3M__" ${TEST_FOR_ARM_RESULTS} "armv3m" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_4__" ${TEST_FOR_ARM_RESULTS} "armv4" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_4T__" ${TEST_FOR_ARM_RESULTS} "armv4t" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_5__" ${TEST_FOR_ARM_RESULTS} "armv5" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_5T__" ${TEST_FOR_ARM_RESULTS} "armv5t" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_5E__" ${TEST_FOR_ARM_RESULTS} "armv5e" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_5TE__" ${TEST_FOR_ARM_RESULTS} "armv5te" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6__" ${TEST_FOR_ARM_RESULTS} "armv6" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6J__" ${TEST_FOR_ARM_RESULTS} "armv6j" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6K__" ${TEST_FOR_ARM_RESULTS} "armv6k" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6T2__" ${TEST_FOR_ARM_RESULTS} "armv6t2" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6Z__" ${TEST_FOR_ARM_RESULTS} "armv6z" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6ZK__" ${TEST_FOR_ARM_RESULTS} "armv6zk" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_6M__" ${TEST_FOR_ARM_RESULTS} "armv6-m" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7__" ${TEST_FOR_ARM_RESULTS} "armv7" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7A__" ${TEST_FOR_ARM_RESULTS} "armv7-a" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7M__" ${TEST_FOR_ARM_RESULTS} "armv7-m" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7R__" ${TEST_FOR_ARM_RESULTS} "armv7-r" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7EM_" ${TEST_FOR_ARM_RESULTS} "armv7e-m" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_7VE__" ${TEST_FOR_ARM_RESULTS} "armv7ve" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_8A__" ${TEST_FOR_ARM_RESULTS} "armv8-a" ARM_VERSION) |  | ||||||
|         check_arm_version("__ARM_ARCH_8A" ${TEST_FOR_ARM_RESULTS} "armv8-a" ARM_VERSION) |  | ||||||
|  |  | ||||||
|         # anything else just define as unknown |  | ||||||
|         if(ARM_VERSION STREQUAL "") |  | ||||||
|             message(STATUS "Couldn't detect ARM version.") |  | ||||||
|             set(ARM_VERSION "unknown") |  | ||||||
|         else() |  | ||||||
|             message(STATUS "ARM version ${ARM_VERSION} detected.") |  | ||||||
|         endif() |  | ||||||
|     else() |  | ||||||
|         message(STATUS "System is not ARM.") |  | ||||||
|     endif() |  | ||||||
| elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |  | ||||||
|     if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm") |  | ||||||
|         set(IS_ARM TRUE) |  | ||||||
|         set(ARM_VERSION ${CMAKE_HOST_SYSTEM_PROCESSOR}) |  | ||||||
|         message(STATUS "ARM version ${ARM_VERSION} detected.") |  | ||||||
|     endif() |  | ||||||
| elseif(CMAKE_CXX_COMPILER_ID STREQUAL "ARMClang") |  | ||||||
|     set(IS_ARM TRUE) |  | ||||||
|     set(ARM_VERSION "arm") |  | ||||||
|     if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm") |  | ||||||
|         set(ARM_VERSION ${CMAKE_HOST_SYSTEM_PROCESSOR}) |  | ||||||
|         message(STATUS "ARM version ${ARM_VERSION} detected.") |  | ||||||
|     endif() |  | ||||||
| else() |  | ||||||
|     message(STATUS "Not detecting ARM on non-GNUCXX or non-Clang compiler. Defaulting to false.") |  | ||||||
|     message(STATUS "If you are compiling for ARM, set -DIS_ARM=ON manually.") |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| set(IS_ARM ${IS_ARM} CACHE BOOL "Compiling for ARM") |  | ||||||
| set(ARM_VERSION ${ARM_VERSION} CACHE STRING "ARM version") |  | ||||||
| @@ -70,11 +70,14 @@ All notable changes to GNSS-SDR will be documented in this file. | |||||||
| - Improved passing of compiler flags to `volk_gnsssdr` if the corresponding | - Improved passing of compiler flags to `volk_gnsssdr` if the corresponding | ||||||
|   environment variables are defined. This fixes warnings in some packaging |   environment variables are defined. This fixes warnings in some packaging | ||||||
|   systems. |   systems. | ||||||
|  | - Improved support for the RISC-V architecture. | ||||||
| - Test files are now donwloaded at configuration time instead of being included | - Test files are now donwloaded at configuration time instead of being included | ||||||
|   in the source tree. This allows for a smaller package and fixes Lintian |   in the source tree. This allows for a smaller package and fixes Lintian | ||||||
|   `very-long-line-length-in-source-file` warnings since those files were not |   `very-long-line-length-in-source-file` warnings since those files were not | ||||||
|   recognized as binaries. The configuration flag `-DENABLE_PACKAGING=ON` passed |   recognized as binaries. The configuration flag `-DENABLE_PACKAGING=ON` passed | ||||||
|   to CMake deactivates file downloading. |   to CMake deactivates file downloading. | ||||||
|  | - The `ENABLE_GENERIC_ARCH` building option was removed, simplifying the process | ||||||
|  |   of buiding the software in non-x86 processor architectures. | ||||||
|  |  | ||||||
| ### Improvements in Usability: | ### Improvements in Usability: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -258,7 +258,7 @@ endif() | |||||||
|  |  | ||||||
| # cpu_features - sensible defaults, user settable option | # cpu_features - sensible defaults, user settable option | ||||||
| if(CMAKE_SYSTEM_PROCESSOR MATCHES | if(CMAKE_SYSTEM_PROCESSOR MATCHES | ||||||
|     "(^mips)|(^arm)|(^aarch64)|(x86_64)|(AMD64|amd64)|(^i.86$)|(^powerpc)|(^ppc)|(^s390x)") |     "(^mips)|(^arm)|(^aarch64)|(x86_64)|(AMD64|amd64)|(^i.86$)|(^powerpc)|(^ppc)|(^s390x)|^riscv") | ||||||
|     option(VOLK_CPU_FEATURES "volk-gnsssdr uses cpu_features" ON) |     option(VOLK_CPU_FEATURES "volk-gnsssdr uses cpu_features" ON) | ||||||
| else() | else() | ||||||
|     option(VOLK_CPU_FEATURES "volk-gnsssdr uses cpu_features" OFF) |     option(VOLK_CPU_FEATURES "volk-gnsssdr uses cpu_features" OFF) | ||||||
| @@ -266,7 +266,13 @@ endif() | |||||||
|  |  | ||||||
| if(CMAKE_VERSION VERSION_GREATER 3.0 AND VOLK_CPU_FEATURES) | if(CMAKE_VERSION VERSION_GREATER 3.0 AND VOLK_CPU_FEATURES) | ||||||
|     find_package(CPUFEATURES) |     find_package(CPUFEATURES) | ||||||
|  |     if(CPUFEATURES_FOUND AND (CMAKE_SYSTEM_PROCESSOR MATCHES "(^s390x)|^riscv") AND (CPUFEATURES_VERSION VERSION_LESS "0.8.0")) | ||||||
|  |         set(USE_CPU_FEATURES OFF) | ||||||
|  |         unset(CPUFEATURES_FOUND CACHE) | ||||||
|  |         message(STATUS "Building volk-gnsssdr without cpu_features, installed version v${CPUFEATURES_VERSION} does not support the ${CMAKE_SYSTEM_PROCESSOR} architecture") | ||||||
|  |     else() | ||||||
|         set(USE_CPU_FEATURES ON) |         set(USE_CPU_FEATURES ON) | ||||||
|  |     endif() | ||||||
|     if(NOT CPUFEATURES_FOUND) |     if(NOT CPUFEATURES_FOUND) | ||||||
|         message(STATUS "Building volk-gnsssdr with cpu_features") |         message(STATUS "Building volk-gnsssdr with cpu_features") | ||||||
|         set(BUILD_TESTING OFF CACHE BOOL "Build cpu_features without tests." FORCE) |         set(BUILD_TESTING OFF CACHE BOOL "Build cpu_features without tests." FORCE) | ||||||
| @@ -290,13 +296,8 @@ endif() | |||||||
|  |  | ||||||
| # Python | # Python | ||||||
| include(VolkPython) # sets PYTHON_EXECUTABLE | include(VolkPython) # sets PYTHON_EXECUTABLE | ||||||
| volk_python_check_module("python >= 2.7" sys "sys.version.split()[0] >= '2.7'" PYTHON_MIN_VER_FOUND) |  | ||||||
| volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND) |  | ||||||
| if(Python2_VERSION OR (PYTHON_VERSION_STRING VERSION_LESS "3.0")) |  | ||||||
|     volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| if(NOT PYTHON_MIN_VER_FOUND) | if(NOT PYTHON_EXECUTABLE) | ||||||
|     message(FATAL_ERROR "Python 2.7 or greater required to build VOLK_GNSSSDR") |     message(FATAL_ERROR "Python 2.7 or greater required to build VOLK_GNSSSDR") | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,13 +16,22 @@ set(__INCLUDED_VOLK_PYTHON_CMAKE TRUE) | |||||||
| # - cmd an additional command to run | # - cmd an additional command to run | ||||||
| # - have the result variable to set | # - have the result variable to set | ||||||
| ######################################################################## | ######################################################################## | ||||||
| macro(VOLK_PYTHON_CHECK_MODULE_RAW desc python_code have) | macro(VOLK_PYTHON_CHECK_MODULE desc mod cmd have) | ||||||
|  |     message(STATUS "Python checking for ${desc}") | ||||||
|     execute_process( |     execute_process( | ||||||
|         COMMAND ${PYTHON_EXECUTABLE} -c "${python_code}" |         COMMAND ${PYTHON_EXECUTABLE} -c " | ||||||
|  | ######################################### | ||||||
|  | try: import ${mod} | ||||||
|  | except: | ||||||
|  |     try: ${mod} | ||||||
|  |     except: exit(-1) | ||||||
|  | try: assert ${cmd} | ||||||
|  | except: exit(-1) | ||||||
|  | #########################################" | ||||||
|         OUTPUT_QUIET ERROR_QUIET |         OUTPUT_QUIET ERROR_QUIET | ||||||
|         RESULT_VARIABLE return_code |         RESULT_VARIABLE ${have} | ||||||
|     ) |     ) | ||||||
|     if(return_code EQUAL 0) |     if(${have} EQUAL 0) | ||||||
|         message(STATUS "Python checking for ${desc} - found") |         message(STATUS "Python checking for ${desc} - found") | ||||||
|         set(${have} TRUE) |         set(${have} TRUE) | ||||||
|     else() |     else() | ||||||
| @@ -31,19 +40,6 @@ macro(VOLK_PYTHON_CHECK_MODULE_RAW desc python_code have) | |||||||
|     endif() |     endif() | ||||||
| endmacro() | endmacro() | ||||||
|  |  | ||||||
| macro(VOLK_PYTHON_CHECK_MODULE desc mod cmd have) |  | ||||||
|     volk_python_check_module_raw( |  | ||||||
|         "${desc}" " |  | ||||||
| ######################################### |  | ||||||
| try: |  | ||||||
|     import ${mod} |  | ||||||
|     assert ${cmd} |  | ||||||
| except (ImportError, AssertionError): exit(-1) |  | ||||||
| except: pass |  | ||||||
| #########################################" |  | ||||||
|     "${have}") |  | ||||||
| endmacro() |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ######################################################################## | ######################################################################## | ||||||
| # Setup the python interpreter: | # Setup the python interpreter: | ||||||
| @@ -57,6 +53,9 @@ if(CMAKE_VERSION VERSION_LESS 3.12 OR CMAKE_CROSSCOMPILING) | |||||||
|     if(PYTHON_EXECUTABLE) |     if(PYTHON_EXECUTABLE) | ||||||
|         message(STATUS "User set python executable ${PYTHON_EXECUTABLE}") |         message(STATUS "User set python executable ${PYTHON_EXECUTABLE}") | ||||||
|         find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) |         find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) | ||||||
|  |         if(PYTHON_VERSION_STRING VERSION_LESS "3.0") | ||||||
|  |             volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) | ||||||
|  |         endif() | ||||||
|     else() |     else() | ||||||
|         message(STATUS "PYTHON_EXECUTABLE not set - trying by default python3") |         message(STATUS "PYTHON_EXECUTABLE not set - trying by default python3") | ||||||
|         message(STATUS "Use -DPYTHON_EXECUTABLE=/path/to/python to build for python 2.7") |         message(STATUS "Use -DPYTHON_EXECUTABLE=/path/to/python to build for python 2.7") | ||||||
| @@ -65,12 +64,18 @@ if(CMAKE_VERSION VERSION_LESS 3.12 OR CMAKE_CROSSCOMPILING) | |||||||
|         if(NOT PYTHONINTERP_FOUND) |         if(NOT PYTHONINTERP_FOUND) | ||||||
|             message(STATUS "python3 not found - trying with python2.7") |             message(STATUS "python3 not found - trying with python2.7") | ||||||
|             find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) |             find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) | ||||||
|  |             volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) | ||||||
|         endif() |         endif() | ||||||
|     endif() |     endif() | ||||||
|  |     volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND) | ||||||
| else() | else() | ||||||
|     if(PYTHON_EXECUTABLE) |     if(PYTHON_EXECUTABLE) | ||||||
|         message(STATUS "User set python executable ${PYTHON_EXECUTABLE}") |         message(STATUS "User set python executable ${PYTHON_EXECUTABLE}") | ||||||
|         find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) |         find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION} REQUIRED) | ||||||
|  |         volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND) | ||||||
|  |         if(PYTHON_VERSION_STRING VERSION_LESS "3.0") | ||||||
|  |             volk_python_check_module("six - python 2 and 3 compatibility library" six "True" SIX_FOUND) | ||||||
|  |         endif() | ||||||
|     else() |     else() | ||||||
|         if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |         if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") | ||||||
|             set(_previous ${CMAKE_FIND_FRAMEWORK}) |             set(_previous ${CMAKE_FIND_FRAMEWORK}) | ||||||
| @@ -98,6 +103,7 @@ else() | |||||||
|             if(NOT MAKO_FOUND OR NOT SIX_FOUND) |             if(NOT MAKO_FOUND OR NOT SIX_FOUND) | ||||||
|                 unset(PYTHON_EXECUTABLE) |                 unset(PYTHON_EXECUTABLE) | ||||||
|                 find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION}) |                 find_package(PythonInterp ${VOLK_PYTHON_MIN_VERSION}) | ||||||
|  |                 volk_python_check_module("mako >= 0.4.2" mako "mako.__version__ >= '0.4.2'" MAKO_FOUND) | ||||||
|             endif() |             endif() | ||||||
|         endif() |         endif() | ||||||
|     endif() |     endif() | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ set(PROCESSOR_IS_AARCH64 FALSE) | |||||||
| set(PROCESSOR_IS_X86 FALSE) | set(PROCESSOR_IS_X86 FALSE) | ||||||
| set(PROCESSOR_IS_POWER FALSE) | set(PROCESSOR_IS_POWER FALSE) | ||||||
| set(PROCESSOR_IS_S390X FALSE) | set(PROCESSOR_IS_S390X FALSE) | ||||||
|  | set(PROCESSOR_IS_RISCV FALSE) | ||||||
|  |  | ||||||
| if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") | if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") | ||||||
|   set(PROCESSOR_IS_MIPS TRUE) |   set(PROCESSOR_IS_MIPS TRUE) | ||||||
| @@ -69,6 +70,8 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)") | |||||||
|   set(PROCESSOR_IS_POWER TRUE) |   set(PROCESSOR_IS_POWER TRUE) | ||||||
| elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x)") | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x)") | ||||||
|   set(PROCESSOR_IS_S390X TRUE) |   set(PROCESSOR_IS_S390X TRUE) | ||||||
|  | elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^riscv") | ||||||
|  |   set(PROCESSOR_IS_RISCV TRUE) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| macro(add_cpu_features_headers_and_sources HDRS_LIST_NAME SRCS_LIST_NAME) | macro(add_cpu_features_headers_and_sources HDRS_LIST_NAME SRCS_LIST_NAME) | ||||||
| @@ -90,6 +93,8 @@ macro(add_cpu_features_headers_and_sources HDRS_LIST_NAME SRCS_LIST_NAME) | |||||||
|       list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/include/cpuinfo_ppc.h) |       list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/include/cpuinfo_ppc.h) | ||||||
|   elseif(PROCESSOR_IS_S390X) |   elseif(PROCESSOR_IS_S390X) | ||||||
|       list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/include/cpuinfo_s390x.h) |       list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/include/cpuinfo_s390x.h) | ||||||
|  |   elseif(PROCESSOR_IS_RISCV) | ||||||
|  |       list(APPEND ${HDRS_LIST_NAME} ${PROJECT_SOURCE_DIR}/include/cpuinfo_riscv.h) | ||||||
|   else() |   else() | ||||||
|     message(FATAL_ERROR "Unsupported architectures ${CMAKE_SYSTEM_PROCESSOR}") |     message(FATAL_ERROR "Unsupported architectures ${CMAKE_SYSTEM_PROCESSOR}") | ||||||
|   endif() |   endif() | ||||||
|   | |||||||
| @@ -158,14 +158,14 @@ flags           : aes,avx,cx16,smx,sse4_1,sse4_2,ssse3 | |||||||
|  |  | ||||||
| ## What's supported | ## What's supported | ||||||
|  |  | ||||||
| |         | x86³ | AArch64 |   ARM   |  MIPS⁴  |  s390x  |  POWER  | | |         | x86³ | AArch64 |   ARM   |  MIPS⁴  |  POWER  | RISCV |  s390x  | | ||||||
| | ------- | :--: | :-----: | :-----: | :-----: | :-----: | :-----: | | | ------- | :--: | :-----: | :-----: | :-----: | :-----: | :---: | :-----: | | ||||||
| | Linux   | yes² |  yes¹   |  yes¹   |  yes¹   |  yes¹   |  yes¹   | | | Linux   | yes² |  yes¹   |  yes¹   |  yes¹   |  yes¹   | yes¹  |  yes¹   | | ||||||
| | FreeBSD | yes² | not yet | not yet | not yet | not yet | not yet | | | FreeBSD | yes² | not yet | not yet | not yet | not yet |  N/A  | not yet | | ||||||
| | MacOs   | yes² | not yet |   N/A   |   N/A   |   no    |   no    | | | MacOs   | yes² | not yet |   N/A   |   N/A   |   no    |  N/A  |   no    | | ||||||
| | Windows | yes² | not yet | not yet |   N/A   |   N/A   |   N/A   | | | Windows | yes² | not yet | not yet |   N/A   |   N/A   |  N/A  |   N/A   | | ||||||
| | Android | yes² |  yes¹   |  yes¹   |  yes¹   |   N/A   |   N/A   | | | Android | yes² |  yes¹   |  yes¹   |  yes¹   |   N/A   |  N/A  |   N/A   | | ||||||
| | iOS     | N/A  | not yet | not yet |   N/A   |   N/A   |   N/A   | | | iOS     | N/A  | not yet | not yet |   N/A   |   N/A   |  N/A  |   N/A   | | ||||||
|  |  | ||||||
| 1.  **Features revealed from Linux.** We gather data from several sources | 1.  **Features revealed from Linux.** We gather data from several sources | ||||||
|     depending on availability: |     depending on availability: | ||||||
|   | |||||||
| @@ -0,0 +1,62 @@ | |||||||
|  | // SPDX-FileCopyrightText: 2022 Google LLC | ||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
|  |  | ||||||
|  | #ifndef CPU_FEATURES_INCLUDE_CPUINFO_RISCV_H_ | ||||||
|  | #define CPU_FEATURES_INCLUDE_CPUINFO_RISCV_H_ | ||||||
|  |  | ||||||
|  | #include "cpu_features_cache_info.h" | ||||||
|  | #include "cpu_features_macros.h" | ||||||
|  |  | ||||||
|  | #if !defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  | #error "Including cpuinfo_riscv.h from a non-riscv target." | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | CPU_FEATURES_START_CPP_NAMESPACE | ||||||
|  |  | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |     // Base | ||||||
|  |     int RV32I : 1;  // Base Integer Instruction Set, 32-bit | ||||||
|  |     int RV64I : 1;  // Base Integer Instruction Set, 64-bit | ||||||
|  |  | ||||||
|  |     // Extension | ||||||
|  |     int M : 1;         // Standard Extension for Integer Multiplication/Division | ||||||
|  |     int A : 1;         // Standard Extension for Atomic Instructions | ||||||
|  |     int F : 1;         // Standard Extension for Single-Precision Floating-Point | ||||||
|  |     int D : 1;         // Standard Extension for Double-Precision Floating-Point | ||||||
|  |     int Q : 1;         // Standard Extension for Quad-Precision Floating-Point | ||||||
|  |     int C : 1;         // Standard Extension for Compressed Instructions | ||||||
|  |     int Zicsr : 1;     // Control and Status Register (CSR) | ||||||
|  |     int Zifencei : 1;  // Instruction-Fetch Fence | ||||||
|  | } RiscvFeatures; | ||||||
|  |  | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |     RiscvFeatures features; | ||||||
|  |     char uarch[64];   // 0 terminated string | ||||||
|  |     char vendor[64];  // 0 terminated string | ||||||
|  | } RiscvInfo; | ||||||
|  |  | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |     RISCV_RV32I, | ||||||
|  |     RISCV_RV64I, | ||||||
|  |     RISCV_M, | ||||||
|  |     RISCV_A, | ||||||
|  |     RISCV_F, | ||||||
|  |     RISCV_D, | ||||||
|  |     RISCV_Q, | ||||||
|  |     RISCV_C, | ||||||
|  |     RISCV_Zicsr, | ||||||
|  |     RISCV_Zifencei, | ||||||
|  |     RISCV_LAST_, | ||||||
|  | } RiscvFeaturesEnum; | ||||||
|  |  | ||||||
|  | RiscvInfo GetRiscvInfo(void); | ||||||
|  | int GetRiscvFeaturesEnumValue(const RiscvFeatures* features, | ||||||
|  |     RiscvFeaturesEnum value); | ||||||
|  | const char* GetRiscvFeaturesEnumName(RiscvFeaturesEnum); | ||||||
|  |  | ||||||
|  | CPU_FEATURES_END_CPP_NAMESPACE | ||||||
|  |  | ||||||
|  | #endif  // CPU_FEATURES_INCLUDE_CPUINFO_RISCV_H_ | ||||||
| @@ -193,15 +193,15 @@ CPU_FEATURES_START_CPP_NAMESPACE | |||||||
| #define HWCAP_S390_SIE 4194304 | #define HWCAP_S390_SIE 4194304 | ||||||
|  |  | ||||||
| // https://elixir.bootlin.com/linux/latest/source/arch/riscv/include/uapi/asm/hwcap.h | // https://elixir.bootlin.com/linux/latest/source/arch/riscv/include/uapi/asm/hwcap.h | ||||||
| #define RISCV_HWCAP_A (1UL << ('A' - 'A')) | #define RISCV_HWCAP_32 0x32 | ||||||
| #define RISCV_HWCAP_C (1UL << ('C' - 'A')) | #define RISCV_HWCAP_64 0x64 | ||||||
| #define RISCV_HWCAP_D (1UL << ('D' - 'A')) | #define RISCV_HWCAP_128 0x128 | ||||||
| #define RISCV_HWCAP_E (1UL << ('E' - 'A')) |  | ||||||
| #define RISCV_HWCAP_F (1UL << ('F' - 'A')) |  | ||||||
| #define RISCV_HWCAP_I (1UL << ('I' - 'A')) |  | ||||||
| #define RISCV_HWCAP_M (1UL << ('M' - 'A')) | #define RISCV_HWCAP_M (1UL << ('M' - 'A')) | ||||||
| #define RISCV_HWCAP_V (1UL << ('V' - 'A')) | #define RISCV_HWCAP_A (1UL << ('A' - 'A')) | ||||||
|  | #define RISCV_HWCAP_F (1UL << ('F' - 'A')) | ||||||
|  | #define RISCV_HWCAP_D (1UL << ('D' - 'A')) | ||||||
| #define RISCV_HWCAP_Q (1UL << ('Q' - 'A')) | #define RISCV_HWCAP_Q (1UL << ('Q' - 'A')) | ||||||
|  | #define RISCV_HWCAP_C (1UL << ('C' - 'A')) | ||||||
|  |  | ||||||
| typedef struct | typedef struct | ||||||
| { | { | ||||||
|   | |||||||
| @@ -0,0 +1,109 @@ | |||||||
|  | // SPDX-FileCopyrightText: 2022 Google LLC | ||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
|  |  | ||||||
|  | #include "cpu_features_macros.h" | ||||||
|  |  | ||||||
|  | #ifdef CPU_FEATURES_ARCH_RISCV | ||||||
|  | #if defined(CPU_FEATURES_OS_LINUX) | ||||||
|  |  | ||||||
|  | #include "cpuinfo_riscv.h" | ||||||
|  |  | ||||||
|  | // According to | ||||||
|  | // https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/riscv/cpus.yaml | ||||||
|  | // isa string should match the following regex | ||||||
|  | // ^rv(?:64|32)imaf?d?q?c?b?v?k?h?(?:_[hsxz](?:[a-z])+)*$ | ||||||
|  | // | ||||||
|  | // This means we can test for features in this exact order except for Z | ||||||
|  | // extensions. | ||||||
|  |  | ||||||
|  | //////////////////////////////////////////////////////////////////////////////// | ||||||
|  | // Definitions for introspection. | ||||||
|  | //////////////////////////////////////////////////////////////////////////////// | ||||||
|  | #define INTROSPECTION_TABLE                              \ | ||||||
|  |     LINE(RISCV_RV32I, RV32I, "rv32i", RISCV_HWCAP_32, 0) \ | ||||||
|  |     LINE(RISCV_RV64I, RV64I, "rv64i", RISCV_HWCAP_64, 0) \ | ||||||
|  |     LINE(RISCV_M, M, "m", RISCV_HWCAP_M, 0)              \ | ||||||
|  |     LINE(RISCV_A, A, "a", RISCV_HWCAP_A, 0)              \ | ||||||
|  |     LINE(RISCV_F, F, "f", RISCV_HWCAP_F, 0)              \ | ||||||
|  |     LINE(RISCV_D, D, "d", RISCV_HWCAP_D, 0)              \ | ||||||
|  |     LINE(RISCV_Q, Q, "q", RISCV_HWCAP_Q, 0)              \ | ||||||
|  |     LINE(RISCV_C, C, "c", RISCV_HWCAP_C, 0)              \ | ||||||
|  |     LINE(RISCV_Zicsr, Zicsr, "_zicsr", 0, 0)             \ | ||||||
|  |     LINE(RISCV_Zifencei, Zifencei, "_zifencei", 0, 0) | ||||||
|  | #define INTROSPECTION_PREFIX Riscv | ||||||
|  | #define INTROSPECTION_ENUM_PREFIX RISCV | ||||||
|  | #include "define_introspection_and_hwcaps.inl" | ||||||
|  |  | ||||||
|  | //////////////////////////////////////////////////////////////////////////////// | ||||||
|  | // Implementation. | ||||||
|  | //////////////////////////////////////////////////////////////////////////////// | ||||||
|  |  | ||||||
|  | #include "internal/filesystem.h" | ||||||
|  | #include "internal/stack_line_reader.h" | ||||||
|  | #include <stdbool.h> | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
|  | static const RiscvInfo kEmptyRiscvInfo; | ||||||
|  |  | ||||||
|  | static void HandleRiscVIsaLine(StringView line, RiscvFeatures* const features) | ||||||
|  | { | ||||||
|  |     for (size_t i = 0; i < RISCV_LAST_; ++i) | ||||||
|  |         { | ||||||
|  |             StringView flag = str(kCpuInfoFlags[i]); | ||||||
|  |             int index_of_flag = CpuFeatures_StringView_IndexOf(line, flag); | ||||||
|  |             bool is_set = index_of_flag != -1; | ||||||
|  |             kSetters[i](features, is_set); | ||||||
|  |             if (is_set) | ||||||
|  |                 line = CpuFeatures_StringView_PopFront(line, index_of_flag + flag.size); | ||||||
|  |         } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static bool HandleRiscVLine(const LineResult result, RiscvInfo* const info) | ||||||
|  | { | ||||||
|  |     StringView line = result.line; | ||||||
|  |     StringView key, value; | ||||||
|  |     if (CpuFeatures_StringView_GetAttributeKeyValue(line, &key, &value)) | ||||||
|  |         { | ||||||
|  |             if (CpuFeatures_StringView_IsEquals(key, str("isa"))) | ||||||
|  |                 { | ||||||
|  |                     HandleRiscVIsaLine(value, &info->features); | ||||||
|  |                 } | ||||||
|  |             else if (CpuFeatures_StringView_IsEquals(key, str("uarch"))) | ||||||
|  |                 { | ||||||
|  |                     int index = CpuFeatures_StringView_IndexOfChar(value, ','); | ||||||
|  |                     if (index == -1) return true; | ||||||
|  |                     StringView vendor = CpuFeatures_StringView_KeepFront(value, index); | ||||||
|  |                     StringView uarch = CpuFeatures_StringView_PopFront(value, index + 1); | ||||||
|  |                     CpuFeatures_StringView_CopyString(vendor, info->vendor, | ||||||
|  |                         sizeof(info->vendor)); | ||||||
|  |                     CpuFeatures_StringView_CopyString(uarch, info->uarch, | ||||||
|  |                         sizeof(info->uarch)); | ||||||
|  |                 } | ||||||
|  |         } | ||||||
|  |     return !result.eof; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void FillProcCpuInfoData(RiscvInfo* const info) | ||||||
|  | { | ||||||
|  |     const int fd = CpuFeatures_OpenFile("/proc/cpuinfo"); | ||||||
|  |     if (fd >= 0) | ||||||
|  |         { | ||||||
|  |             StackLineReader reader; | ||||||
|  |             StackLineReader_Initialize(&reader, fd); | ||||||
|  |             for (;;) | ||||||
|  |                 { | ||||||
|  |                     if (!HandleRiscVLine(StackLineReader_NextLine(&reader), info)) break; | ||||||
|  |                 } | ||||||
|  |             CpuFeatures_CloseFile(fd); | ||||||
|  |         } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | RiscvInfo GetRiscvInfo(void) | ||||||
|  | { | ||||||
|  |     RiscvInfo info = kEmptyRiscvInfo; | ||||||
|  |     FillProcCpuInfoData(&info); | ||||||
|  |     return info; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  //  defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID) | ||||||
|  | #endif  // CPU_FEATURES_ARCH_RISCV | ||||||
| @@ -25,6 +25,8 @@ | |||||||
| #include "cpuinfo_ppc.h" | #include "cpuinfo_ppc.h" | ||||||
| #elif defined(CPU_FEATURES_ARCH_S390X) | #elif defined(CPU_FEATURES_ARCH_S390X) | ||||||
| #include "cpuinfo_s390x.h" | #include "cpuinfo_s390x.h" | ||||||
|  | #elif defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  | #include "cpuinfo_riscv.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Design principles | // Design principles | ||||||
| @@ -217,6 +219,9 @@ DEFINE_ADD_FLAGS(GetPPCFeaturesEnumValue, GetPPCFeaturesEnumName, PPCFeatures, | |||||||
| #elif defined(CPU_FEATURES_ARCH_S390X) | #elif defined(CPU_FEATURES_ARCH_S390X) | ||||||
| DEFINE_ADD_FLAGS(GetS390XFeaturesEnumValue, GetS390XFeaturesEnumName, S390XFeatures, | DEFINE_ADD_FLAGS(GetS390XFeaturesEnumValue, GetS390XFeaturesEnumName, S390XFeatures, | ||||||
|     S390X_LAST_) |     S390X_LAST_) | ||||||
|  | #elif defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  | DEFINE_ADD_FLAGS(GetRiscvFeaturesEnumValue, GetRiscvFeaturesEnumName, RiscvFeatures, | ||||||
|  |     RISCV_LAST_) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Prints a json string with characters escaping. | // Prints a json string with characters escaping. | ||||||
| @@ -447,6 +452,12 @@ static Node* CreateTree(void) | |||||||
|     AddMapEntry(root, "model", CreateString(strings.type.platform)); |     AddMapEntry(root, "model", CreateString(strings.type.platform)); | ||||||
|     AddMapEntry(root, "# processors", CreateInt(strings.num_processors)); |     AddMapEntry(root, "# processors", CreateInt(strings.num_processors)); | ||||||
|     AddFlags(root, &info.features); |     AddFlags(root, &info.features); | ||||||
|  | #elif defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  |     const RiscvInfo info = GetRiscvInfo(); | ||||||
|  |     AddMapEntry(root, "arch", CreateString("risc-v")); | ||||||
|  |     AddMapEntry(root, "vendor", CreateString(info.vendor)); | ||||||
|  |     AddMapEntry(root, "microarchitecture", CreateString(info.uarch)); | ||||||
|  |     AddFlags(root, &info.features); | ||||||
| #endif | #endif | ||||||
|     return root; |     return root; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -99,3 +99,10 @@ if(PROCESSOR_IS_S390X) | |||||||
|   target_link_libraries(cpuinfo_s390x_test all_libraries) |   target_link_libraries(cpuinfo_s390x_test all_libraries) | ||||||
|   add_test(NAME cpuinfo_s390x_test COMMAND cpuinfo_s390x_test) |   add_test(NAME cpuinfo_s390x_test COMMAND cpuinfo_s390x_test) | ||||||
| endif() | endif() | ||||||
|  | ##------------------------------------------------------------------------------ | ||||||
|  | ## cpuinfo_riscv_test | ||||||
|  | if(PROCESSOR_IS_RISCV) | ||||||
|  |   add_executable(cpuinfo_riscv_test cpuinfo_riscv_test.cc  ../src/impl_riscv_linux.c) | ||||||
|  |   target_link_libraries(cpuinfo_riscv_test all_libraries) | ||||||
|  |   add_test(NAME cpuinfo_riscv_test COMMAND cpuinfo_riscv_test) | ||||||
|  | endif() | ||||||
| @@ -0,0 +1,141 @@ | |||||||
|  | // SPDX-FileCopyrightText: 2022 Google LLC | ||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
|  |  | ||||||
|  | #include "cpuinfo_riscv.h" | ||||||
|  | #include "filesystem_for_testing.h" | ||||||
|  | #include "gtest/gtest.h" | ||||||
|  | #include "hwcaps_for_testing.h" | ||||||
|  |  | ||||||
|  | namespace cpu_features | ||||||
|  | { | ||||||
|  | namespace | ||||||
|  | { | ||||||
|  |  | ||||||
|  | TEST(CpuinfoRiscvTest, Sipeed_Lichee_RV_FromCpuInfo) | ||||||
|  | { | ||||||
|  |     ResetHwcaps(); | ||||||
|  |     auto& fs = GetEmptyFilesystem(); | ||||||
|  |     fs.CreateFile("/proc/cpuinfo", R"(processor	: 0  | ||||||
|  | hart  : 0 | ||||||
|  | isa   : rv64imafdc | ||||||
|  | mmu   : sv39 | ||||||
|  | uarch : thead,c906)"); | ||||||
|  |     const auto info = GetRiscvInfo(); | ||||||
|  |     EXPECT_STREQ(info.uarch, "c906"); | ||||||
|  |     EXPECT_STREQ(info.vendor, "thead"); | ||||||
|  |  | ||||||
|  |     EXPECT_FALSE(info.features.RV32I); | ||||||
|  |     EXPECT_TRUE(info.features.RV64I); | ||||||
|  |     EXPECT_TRUE(info.features.M); | ||||||
|  |     EXPECT_TRUE(info.features.A); | ||||||
|  |     EXPECT_TRUE(info.features.F); | ||||||
|  |     EXPECT_TRUE(info.features.D); | ||||||
|  |     EXPECT_FALSE(info.features.Q); | ||||||
|  |     EXPECT_TRUE(info.features.C); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // https://github.com/ThomasKaiser/sbc-bench/blob/284e82b016ec1beeac42a5fcbe556b670f68441a/results/Kendryte-K510-4.17.0.cpuinfo | ||||||
|  | TEST(CpuinfoRiscvTest, Kendryte_K510_FromCpuInfo) | ||||||
|  | { | ||||||
|  |     ResetHwcaps(); | ||||||
|  |     auto& fs = GetEmptyFilesystem(); | ||||||
|  |     fs.CreateFile("/proc/cpuinfo", R"( | ||||||
|  | hart	: 0 | ||||||
|  | isa	    : rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-0p0 | ||||||
|  | mmu	    : sv39 | ||||||
|  |  | ||||||
|  | hart	: 1 | ||||||
|  | isa	    : rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-0p0 | ||||||
|  | mmu	    : sv39"); | ||||||
|  |   const auto info = GetRiscvInfo(); | ||||||
|  |   EXPECT_STREQ(info.uarch, ""); | ||||||
|  |   EXPECT_STREQ(info.vendor, ""); | ||||||
|  |   EXPECT_FALSE(info.features.RV32I); | ||||||
|  |   EXPECT_TRUE(info.features.RV64I); | ||||||
|  |   EXPECT_TRUE(info.features.M); | ||||||
|  |   EXPECT_TRUE(info.features.A); | ||||||
|  |   EXPECT_TRUE(info.features.F); | ||||||
|  |   EXPECT_TRUE(info.features.D); | ||||||
|  |   EXPECT_FALSE(info.features.Q); | ||||||
|  |   EXPECT_TRUE(info.features.C); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // https://github.com/ThomasKaiser/sbc-bench/blob/284e82b016ec1beeac42a5fcbe556b670f68441a/results/T-Head-C910-5.10.4.cpuinfo | ||||||
|  | TEST(CpuinfoRiscvTest, T_Head_C910_FromCpuInfo) { | ||||||
|  |   ResetHwcaps(); | ||||||
|  |   auto& fs = GetEmptyFilesystem(); | ||||||
|  |   fs.CreateFile("/proc/cpuinfo", R"( | ||||||
|  | processor	: 0 | ||||||
|  | hart		: 0 | ||||||
|  | isa		    : rv64imafdcsu | ||||||
|  | mmu		    : sv39 | ||||||
|  | cpu-freq	: 1.2Ghz | ||||||
|  | cpu-icache	: 64KB | ||||||
|  | cpu-dcache	: 64KB | ||||||
|  | cpu-l2cache	: 2MB | ||||||
|  | cpu-tlb		: 1024 4-ways | ||||||
|  | cpu-cacheline	: 64Bytes | ||||||
|  | cpu-vector	: 0.7.1 | ||||||
|  | processor	: 1 | ||||||
|  | hart		: 1 | ||||||
|  | isa		    : rv64imafdcsu | ||||||
|  | mmu		    : sv39 | ||||||
|  | cpu-freq	: 1.2Ghz | ||||||
|  | cpu-icache	: 64KB | ||||||
|  | cpu-dcache	: 64KB | ||||||
|  | cpu-l2cache	: 2MB | ||||||
|  | cpu-tlb		: 1024 4-ways | ||||||
|  | cpu-cacheline	: 64Bytes | ||||||
|  | cpu-vector	: 0.7.1"); | ||||||
|  |   const auto info = GetRiscvInfo(); | ||||||
|  |   EXPECT_STREQ(info.uarch, ""); | ||||||
|  |   EXPECT_STREQ(info.vendor, ""); | ||||||
|  |   EXPECT_FALSE(info.features.RV32I); | ||||||
|  |   EXPECT_TRUE(info.features.RV64I); | ||||||
|  |   EXPECT_TRUE(info.features.M); | ||||||
|  |   EXPECT_TRUE(info.features.A); | ||||||
|  |   EXPECT_TRUE(info.features.F); | ||||||
|  |   EXPECT_TRUE(info.features.D); | ||||||
|  |   EXPECT_FALSE(info.features.Q); | ||||||
|  |   EXPECT_TRUE(info.features.C); | ||||||
|  | } | ||||||
|  | TEST(CpuinfoRiscvTest, UnknownFromCpuInfo) { | ||||||
|  |   ResetHwcaps(); | ||||||
|  |   auto& fs = GetEmptyFilesystem(); | ||||||
|  |   fs.CreateFile("/proc/cpuinfo", R"( | ||||||
|  | processor : 0 | ||||||
|  | hart      : 2 | ||||||
|  | isa       : rv64imafdc | ||||||
|  | mmu       : sv39 | ||||||
|  | uarch     : sifive,bullet0 | ||||||
|  | processor : 1 | ||||||
|  | hart      : 1 | ||||||
|  | isa       : rv64imafdc | ||||||
|  | mmu       : sv39 | ||||||
|  | uarch     : sifive,bullet0 | ||||||
|  | processor : 2 | ||||||
|  | hart      : 3 | ||||||
|  | isa       : rv64imafdc | ||||||
|  | mmu       : sv39 | ||||||
|  | uarch     : sifive,bullet0 | ||||||
|  | processor : 3 | ||||||
|  | hart      : 4 | ||||||
|  | isa       : rv64imafdc | ||||||
|  | mmu       : sv39 | ||||||
|  | uarch     : sifive,bullet0)"); | ||||||
|  |     const auto info = GetRiscvInfo(); | ||||||
|  |     EXPECT_STREQ(info.uarch, "bullet0"); | ||||||
|  |     EXPECT_STREQ(info.vendor, "sifive"); | ||||||
|  |  | ||||||
|  |     EXPECT_FALSE(info.features.RV32I); | ||||||
|  |     EXPECT_TRUE(info.features.RV64I); | ||||||
|  |     EXPECT_TRUE(info.features.M); | ||||||
|  |     EXPECT_TRUE(info.features.A); | ||||||
|  |     EXPECT_TRUE(info.features.F); | ||||||
|  |     EXPECT_TRUE(info.features.D); | ||||||
|  |     EXPECT_FALSE(info.features.Q); | ||||||
|  |     EXPECT_TRUE(info.features.C); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | }  // namespace | ||||||
|  | }  // namespace cpu_features | ||||||
| @@ -23,7 +23,6 @@ | |||||||
| \li \subpage volk_gnsssdr_8ic_magnitude_squared_8i | \li \subpage volk_gnsssdr_8ic_magnitude_squared_8i | ||||||
| \li \subpage volk_gnsssdr_8ic_x2_dot_prod_8ic | \li \subpage volk_gnsssdr_8ic_x2_dot_prod_8ic | ||||||
| \li \subpage volk_gnsssdr_8ic_x2_multiply_8ic | \li \subpage volk_gnsssdr_8ic_x2_multiply_8ic | ||||||
| \li \subpage volk_gnsssdr_8ic_s8ic_multiply_8ic |  | ||||||
| \li \subpage volk_gnsssdr_8i_accumulator_s8i | \li \subpage volk_gnsssdr_8i_accumulator_s8i | ||||||
| \li \subpage volk_gnsssdr_8i_index_max_16u | \li \subpage volk_gnsssdr_8i_index_max_16u | ||||||
| \li \subpage volk_gnsssdr_8i_max_s8i | \li \subpage volk_gnsssdr_8i_max_s8i | ||||||
|   | |||||||
| @@ -1,27 +0,0 @@ | |||||||
| # |  | ||||||
| # ORC implementation: calculates the conjugate of a 16 bits vector |  | ||||||
| # |  | ||||||
| # Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com |  | ||||||
| # |  | ||||||
| # ORC code that calculates the conjugate of a |  | ||||||
| # 16 bits vector (8 bits the real part and 8 bits the imaginary part) |  | ||||||
| # result = (real*real) + (imag*imag) |  | ||||||
| # |  | ||||||
| # |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| # |  | ||||||
| # GNSS-SDR is a Global Navigation Satellite System software-defined receiver. |  | ||||||
| # This file is part of GNSS-SDR. |  | ||||||
| # |  | ||||||
| # Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) |  | ||||||
| # SPDX-License-Identifier: GPL-3.0-or-later |  | ||||||
| # |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| # |  | ||||||
|  |  | ||||||
| .function volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl |  | ||||||
| .source 2 src1 |  | ||||||
| .dest 2 dst |  | ||||||
| .temp 2 merged |  | ||||||
| mergebw merged, 1, -1 |  | ||||||
| x2 mullb dst, merged, src1 |  | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| # |  | ||||||
| # ORC implementation: multiplies a group of 16 bits vectors by one constant vector |  | ||||||
| # |  | ||||||
| #  Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com |  | ||||||
| # |  | ||||||
| # |  | ||||||
| # ORC code that multiplies a group of 16 bits vectors |  | ||||||
| # (8 bits the real part and 8 bits the imaginary part) by one constant vector |  | ||||||
| # |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| # |  | ||||||
| # GNSS-SDR is a Global Navigation Satellite System software-defined receiver. |  | ||||||
| # This file is part of GNSS-SDR. |  | ||||||
| # |  | ||||||
| # Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) |  | ||||||
| # SPDX-License-Identifier: GPL-3.0-or-later |  | ||||||
| # |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| # |  | ||||||
|  |  | ||||||
| .function volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl |  | ||||||
| .source 2 src1 |  | ||||||
| .param 2 src2real |  | ||||||
| .param 2 src2imag |  | ||||||
| .dest 2 dst |  | ||||||
| .temp 2 iqprod |  | ||||||
| .temp 1 real |  | ||||||
| .temp 1 imag |  | ||||||
| .temp 1 rr |  | ||||||
| .temp 1 ii |  | ||||||
| .temp 1 ri |  | ||||||
| .temp 1 ir |  | ||||||
| x2 mullb iqprod, src1, src2real |  | ||||||
| splitwb ir, rr, iqprod |  | ||||||
| x2 mullb iqprod, src1, src2imag |  | ||||||
| splitwb ii, ri, iqprod |  | ||||||
| subb real, rr, ii |  | ||||||
| addb imag, ri, ir |  | ||||||
| mergebw dst, real, imag |  | ||||||
| @@ -324,16 +324,6 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_sse3(lv_8sc_t* cVector, cons | |||||||
| #endif /* LV_HAVE_SSE3 */ | #endif /* LV_HAVE_SSE3 */ | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_ORC |  | ||||||
|  |  | ||||||
| extern void volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points); |  | ||||||
| static inline void volk_gnsssdr_8ic_conjugate_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points) |  | ||||||
| { |  | ||||||
|     volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(cVector, aVector, num_points); |  | ||||||
| } |  | ||||||
| #endif /* LV_HAVE_ORC */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_NEON | #ifdef LV_HAVE_NEON | ||||||
| #include <arm_neon.h> | #include <arm_neon.h> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,205 +0,0 @@ | |||||||
| /*! |  | ||||||
|  * \file volk_gnsssdr_8ic_s8ic_multiply_8ic.h |  | ||||||
|  * \brief VOLK_GNSSSDR kernel: multiplies a group of 16 bits vectors by one constant vector. |  | ||||||
|  * \authors <ul> |  | ||||||
|  *          <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com |  | ||||||
|  *          </ul> |  | ||||||
|  * |  | ||||||
|  * VOLK_GNSSSDR kernel that multiplies a group of 16 bits vectors |  | ||||||
|  * (8 bits the real part and 8 bits the imaginary part) by one constant vector |  | ||||||
|  * |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  * |  | ||||||
|  * GNSS-SDR is a Global Navigation Satellite System software-defined receiver. |  | ||||||
|  * This file is part of GNSS-SDR. |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2010-2020  (see AUTHORS file for a list of contributors) |  | ||||||
|  * SPDX-License-Identifier: GPL-3.0-or-later |  | ||||||
|  * |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| /*! |  | ||||||
|  * \page volk_gnsssdr_8ic_s8ic_multiply_8ic |  | ||||||
|  * |  | ||||||
|  * \b Overview |  | ||||||
|  * |  | ||||||
|  * Multiplies the input vector by a scalar and stores the results in the third vector |  | ||||||
|  * |  | ||||||
|  * <b>Dispatcher Prototype</b> |  | ||||||
|  * \code |  | ||||||
|  * void volk_gnsssdr_8ic_s8ic_multiply_8ic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points); |  | ||||||
|  * \endcode |  | ||||||
|  * |  | ||||||
|  * \b Inputs |  | ||||||
|  * \li aVector: The vector to be multiplied. |  | ||||||
|  * \li scalar The complex scalar to multiply \p aVector |  | ||||||
|  * \li num_points: The number of complex values in \p aVector to be multiplied by \p scalar and stored into \p cVector. |  | ||||||
|  * |  | ||||||
|  * \b Outputs |  | ||||||
|  * \li cVector: The vector where the results will be stored |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_H |  | ||||||
| #define INCLUDED_volk_gnsssdr_8ic_s8ic_multiply_8ic_H |  | ||||||
|  |  | ||||||
| #include <volk_gnsssdr/volk_gnsssdr_complex.h> |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_SSE3 |  | ||||||
| #include <pmmintrin.h> |  | ||||||
|  |  | ||||||
| static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) |  | ||||||
| { |  | ||||||
|     unsigned int number = 0; |  | ||||||
|     const unsigned int sse_iters = num_points / 8; |  | ||||||
|  |  | ||||||
|     __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; |  | ||||||
|  |  | ||||||
|     lv_8sc_t* c = cVector; |  | ||||||
|     const lv_8sc_t* a = aVector; |  | ||||||
|  |  | ||||||
|     mult1 = _mm_set_epi8(0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF); |  | ||||||
|  |  | ||||||
|     y = _mm_set1_epi16(*(short*)&scalar); |  | ||||||
|     imagy = _mm_srli_si128(y, 1); |  | ||||||
|     imagy = _mm_and_si128(imagy, mult1); |  | ||||||
|     realy = _mm_and_si128(y, mult1); |  | ||||||
|  |  | ||||||
|     for (; number < sse_iters; number++) |  | ||||||
|         { |  | ||||||
|             x = _mm_lddqu_si128((__m128i*)a); |  | ||||||
|  |  | ||||||
|             imagx = _mm_srli_si128(x, 1); |  | ||||||
|             imagx = _mm_and_si128(imagx, mult1); |  | ||||||
|             realx = _mm_and_si128(x, mult1); |  | ||||||
|  |  | ||||||
|             realx_mult_realy = _mm_mullo_epi16(realx, realy); |  | ||||||
|             imagx_mult_imagy = _mm_mullo_epi16(imagx, imagy); |  | ||||||
|             realx_mult_imagy = _mm_mullo_epi16(realx, imagy); |  | ||||||
|             imagx_mult_realy = _mm_mullo_epi16(imagx, realy); |  | ||||||
|  |  | ||||||
|             realc = _mm_sub_epi16(realx_mult_realy, imagx_mult_imagy); |  | ||||||
|             realc = _mm_and_si128(realc, mult1); |  | ||||||
|             imagc = _mm_add_epi16(realx_mult_imagy, imagx_mult_realy); |  | ||||||
|             imagc = _mm_and_si128(imagc, mult1); |  | ||||||
|             imagc = _mm_slli_si128(imagc, 1); |  | ||||||
|  |  | ||||||
|             totalc = _mm_or_si128(realc, imagc); |  | ||||||
|  |  | ||||||
|             _mm_storeu_si128((__m128i*)c, totalc); |  | ||||||
|  |  | ||||||
|             a += 8; |  | ||||||
|             c += 8; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     for (number = sse_iters * 8; number < num_points; ++number) |  | ||||||
|         { |  | ||||||
|             *c++ = (*a++) * scalar; |  | ||||||
|         } |  | ||||||
| } |  | ||||||
| #endif /* LV_HAVE_SSE3 */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_GENERIC |  | ||||||
|  |  | ||||||
| static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) |  | ||||||
| { |  | ||||||
|     /*lv_8sc_t* cPtr = cVector; |  | ||||||
|      const lv_8sc_t* aPtr = aVector; |  | ||||||
|  |  | ||||||
|      for (int i = 0; i<num_points; ++i) |  | ||||||
|      { |  | ||||||
|      *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|      }*/ |  | ||||||
|  |  | ||||||
|     lv_8sc_t* cPtr = cVector; |  | ||||||
|     const lv_8sc_t* aPtr = aVector; |  | ||||||
|     unsigned int number = num_points; |  | ||||||
|  |  | ||||||
|     // unwrap loop |  | ||||||
|     while (number >= 8) |  | ||||||
|         { |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             *cPtr++ = (*aPtr++) * scalar; |  | ||||||
|             number -= 8; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     // clean up any remaining |  | ||||||
|     while (number-- > 0) |  | ||||||
|         *cPtr++ = *aPtr++ * scalar; |  | ||||||
| } |  | ||||||
| #endif /* LV_HAVE_GENERIC */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_SSE3 |  | ||||||
| #include <pmmintrin.h> |  | ||||||
|  |  | ||||||
| static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) |  | ||||||
| { |  | ||||||
|     unsigned int number = 0; |  | ||||||
|     const unsigned int sse_iters = num_points / 8; |  | ||||||
|  |  | ||||||
|     __m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc; |  | ||||||
|  |  | ||||||
|     lv_8sc_t* c = cVector; |  | ||||||
|     const lv_8sc_t* a = aVector; |  | ||||||
|  |  | ||||||
|     mult1 = _mm_set_epi8(0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF); |  | ||||||
|  |  | ||||||
|     y = _mm_set1_epi16(*(short*)&scalar); |  | ||||||
|     imagy = _mm_srli_si128(y, 1); |  | ||||||
|     imagy = _mm_and_si128(imagy, mult1); |  | ||||||
|     realy = _mm_and_si128(y, mult1); |  | ||||||
|  |  | ||||||
|     for (; number < sse_iters; number++) |  | ||||||
|         { |  | ||||||
|             x = _mm_load_si128((__m128i*)a); |  | ||||||
|  |  | ||||||
|             imagx = _mm_srli_si128(x, 1); |  | ||||||
|             imagx = _mm_and_si128(imagx, mult1); |  | ||||||
|             realx = _mm_and_si128(x, mult1); |  | ||||||
|  |  | ||||||
|             realx_mult_realy = _mm_mullo_epi16(realx, realy); |  | ||||||
|             imagx_mult_imagy = _mm_mullo_epi16(imagx, imagy); |  | ||||||
|             realx_mult_imagy = _mm_mullo_epi16(realx, imagy); |  | ||||||
|             imagx_mult_realy = _mm_mullo_epi16(imagx, realy); |  | ||||||
|  |  | ||||||
|             realc = _mm_sub_epi16(realx_mult_realy, imagx_mult_imagy); |  | ||||||
|             realc = _mm_and_si128(realc, mult1); |  | ||||||
|             imagc = _mm_add_epi16(realx_mult_imagy, imagx_mult_realy); |  | ||||||
|             imagc = _mm_and_si128(imagc, mult1); |  | ||||||
|             imagc = _mm_slli_si128(imagc, 1); |  | ||||||
|  |  | ||||||
|             totalc = _mm_or_si128(realc, imagc); |  | ||||||
|  |  | ||||||
|             _mm_store_si128((__m128i*)c, totalc); |  | ||||||
|  |  | ||||||
|             a += 8; |  | ||||||
|             c += 8; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     for (number = sse_iters * 8; number < num_points; ++number) |  | ||||||
|         { |  | ||||||
|             *c++ = (*a++) * scalar; |  | ||||||
|         } |  | ||||||
| } |  | ||||||
| #endif /* LV_HAVE_SSE3 */ |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #ifdef LV_HAVE_ORC |  | ||||||
|  |  | ||||||
| extern void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, const char scalarreal, const char scalarimag, unsigned int num_points); |  | ||||||
| static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points) |  | ||||||
| { |  | ||||||
|     volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(cVector, aVector, lv_creal(scalar), lv_cimag(scalar), num_points); |  | ||||||
| } |  | ||||||
| #endif /* LV_HAVE_ORC */ |  | ||||||
|  |  | ||||||
| #endif /* INCLUDED_volk_gnsssdr_32fc_x2_multiply_32fc_H */ |  | ||||||
| @@ -51,7 +51,8 @@ std::vector<volk_gnsssdr_test_case_t> init_test_list(volk_gnsssdr_test_params_t | |||||||
|     volk_gnsssdr_test_params_t test_params_inacc2 = volk_gnsssdr_test_params_t(2e-1, test_params.scalar(), |     volk_gnsssdr_test_params_t test_params_inacc2 = volk_gnsssdr_test_params_t(2e-1, test_params.scalar(), | ||||||
|         test_params.vlen(), test_params.iter(), test_params.benchmark_mode(), test_params.kernel_regex()); |         test_params.vlen(), test_params.iter(), test_params.benchmark_mode(), test_params.kernel_regex()); | ||||||
|  |  | ||||||
|     std::vector<volk_gnsssdr_test_case_t> test_cases; |     std::vector<volk_gnsssdr_test_case_t> | ||||||
|  |         test_cases; | ||||||
|  |  | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8i_accumulator_s8i, test_params_more_iters)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8i_accumulator_s8i, test_params_more_iters)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8i_index_max_16u, test_params_more_iters)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8i_index_max_16u, test_params_more_iters)) | ||||||
| @@ -61,7 +62,6 @@ std::vector<volk_gnsssdr_test_case_t> init_test_list(volk_gnsssdr_test_params_t | |||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_magnitude_squared_8i, test_params_more_iters)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_magnitude_squared_8i, test_params_more_iters)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_x2_dot_prod_8ic, test_params)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_x2_dot_prod_8ic, test_params)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_x2_multiply_8ic, test_params)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_x2_multiply_8ic, test_params)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8ic_s8ic_multiply_8ic, test_params)) |  | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_8u_x2_multiply_8u, test_params_more_iters)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_8u_x2_multiply_8u, test_params_more_iters)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_64f_accumulator_64f, test_params)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_64f_accumulator_64f, test_params)) | ||||||
|     QA(VOLK_INIT_TEST(volk_gnsssdr_32f_sincos_32fc, test_params_inacc)) |     QA(VOLK_INIT_TEST(volk_gnsssdr_32f_sincos_32fc, test_params_inacc)) | ||||||
|   | |||||||
| @@ -26,6 +26,10 @@ | |||||||
| #include "cpuinfo_mips.h" | #include "cpuinfo_mips.h" | ||||||
| #elif defined(CPU_FEATURES_ARCH_PPC) | #elif defined(CPU_FEATURES_ARCH_PPC) | ||||||
| #include "cpuinfo_ppc.h" | #include "cpuinfo_ppc.h" | ||||||
|  | #elif defined(CPU_FEATURES_ARCH_S390X) | ||||||
|  | #include "cpuinfo_s390x.h" | ||||||
|  | #elif defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  | #include "cpuinfo_riscv.h" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // This is required for MSVC | // This is required for MSVC | ||||||
| @@ -44,6 +48,22 @@ static int i_can_has_${arch.name} (void) { | |||||||
|         %if "neon" in arch.name: |         %if "neon" in arch.name: | ||||||
| #if defined(CPU_FEATURES_ARCH_ARM) | #if defined(CPU_FEATURES_ARCH_ARM) | ||||||
|     if (GetArmInfo().features.${check} == 0){ return 0; } |     if (GetArmInfo().features.${check} == 0){ return 0; } | ||||||
|  | #endif | ||||||
|  |         %elif "mips" in arch.name: | ||||||
|  | #if defined(CPU_FEATURES_ARCH_MIPS) | ||||||
|  |     if (GetMipsInfo().features.${check} == 0){ return 0; } | ||||||
|  | #endif | ||||||
|  |         %elif "ppc" in arch.name: | ||||||
|  | #if defined(CPU_FEATURES_ARCH_PPC) | ||||||
|  |     if (GetPPCInfo().features.${check} == 0){ return 0; } | ||||||
|  | #endif | ||||||
|  |         %elif "s390x" in arch.name: | ||||||
|  | #if defined(CPU_FEATURES_ARCH_S390X) | ||||||
|  |     if (GetS390XInfo().features.${check} == 0){ return 0; } | ||||||
|  | #endif | ||||||
|  |         %elif "riscv" in arch.name: | ||||||
|  | #if defined(CPU_FEATURES_ARCH_RISCV) | ||||||
|  |     if (GetRiscvInfo().features.${check} == 0){ return 0; } | ||||||
| #endif | #endif | ||||||
|         %else: |         %else: | ||||||
| #if defined(CPU_FEATURES_ARCH_X86) | #if defined(CPU_FEATURES_ARCH_X86) | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ ZmqSignalSource::ZmqSignalSource(const ConfigurationInterface* configuration, | |||||||
|             LOG(INFO) << "Connecting to ZMQ pub at " << endpoint; |             LOG(INFO) << "Connecting to ZMQ pub at " << endpoint; | ||||||
|             // work around gnuradio interface deficiency |             // work around gnuradio interface deficiency | ||||||
|             d_source_block = gr::zeromq::sub_source::make(d_item_size, vlen, const_cast<char*>(endpoint.data()), timeout_ms, pass_tags, hwm); |             d_source_block = gr::zeromq::sub_source::make(d_item_size, vlen, const_cast<char*>(endpoint.data()), timeout_ms, pass_tags, hwm); | ||||||
|  |             d_source_block->set_tag_propagation_policy(gr::block::TPP_DONT);  // GNSS-SDR doesn't do well with tags/ | ||||||
|         } |         } | ||||||
|     else |     else | ||||||
|         { |         { | ||||||
| @@ -94,9 +95,13 @@ auto ZmqSignalSource::get_right_block() -> gr::basic_block_sptr | |||||||
|     auto result = gr::basic_block_sptr(); |     auto result = gr::basic_block_sptr(); | ||||||
|  |  | ||||||
|     if (d_vec_block) |     if (d_vec_block) | ||||||
|         result = d_vec_block;  // NOLINT |         { | ||||||
|  |             result = d_vec_block; | ||||||
|  |         } | ||||||
|     else |     else | ||||||
|         result = d_source_block;  // NOLINT |         { | ||||||
|  |             result = d_source_block; | ||||||
|  |         } | ||||||
|  |  | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ | |||||||
| #ifndef GNSS_SDR_FPGA_SWITCH_H | #ifndef GNSS_SDR_FPGA_SWITCH_H | ||||||
| #define GNSS_SDR_FPGA_SWITCH_H | #define GNSS_SDR_FPGA_SWITCH_H | ||||||
|  |  | ||||||
|  | #include <cstdint> | ||||||
| #include <string> | #include <string> | ||||||
|  |  | ||||||
| /** \addtogroup Signal_Source | /** \addtogroup Signal_Source | ||||||
|   | |||||||
| @@ -664,6 +664,7 @@ void galileo_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satellite | |||||||
|     d_received_tow_ms = std::numeric_limits<uint32_t>::max(); |     d_received_tow_ms = std::numeric_limits<uint32_t>::max(); | ||||||
|     d_E6_TOW_set = false; |     d_E6_TOW_set = false; | ||||||
|     d_valid_timetag = false; |     d_valid_timetag = false; | ||||||
|  |     d_inav_nav.init_PRN(d_satellite.get_PRN()); | ||||||
|     if (d_there_are_e6_channels) |     if (d_there_are_e6_channels) | ||||||
|         { |         { | ||||||
|             const std::pair<uint32_t, uint64_t> tow_and_sample{d_received_tow_ms, 0ULL}; |             const std::pair<uint32_t, uint64_t> tow_and_sample{d_received_tow_ms, 0ULL}; | ||||||
| @@ -684,6 +685,7 @@ void galileo_telemetry_decoder_gs::reset() | |||||||
|     d_fnav_nav.set_flag_TOW_set(false); |     d_fnav_nav.set_flag_TOW_set(false); | ||||||
|     d_inav_nav.set_flag_TOW_set(false); |     d_inav_nav.set_flag_TOW_set(false); | ||||||
|     d_inav_nav.set_TOW0_flag(false); |     d_inav_nav.set_TOW0_flag(false); | ||||||
|  |     d_inav_nav.init_PRN(d_satellite.get_PRN()); | ||||||
|     d_last_valid_preamble = d_symbol_counter; |     d_last_valid_preamble = d_symbol_counter; | ||||||
|     d_sent_tlm_failed_msg = false; |     d_sent_tlm_failed_msg = false; | ||||||
|     d_E6_TOW_set = false; |     d_E6_TOW_set = false; | ||||||
|   | |||||||
| @@ -37,12 +37,6 @@ if(NOT GOOGLETEST_FOUND) | |||||||
|     if(CMAKE_GENERATOR STREQUAL Xcode) |     if(CMAKE_GENERATOR STREQUAL Xcode) | ||||||
|         set(GTEST_BUILD_COMMAND "xcodebuild" "-configuration" $<$<CONFIG:Debug>:Debug>$<$<CONFIG:Release>:Release>$<$<CONFIG:RelWithDebInfo>:RelWithDebInfo>$<$<CONFIG:MinSizeRel>:MinSizeRel> "-target" "gtest_main") |         set(GTEST_BUILD_COMMAND "xcodebuild" "-configuration" $<$<CONFIG:Debug>:Debug>$<$<CONFIG:Release>:Release>$<$<CONFIG:RelWithDebInfo>:RelWithDebInfo>$<$<CONFIG:MinSizeRel>:MinSizeRel> "-target" "gtest_main") | ||||||
|     endif() |     endif() | ||||||
|     if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR |  | ||||||
|       (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)) |  | ||||||
|         set(GOOGLETEST_GIT_TAG v${GNSSSDR_GTEST_LOCAL_VERSION}) |  | ||||||
|     else() |  | ||||||
|         set(GOOGLETEST_GIT_TAG release-${GNSSSDR_GTEST_LOCAL_VERSION}) |  | ||||||
|     endif() |  | ||||||
|     if(GNSSSDR_GTEST_LOCAL_VERSION VERSION_LESS 1.12.0) |     if(GNSSSDR_GTEST_LOCAL_VERSION VERSION_LESS 1.12.0) | ||||||
|         set(DEBUG_DECORATION "d") |         set(DEBUG_DECORATION "d") | ||||||
|     else() |     else() | ||||||
| @@ -51,7 +45,7 @@ if(NOT GOOGLETEST_FOUND) | |||||||
|     if(CMAKE_VERSION VERSION_LESS 3.2) |     if(CMAKE_VERSION VERSION_LESS 3.2) | ||||||
|         ExternalProject_Add(gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |         ExternalProject_Add(gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             GIT_REPOSITORY https://github.com/google/googletest |             GIT_REPOSITORY https://github.com/google/googletest | ||||||
|             GIT_TAG ${GOOGLETEST_GIT_TAG} |             GIT_TAG v${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gtest/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |             SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gtest/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             BINARY_DIR ${GNSSSDR_BINARY_DIR}/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |             BINARY_DIR ${GNSSSDR_BINARY_DIR}/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             CMAKE_ARGS ${GTEST_COMPILER} |             CMAKE_ARGS ${GTEST_COMPILER} | ||||||
| @@ -80,7 +74,7 @@ if(NOT GOOGLETEST_FOUND) | |||||||
|         endif() |         endif() | ||||||
|         ExternalProject_Add(gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |         ExternalProject_Add(gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             GIT_REPOSITORY https://github.com/google/googletest |             GIT_REPOSITORY https://github.com/google/googletest | ||||||
|             GIT_TAG ${GOOGLETEST_GIT_TAG} |             GIT_TAG v${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gtest/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |             SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gtest/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             BINARY_DIR ${GNSSSDR_BINARY_DIR}/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} |             BINARY_DIR ${GNSSSDR_BINARY_DIR}/gtest-${GNSSSDR_GTEST_LOCAL_VERSION} | ||||||
|             CMAKE_ARGS ${GTEST_COMPILER} |             CMAKE_ARGS ${GTEST_COMPILER} | ||||||
| @@ -369,12 +363,14 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | |||||||
|         if(CMAKE_VERSION VERSION_GREATER 3.17.0) |         if(CMAKE_VERSION VERSION_GREATER 3.17.0) | ||||||
|             set(GNSSTK_PATCH_COMMAND |             set(GNSSTK_PATCH_COMMAND | ||||||
|                 cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && |                 cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && | ||||||
|                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static14.patch |                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static14.patch && | ||||||
|  |                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/core/lib/GNSSCore/ObsID.hpp < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_gcc13.patch | ||||||
|             ) |             ) | ||||||
|         else() |         else() | ||||||
|             set(GNSSTK_PATCH_COMMAND |             set(GNSSTK_PATCH_COMMAND | ||||||
|                 cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && |                 cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && | ||||||
|                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static13.patch |                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static13.patch && | ||||||
|  |                 ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/core/lib/GNSSCore/ObsID.hpp < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_gcc13.patch | ||||||
|             ) |             ) | ||||||
|         endif() |         endif() | ||||||
|         # Patch only once |         # Patch only once | ||||||
| @@ -408,6 +404,9 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | |||||||
|                     set(GNSSTK_PARALLEL_BUILD "-j${NUMBER_OF_PROCESSORS}") |                     set(GNSSTK_PARALLEL_BUILD "-j${NUMBER_OF_PROCESSORS}") | ||||||
|                 endif() |                 endif() | ||||||
|             endif() |             endif() | ||||||
|  |             if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") | ||||||
|  |                 set(GNSSTK_FLAGS "-DCMAKE_CXX_FLAGS:STRING=-w")  # Fix for clang in aarch64 | ||||||
|  |             endif() | ||||||
|             if(CMAKE_VERSION VERSION_GREATER 3.17.0) |             if(CMAKE_VERSION VERSION_GREATER 3.17.0) | ||||||
|                 ExternalProject_Add(gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} |                 ExternalProject_Add(gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} | ||||||
|                     GIT_REPOSITORY https://github.com/SGL-UT/gnsstk |                     GIT_REPOSITORY https://github.com/SGL-UT/gnsstk | ||||||
| @@ -425,6 +424,7 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) | |||||||
|                         -DCMAKE_CXX_EXTENSIONS=ON |                         -DCMAKE_CXX_EXTENSIONS=ON | ||||||
|                         -DCMAKE_C_STANDARD=11 |                         -DCMAKE_C_STANDARD=11 | ||||||
|                         -DCMAKE_C_EXTENSIONS=ON |                         -DCMAKE_C_EXTENSIONS=ON | ||||||
|  |                         "${GNSSTK_FLAGS}" | ||||||
|                     BUILD_COMMAND ${GNSSTK_BUILD_COMMAND} ${GNSSTK_PARALLEL_BUILD} |                     BUILD_COMMAND ${GNSSTK_BUILD_COMMAND} ${GNSSTK_PARALLEL_BUILD} | ||||||
|                     BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX} |                     BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX} | ||||||
|                     UPDATE_COMMAND "" |                     UPDATE_COMMAND "" | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								src/tests/data/gnsstk_gcc13.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tests/data/gnsstk_gcc13.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | SPDX-License-Identifier: GPL-3.0-or-later | ||||||
|  | SPDX-FileCopyrightText: 2022 Carles Fernandez-Prades <carles.fernandez@cttc.es> | ||||||
|  | --- ObsID.hpp 2023-01-23 16:53:25.000000000 +0100 | ||||||
|  | +++ ObsID.hpp 2023-01-23 16:55:14.000000000 +0100 | ||||||
|  | @@ -47,6 +47,7 @@ | ||||||
|  |  #ifndef OBSID_HPP | ||||||
|  |  #define OBSID_HPP | ||||||
|  |   | ||||||
|  | +#include <cstdint> | ||||||
|  |  #include <iostream> | ||||||
|  |  #include <iomanip> | ||||||
|  |  #include <sstream> | ||||||
		Reference in New Issue
	
	Block a user
	 Javier Arribas
					Javier Arribas