From cb821e4602a6c4014080e8ba86ca9543d809179c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 27 Mar 2019 10:44:26 -0700 Subject: [PATCH] CMake: Separate run-from-RAM and DFU binaries. PortaPack uses the run-from-RAM build for HackRF mode, but doesn't want the serial number to show up as "RunningFromRAM". --- firmware/hackrf-common.cmake | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/firmware/hackrf-common.cmake b/firmware/hackrf-common.cmake index 15d9da5e..6e040811 100644 --- a/firmware/hackrf-common.cmake +++ b/firmware/hackrf-common.cmake @@ -82,7 +82,7 @@ SET(HACKRF_OPTS "-D${BOARD} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STR SET(LDSCRIPT_M4 "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld -Tlibopencm3_lpc43xx_rom_to_ram.ld -T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M4_M0_image_from_text.ld") -SET(LDSCRIPT_M4_DFU "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld -Tlibopencm3_lpc43xx.ld -T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M4_M0_image_from_text.ld") +SET(LDSCRIPT_M4_RAM "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld -Tlibopencm3_lpc43xx.ld -T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M4_M0_image_from_text.ld") SET(LDSCRIPT_M0 "-T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M0_memory.ld -Tlibopencm3_lpc43xx_m0.ld") @@ -103,8 +103,8 @@ SET(CFLAGS_M4 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4") SET(CXXFLAGS_M4 "-std=gnu++0x ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4") SET(LDFLAGS_M4 "${LDFLAGS_COMMON} ${CPUFLAGS_M4} ${LDSCRIPT_M4} -Xlinker -Map=m4.map") -SET(CFLAGS_M4_DFU "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4 -DDFU_MODE") -SET(LDFLAGS_M4_DFU "${LDFLAGS_COMMON} ${CPUFLAGS_M4} ${LDSCRIPT_M4_DFU} -Xlinker -Map=m4.map") +SET(CFLAGS_M4_RAM "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4") +SET(LDFLAGS_M4_RAM "${LDFLAGS_COMMON} ${CPUFLAGS_M4} ${LDSCRIPT_M4_RAM} -Xlinker -Map=m4.map") set(BUILD_SHARED_LIBS OFF) @@ -201,10 +201,34 @@ macro(DeclareTargets) COMMAND ${CMAKE_OBJCOPY} -Obinary ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin ) + # RAM - using a differnet LD script to run directly from RAM + # TODO: Duplicated from DFU code, below, except without -DDFU_MODE. Extract to shared code somehow. + add_library(${PROJECT_NAME}_ram_objects OBJECT ${SRC_M4} m0_bin.s) + set_target_properties(${PROJECT_NAME}_ram_objects PROPERTIES COMPILE_FLAGS "${CFLAGS_M4_RAM}") + add_dependencies(${PROJECT_NAME}_ram_objects ${PROJECT_NAME}_m0.bin) + add_executable(${PROJECT_NAME}_ram.elf $) + add_dependencies(${PROJECT_NAME}_ram.elf libopencm3_${PROJECT_NAME}) + + target_link_libraries( + ${PROJECT_NAME}_ram.elf + c + nosys + opencm3_lpc43xx + m + ) + + set_target_properties(${PROJECT_NAME}_ram.elf PROPERTIES LINK_FLAGS "${LDFLAGS_M4_RAM}") + + add_custom_target( + ${PROJECT_NAME}_ram.bin + DEPENDS ${PROJECT_NAME}_ram.elf + COMMAND ${CMAKE_OBJCOPY} -Obinary ${PROJECT_NAME}_ram.elf ${PROJECT_NAME}_ram.bin + ) + # DFU - using a differnet LD script to run directly from RAM # Object files to be linked for DFU flash versions add_library(${PROJECT_NAME}_dfu_objects OBJECT ${SRC_M4} m0_bin.s) - set_target_properties(${PROJECT_NAME}_dfu_objects PROPERTIES COMPILE_FLAGS "${CFLAGS_M4_DFU}") + set_target_properties(${PROJECT_NAME}_dfu_objects PROPERTIES COMPILE_FLAGS "${CFLAGS_M4_RAM} -DDFU_MODE") add_dependencies(${PROJECT_NAME}_dfu_objects ${PROJECT_NAME}_m0.bin) add_executable(${PROJECT_NAME}_dfu.elf $) add_dependencies(${PROJECT_NAME}_dfu.elf libopencm3_${PROJECT_NAME}) @@ -217,7 +241,7 @@ macro(DeclareTargets) m ) - set_target_properties(${PROJECT_NAME}_dfu.elf PROPERTIES LINK_FLAGS "${LDFLAGS_M4_DFU}") + set_target_properties(${PROJECT_NAME}_dfu.elf PROPERTIES LINK_FLAGS "${LDFLAGS_M4_RAM}") add_custom_target( ${PROJECT_NAME}_dfu.bin