mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Detect if the spidev driver is installed when the ENABLE_MAX2771 flag is set. Detect if the DMA proxy driver is installed when the ENABLE_DMA_PROXY flag is set. Check if ENABLE_FPGA is set when either ENABLE_MAX2771 or ENABLE_DMA_PROXY is set.
This commit is contained in:
		
							
								
								
									
										112
									
								
								CMakeLists.txt
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								CMakeLists.txt
									
									
									
									
									
								
							| @@ -44,7 +44,9 @@ option(ENABLE_AD936X_SDR "Enable the use of AD936X front-ends using libiio, requ | ||||
|  | ||||
| option(ENABLE_AD9361 "Enable the use of AD9361 direct to FPGA hardware, requires libiio" OFF) | ||||
|  | ||||
| option(ENABLE_FPGA_MAX2771_EVKIT "Enable the use of MAX2771 EVKIT direct to FPGA hardware" OFF) | ||||
| option(ENABLE_MAX2771 "Enable the use of MAX2771 direct to FPGA hardware, requires the spidev driver" OFF) | ||||
|  | ||||
| option(ENABLE_DMA_PROXY "Enable the use of the DMA direct to FPGA hardware, requires the DMA Proxy driver" OFF) | ||||
|  | ||||
| option(ENABLE_RAW_UDP "Enable the use of high-optimized custom UDP packet sample source, requires libpcap" OFF) | ||||
|  | ||||
| @@ -3348,12 +3350,107 @@ if(ENABLE_AD9361 OR ENABLE_FMCOMMS2) | ||||
|     endif() | ||||
| endif() | ||||
|  | ||||
| ############################################## | ||||
| # Check FPGA-related signal sources | ||||
| ############################################## | ||||
| if((ENABLE_AD9361 OR ENABLE_FPGA_MAX2771_EVKIT) AND NOT ENABLE_FPGA) | ||||
|     message(FATAL_ERROR "ENABLE_AD9361 and ENABLE_FPGA_MAX2771_EVKIT can only be set when ENABLE_FPGA is also set.") | ||||
|  | ||||
|  | ||||
| ##################################################################### | ||||
| # Check signal sources related to FPGA only. | ||||
| ##################################################################### | ||||
| if(ENABLE_MAX2771 AND NOT ENABLE_FPGA) | ||||
| 	message(STATUS "The SPIdev driver is enabled, but the FPGA is not enabled. The FPGA is required when using the SPIdev driver.") | ||||
| 	if(ENABLE_PACKAGING) | ||||
| 		set(ENABLE_MAX2771 OFF) | ||||
| 	else() | ||||
| 		message(FATAL_ERROR "ENABLE_MAX2771 can only be set when ENABLE_FPGA is also set.") | ||||
|     endif() | ||||
| endif() | ||||
| if(ENABLE_DMA_PROXY AND NOT ENABLE_FPGA) | ||||
| 	message(STATUS "The DMA Proxy driver is enabled, but the FPGA is not enabled. The FPGA is required when using the DMA Proxy driver.") | ||||
| 	if(ENABLE_PACKAGING) | ||||
| 		set(ENABLE_DMA_PROXY OFF) | ||||
| 	else() | ||||
| 		message(FATAL_ERROR "ENABLE_DMA_PROXY can only be set when ENABLE_FPGA is also set.") | ||||
|     endif() | ||||
| endif() | ||||
|  | ||||
|  | ||||
|  | ||||
| ##################################################################### | ||||
| # spidev driver - OPTIONAL | ||||
| # Linux kernel driver that provides user-space access to Serial | ||||
| # Peripheral Interface) | ||||
| ##################################################################### | ||||
| if(ENABLE_MAX2771) | ||||
| 	if(DEFINED ENV{SDKTARGETSYSROOT}) | ||||
| 	    set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT}) | ||||
| 	else() | ||||
| 	    set(TARGET_ROOTFS_PATH "") | ||||
| 	endif() | ||||
| 	find_program(STRINGS_EXECUTABLE strings) | ||||
| 	if (NOT STRINGS_EXECUTABLE) | ||||
|         message(STATUS "The 'strings' command could not be found. See https://www.gnu.org/software/binutils/") | ||||
|         message(STATUS " You can try to install it by typing:") | ||||
|         if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") | ||||
|             if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") | ||||
|                 message(STATUS " sudo yum install binutils") | ||||
|             elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") | ||||
|                 message(STATUS " sudo zypper install binutils") | ||||
|             else() | ||||
|                 message(STATUS " sudo apt-get install binutils") | ||||
|             endif() | ||||
|         endif() | ||||
|         message(FATAL_ERROR "Binutils are required to build GNSS-SDR for SoC FPGA devices using the MAX2771 option.")     | ||||
| 	endif() | ||||
| 	set(DTB_FILE "${TARGET_ROOTFS_PATH}/boot/devicetree/system-top.dtb") | ||||
| 	if (EXISTS "${DTB_FILE}") | ||||
| 	    message(STATUS "Found DTB file: ${DTB_FILE}") | ||||
| 	    # Run the strings command and grep for "spidev" | ||||
| 	    execute_process( | ||||
| 	        COMMAND ${STRINGS_EXECUTABLE} ${DTB_FILE} | ||||
| 	        COMMAND grep "spidev" | ||||
| 	        OUTPUT_VARIABLE GREP_OUTPUT | ||||
| 	        RESULT_VARIABLE GREP_RESULT | ||||
| 	        OUTPUT_STRIP_TRAILING_WHITESPACE | ||||
| 	    ) | ||||
| 	    if (GREP_RESULT EQUAL 0) | ||||
| 	        message(STATUS "Found spidev-compatible peripheral in ${DTB_FILE}.") | ||||
| 	    else() | ||||
| 			message(STATUS "SPIdev driver not found, its installation is required.") | ||||
| 			if(ENABLE_PACKAGING) | ||||
| 				set(ENABLE_MAX2771 OFF) | ||||
| 			else() | ||||
| 				message(FATAL_ERROR "SPIdev driver is required for building gnss-sdr with -DENABLE_MAX2271=ON.") | ||||
| 			endif() | ||||
| 	    endif() | ||||
| 	else() | ||||
| 	    message(FATAL_ERROR "The device tree (DTB) file ${DTB_FILE} cannot be found.") | ||||
| 	endif() | ||||
| endif() | ||||
|  | ||||
|  | ||||
|  | ||||
| ##################################################################### | ||||
| # DMA Proxy driver - OPTIONAL | ||||
| # Simplified and efficient interface for user-space applications | ||||
| # to leverage DMA capabilities  for Xilinx FPGA and SoC systems | ||||
| ##################################################################### | ||||
| if(ENABLE_DMA_PROXY) | ||||
| 	if(DEFINED ENV{SDKTARGETSYSROOT}) | ||||
| 	    set(TARGET_ROOTFS_PATH $ENV{SDKTARGETSYSROOT}) | ||||
| 	else() | ||||
| 	    set(TARGET_ROOTFS_PATH "") | ||||
| 	endif() | ||||
| 	set(DMA_PROXY_FILE "${TARGET_ROOTFS_PATH}/lib/modules/5.10.0-xilinx-v2021.2/extra/dma-proxy.ko") | ||||
| 	if (EXISTS "${DMA_PROXY_FILE}") | ||||
| 	    message(STATUS "Found dma-proxy.ko file: ${DMA_PROXY_FILE}") | ||||
| 	else() | ||||
| 		if(ENABLE_PACKAGING) | ||||
| 			set(ENABLE_DMA_PROXY OFF) | ||||
| 		else() | ||||
| 			message(FATAL_ERROR "DMA Proxy driver is required for building gnss-sdr with -DENABLE_DMA_PROXY=ON.") | ||||
| 		endif() | ||||
| 	endif() | ||||
| endif() | ||||
|  | ||||
|  | ||||
|  | ||||
| ############################################## | ||||
| @@ -3560,7 +3657,8 @@ add_feature_info(ENABLE_LIMESDR ENABLE_LIMESDR "Enables Limesdr_Signal_Source. R | ||||
| add_feature_info(ENABLE_FMCOMMS2 ENABLE_FMCOMMS2 "Enables Fmcomms2_Signal_Source for FMCOMMS2/3/4 devices. Requires gr-iio and libad9361-dev.") | ||||
| add_feature_info(ENABLE_PLUTOSDR ENABLE_PLUTOSDR "Enables Plutosdr_Signal_Source for using ADALM-PLUTO boards. Requires gr-iio.") | ||||
| add_feature_info(ENABLE_AD9361 ENABLE_AD9361 "Enables Ad9361_Fpga_Signal_Source for devices with the AD9361 chipset. Requires libiio and libad9361-dev.") | ||||
| add_feature_info(ENABLE_FPGA_MAX2771_EVKIT ENABLE_FPGA_MAX2771_EVKIT "Enables MAX2771_evkit_fpga_signal_source for devices with the MAX2771 chipset.") | ||||
| add_feature_info(ENABLE_MAX2771 ENABLE_MAX2771 "Enables FPGA_MAX2771_EVKIT_Signal_Source for devices with the MAX2771 chipset. Requires the spidev driver") | ||||
| add_feature_info(ENABLE_DMA_PROXY ENABLE_DMA_PROXY "Enables DMA Signal_Source. Requires the DMA Proxy driver") | ||||
| add_feature_info(ENABLE_AD936X_SDR ENABLE_AD936X_SDR "Enables Ad936x_Iio_Signal_Source to access AD936X front-ends using libiio. Requires libiio and libad9361-dev.") | ||||
| add_feature_info(ENABLE_RAW_UDP ENABLE_RAW_UDP "Enables Custom_UDP_Signal_Source for custom UDP packet sample source. Requires libpcap.") | ||||
| add_feature_info(ENABLE_FLEXIBAND ENABLE_FLEXIBAND "Enables Flexiband_Signal_Source for using Teleorbit's Flexiband RF front-end. Requires gr-teleorbit.") | ||||
|   | ||||
| @@ -41,7 +41,7 @@ if(ENABLE_AD9361) | ||||
|     list(APPEND OPT_DRIVER_HEADERS ad9361_fpga_signal_source.h) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_FPGA_MAX2771_EVKIT) | ||||
| if(ENABLE_MAX2771) | ||||
|     ############################################### | ||||
|     # MAX2771 EVKIT DIRECT TO FPGA Hardware | ||||
|     ############################################### | ||||
| @@ -49,7 +49,7 @@ if(ENABLE_FPGA_MAX2771_EVKIT) | ||||
|     list(APPEND OPT_DRIVER_HEADERS fpga_max2771_evkit_signal_source.h) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_FPGA) | ||||
| if(ENABLE_DMA_PROXY) | ||||
|     ############################################### | ||||
|     # FPGA DMA source | ||||
|     ############################################### | ||||
|   | ||||
| @@ -12,7 +12,7 @@ if(ENABLE_FMCOMMS2 OR ENABLE_AD9361) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_SOURCES} ad9361_manager.h) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_FPGA_MAX2771_EVKIT) | ||||
| if(ENABLE_MAX2771) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_SOURCES ${OPT_SIGNAL_SOURCE_LIB_SOURCES} fpga_spidev.cc) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_SOURCES} fpga_spidev.h) | ||||
| endif() | ||||
| @@ -22,11 +22,14 @@ if(ENABLE_FPGA) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_HEADERS} fpga_switch.h) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_SOURCES ${OPT_SIGNAL_SOURCE_LIB_SOURCES} fpga_dynamic_bit_selection.cc) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_HEADERS} fpga_dynamic_bit_selection.h) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_DMA_PROXY) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_SOURCES ${OPT_SIGNAL_SOURCE_LIB_SOURCES} fpga_dma-proxy.cc) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_HEADERS} fpga_dma-proxy.h) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_AD9361 OR ENABLE_FPGA_MAX2771_EVKIT) | ||||
| if(ENABLE_AD9361 OR ENABLE_MAX2771) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_SOURCES ${OPT_SIGNAL_SOURCE_LIB_SOURCES} fpga_buffer_monitor.cc) | ||||
|     set(OPT_SIGNAL_SOURCE_LIB_HEADERS ${OPT_SIGNAL_SOURCE_LIB_HEADERS} fpga_buffer_monitor.h) | ||||
| endif() | ||||
|   | ||||
| @@ -98,8 +98,12 @@ if(ENABLE_AD9361) | ||||
|     target_compile_definitions(core_receiver PRIVATE -DAD9361_DRIVER=1) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_FPGA_MAX2771_EVKIT) | ||||
|     target_compile_definitions(core_receiver PRIVATE -DFPGA_MAX2771_EVKIT_DRIVER=1) | ||||
| if(ENABLE_MAX2771) | ||||
|     target_compile_definitions(core_receiver PRIVATE -DMAX2771_DRIVER=1) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_DMA_PROXY) | ||||
|     target_compile_definitions(core_receiver PRIVATE -DDMA_PROXY_DRIVER=1) | ||||
| endif() | ||||
|  | ||||
| if(ENABLE_OSMOSDR) | ||||
|   | ||||
| @@ -128,7 +128,6 @@ | ||||
| #endif | ||||
|  | ||||
| #if ENABLE_FPGA | ||||
| #include "fpga_dma_signal_source.h" | ||||
| #include "galileo_e1_dll_pll_veml_tracking_fpga.h" | ||||
| #include "galileo_e1_pcps_ambiguous_acquisition_fpga.h" | ||||
| #include "galileo_e5a_dll_pll_tracking_fpga.h" | ||||
| @@ -171,10 +170,14 @@ | ||||
| #include "ad9361_fpga_signal_source.h" | ||||
| #endif | ||||
|  | ||||
| #if FPGA_MAX2771_EVKIT_DRIVER | ||||
| #if MAX2771_DRIVER | ||||
| #include "fpga_max2771_evkit_signal_source.h" | ||||
| #endif | ||||
|  | ||||
| #if DMA_PROXY_DRIVER | ||||
| #include "fpga_dma_signal_source.h" | ||||
| #endif | ||||
|  | ||||
| #if LIMESDR_DRIVER | ||||
| #include "limesdr_signal_source.h" | ||||
| #endif | ||||
| @@ -825,7 +828,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock( | ||||
|                 } | ||||
| #endif | ||||
|  | ||||
| #if ENABLE_FPGA and FPGA_MAX2771_EVKIT_DRIVER | ||||
| #if ENABLE_FPGA and MAX2771_DRIVER | ||||
|             else if (implementation == "FPGA_MAX2771_EVKIT_Signal_Source") | ||||
|                 { | ||||
|                     std::unique_ptr<GNSSBlockInterface> block_ = std::make_unique<FPGAMAX2771EVKITSignalSource>(configuration, role, in_streams, | ||||
| @@ -834,7 +837,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock( | ||||
|                 } | ||||
| #endif | ||||
|  | ||||
| #if ENABLE_FPGA | ||||
| #if ENABLE_FPGA and DMA_PROXY_DRIVER | ||||
|             else if (implementation == "FPGA_DMA_Signal_Source") | ||||
|                 { | ||||
|                     std::unique_ptr<GNSSBlockInterface> block_ = std::make_unique<FPGADMASignalSource>(configuration, role, in_streams, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Marc Majoral
					Marc Majoral