Files
mayhem-firmware/firmware/chibios/os/ports/GCC/ARMCMx/rules.cmake
T
stafur 395e20d17b Next praline clean up (add SW: RSSI for hackrf pro praline) (#3091)
* Cleaned up #ifndef PRALINE and updated logic to being with #ifdef PRALINE entries where possible to make logic flow for PRALINE code execution pipeline clearer. Cleaned up compiletime warnings for PRALINE related codebase updates.

* Addressed comments provided by copilot during PR review. Combed through frequency definitions for consistency between PLL A and PLL B register definitions for CLKs 0-7. Ensured CLK3/LK6 <- SMA PORTs and CLK7 <- not utiliized are disabled during core development phase to support root cause analysis of any spectral artifacts. Updated MCU frequency to 40MHz to ensure audio harmonics are outside FM radio band range (< 80 MHz, >120MHz) and added comments clarifying choice of 40 over 10 MHz for potential future root cause analysis in other bands where audio may be expected as needed. Added CLK6 and CLK7 to Clocks Status View Debug display. Moved CLK defintions and PLL instantiations for components that are most RF sensitive to PLL A. Left others in PLL B. That is move FPGA CLK1 to PLL B, while moving CLK2, CLK4, and CLK5 to PLL A.

* Cleaned up PLL A and B XTAL reference checks relative to 800 MHz.

* Encapsulated HackRF Pro Praline debug and status vies into a single Pro Debug submenu as part of clean up.

* Fixed BLE RX Out of Memory error. Updated LPC43xx ld scripts to accouint for additional HackRF Pro praline memory.

* Addressed copilot comments for ble_rx_app by adding recent_entries_view.set_dirty. Updated ble_rx_app for easier use with heap limit set to one less than recent entries max limit.

* Addressed copilot comments by updating comment clarity in source files. Updated ui_debug to allow for return reference if set for PRO debug menu item.

* Improved readability of intialization parameters for the FPGA registers, and addressed 20Mhz nulls by initializing DC Notch width with standard setting, and DC Adaptiation rate with a balanced setting.

* Ran format-code.sh

* Added option to allow for user to set number if entries in recent list. Default is set to a relatively stable 32.

* Removed #ifdef PRALINE pragmas from ble_rx_app such that HackRF One can also use the updated UI widget to allow for user to set number of entries in recent list.

* Ran format-code.sh

* Improved RSSI for praline. Values are now being counted correctly by statistics methods after selecting ADC = 0 0 for RSSI. This was different than for the hackrf one which uses ADC = 1.

* Implemented SW RSSI calculation since HW RSSI not currently available in hackrf pro (praline) via fpga pass through. Calibrated RSSI power sensistivity to mid level signal intensitities.

* In preparation for WIP allocated full 128k to M4 limiting heap for M0 to 0k, and leabing it only with 64k from bank 0. That is, bank1 and bank2 are fully allocated to M4. Cleaned up #ifdef PRALINE conditionals such taht max2837/39 are in #else conditionals, as well as continuing to clean up hackrf_r9 booleans by placing them within #else conditionals.

* fix typo

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Addressed co-pilot comments. Clarified use of 25 recent samples in ble app for stability, udpated comments to reflect use of avg power over pwak pwer detection, improved safety of sample packing while relying on intrinstics for execute the implementation in a single machine instruction (PKHBT) for computational and memory efficiency.
2026-03-17 08:13:09 +01:00

151 lines
5.3 KiB
CMake

# ARM Cortex-Mx common makefile scripts and rules.
##############################################################################
# Processing options coming from the upper Makefile.
#
# Compiler options
set(OPT ${USE_OPT})
set(COPT ${USE_COPT})
set(CPPOPT ${USE_CPPOPT})
# Garbage collection
if(USE_LINK_GC STREQUAL "yes")
set(OPT "${OPT} -ffunction-sections -fdata-sections -fno-common")
set(LDOPT ",--gc-sections")
else()
set(LDOPT)
endif()
# Linker extra options
if(DEFINED USE_LDOPT)
set(LDOPT "${LDOPT},${USE_LDOPT}")
endif()
# Link time optimizations
if(USE_LTO STREQUAL "yes")
set(OPT "${OPT} -flto")
endif()
# FPU-related options
if(NOT DEFINED USE_FPU)
set(USE_FPU no)
endif()
if(NOT USE_FPU STREQUAL "no")
set(OPT "${OPT} -mfloat-abi=${USE_FPU} -mfpu=fpv4-sp-d16 -fsingle-precision-constant")
set(DDEFS ${DDEFS} -DCORTEX_USE_FPU=TRUE)
set(DADEFS ${DADEFS} -DCORTEX_USE_FPU=TRUE)
else()
set(DDEFS ${DDEFS} -DCORTEX_USE_FPU=FALSE)
set(DADEFS ${DADEFS} -DCORTEX_USE_FPU=FALSE)
endif()
# Source files groups and paths
if(USE_THUMB STREQUAL "yes")
set(TCSRC ${TCSRC} ${CSRC})
set(TCPPSRC ${TCPPSRC} ${CPPSRC})
else()
set(ACSRC ${ACSRC} ${CSRC})
set(ACPPSRC ${ACPPSRC} ${CPPSRC})
endif()
set(ASRC ${ACSRC} ${ACPPSRC})
set(TSRC ${TCSRC} ${TCPPSRC})
# Paths
set(IINCDIR ${INCDIR} ${DINCDIR} ${UINCDIR})
set(LLIBDIR ${DLIBDIR} ${ULIBDIR})
# Macros
set(DEFS ${DDEFS} ${UDEFS})
set(ADEFS ${DADEFS} ${UADEFS})
# Libs
set(LIBS ${DLIBS} ${ULIBS})
# Various settings
set(MCFLAGS -mcpu=${MCU})
set(ODFLAGS "-x --syms")
set(ASFLAGS "${MCFLAGS} ${ADEFS}")
set(ASXFLAGS "${MCFLAGS} ${ADEFS}")
set(CFLAGS "${MCFLAGS} ${OPT} ${COPT} ${CWARN}")
set(CPPFLAGS "${MCFLAGS} ${OPT} ${CPPOPT} ${CPPWARN}")
set(LDFLAGS "-nostartfiles -Wl,--library-path=${RULESPATH},--script=${LDSCRIPT}${LDOPT}")
# Thumb interwork enabled only if needed because it kills performance.
if(DEFINED TSRC)
set(CFLAGS "${CFLAGS}")
set(CPPFLAGS "${CPPFLAGS}")
set(ASFLAGS "${ASFLAGS}")
set(DEFS ${DEFS} -DTHUMB_PRESENT)
set(ADEFS ${ADEFS} -DTHUMB_PRESENT)
if(DEFINED ASRC)
# Mixed ARM and THUMB mode.
set(CFLAGS "${CFLAGS} -mthumb-interwork")
set(CPPFLAGS "${CPPFLAGS} -mthumb-interwork")
set(ASFLAGS "${ASFLAGS} -mthumb-interwork")
set(LDFLAGS "${LDFLAGS} -mthumb-interwork")
else()
# Pure THUMB mode, THUMB C code cannot be called by ARM asm code directly.
set(CFLAGS "${CFLAGS} -mno-thumb-interwork")
set(CPPFLAGS "${CPPFLAGS} -mno-thumb-interwork")
set(ASFLAGS "${ASFLAGS} -mno-thumb-interwork -mthumb")
set(LDFLAGS "${LDFLAGS} -mno-thumb-interwork -mthumb")
set(DEFS ${DEFS} -DTHUMB_NO_INTERWORKING)
set(ADEFS ${ADEFS} -DTHUMB_NO_INTERWORKING)
endif()
else()
# Pure ARM mode
set(CFLAGS "${CFLAGS} -mno-thumb-interwork")
set(CPPFLAGS "${CPPFLAGS} -mno-thumb-interwork")
set(ASFLAGS "${ASFLAGS} -mno-thumb-interwork")
set(LDFLAGS "${LDFLAGS} -mno-thumb-interwork")
endif()
set(CMAKE_C_FLAGS "${CFLAGS} ${TOPT}")
set(CMAKE_CXX_FLAGS "${CPPFLAGS} ${TOPT}")
set(CMAKE_AS_FLAGS "${ASFLAGS} ${TOPT}")
if(BOARD STREQUAL "PRALINE")
# Praline (LPC4330) - Expanded Memory
# AHB SRAM: 32KB + 32KB = 64KB
# Left M0_RAM_SIZE as 64k and USB_RAM_SIZE as 32k for
# backwards consistenct with hackrf one setup.
# Recommend revisit by devs.
# Local SRAM: 128KB (Bank 1) + 72KB (Bank 2)
# Bank 1 can also be allocated as 96KB for M4, and 32KB for M0
set(M0_RAM_SIZE "64k") # AHB SRAM Bank 0 for M0 (stacks, data, bss)
set(M0_LOCAL_HEAP_SIZE "0") # No Local SRAM, could be 32k heap for additional 16-bit IQ
set(M0_LOCAL_HEAP_ORIGIN "0x10020000") # 0x10018000 if allocating 32k heap for M0 after M4's 96KB
set(M4_RAM_SIZE "128k") # Local SRAM Bank 1 Fully allocated to M4 (HackRF One is 96k)
set(M4_FLASH_SIZE "72k") # Local SRAM Bank 2
set(USB_RAM_SIZE "32k") # AHB SRAM shared with M0
set(FLASH_SIZE "4M")
else()
# HackRF One (LPC4320) - Standard Memory
# AHB SRAM: 32KB + 16KB = 48KB (split between M0 and USB)
# Left M0_RAM_SIZE as 64k and USB_RAM_SIZE as 32k to keep
# original hackrf one settings intact.
# Recommend revisit by devs.
# Local SRAM: 96KB (Bank 1) + 40KB (Bank 2)
set(M0_RAM_SIZE "64k") # Standard AHB SRAM for M0
set(M0_LOCAL_HEAP_SIZE "0k") # No local heap available
set(M0_LOCAL_HEAP_ORIGIN "0") # Not used
set(M4_RAM_SIZE "96k") # Standard Local SRAM Bank 1
set(M4_FLASH_SIZE "32752") # Standard Local SRAM Bank 2 (~32KB)
set(USB_RAM_SIZE "32k") # Standard 32k/32k split for AHB Bank 1
set(FLASH_SIZE "1M") # Standard SPI Flash limit
endif()
# Apply all symbols to the linker flags in one command
# Build linker flags
set(CMAKE_EXE_LINKER_FLAGS "${LDFLAGS} \
-Wl,--defsym=LD_RAM_SIZE=${M0_RAM_SIZE} \
-Wl,--defsym=LD_M0_LOCAL_HEAP_SIZE=${M0_LOCAL_HEAP_SIZE} \
-Wl,--defsym=LD_M0_LOCAL_HEAP_ORIGIN=${M0_LOCAL_HEAP_ORIGIN} \
-Wl,--defsym=LD_M4_RAM_LEN=${M4_RAM_SIZE} \
-Wl,--defsym=LD_M4_FLASH_LEN=${M4_FLASH_SIZE} \
-Wl,--defsym=LD_USB_RAM_LEN=${USB_RAM_SIZE} \
-Wl,--defsym=LD_FLASH_SIZE=${FLASH_SIZE}"
)