Add "hardware_defs" target to dump hardware defines from hal.h per target Fixed hal.h definitions for switches & ADC inputs Tools to generate hardware definitions from current hal.h generator: add support for EXTx and analog switches WiP Add generated header to hardware_defs target Add support for ADC input direction and index per GPIO port Incredible: it compiles Removed StdPeriph ADC driver Works on QX7 Works on TX16S (VBat missing) Switch driver using generated switches for stm32 targets Switch driver with generated switches for simu Use switch names from switch driver Fixed single conversion handling Fixed horus VBat reading Added switch name Fix warnings about bitfield offsets and GCC 4.4 This is caused by bitfields that cross type boundaries. In this particular case, it happens as the bitfield is not defined the same in `rtc_backup.cpp`. Switches has already been moved to generic driver Jitter measurement for each sample, not just for oversampled values Moved periph clock init to the ADC driver ADC & GPIOs. Add switchInit() to init pins Fix NV14 CMake Fix taranis target Fix NV14 (again) Model audio files: use new interface for switch index Fix X9-lite Fix simu headers Fix getSwitchName() Add support for ADC switches Fix switch warning YAML Test only switches which are defined Conversions tests for QX7 only on QX7 Fix X12S Fix function switch names Enable ADC periph clock before initialising channels NV14: offset inputs for the sticks & fix switches WiP: get rid of VSRCRAW and some more Simu shall use normal ADC driver fix x7 fix nv14 Fix 9x nav fix 212x64 fix xlite fix x9e fix simu lib fix unit tests fix x7 tests PWM stick values should be written directly into adcValues ... just like FlySky sticks. fix x12s fix nv14 Add some support for SPI ADC (only unit tests) Remove `jq` usage fix generate_yaml.py for newer libclang fix pot config fix stick names Some YAML generator improvements Max 16 Pots on COLORLCD Fix some source names Use 10 bits for switches to prevent overflow Removed horus constants for switches & ADC inputs Fix unit tests Fix curve edit Fix libsimulator Fix function switches (tpro) Refine ADC & analog API Moved hardware definitions scripts and templates into own dir cleanup API refine Fix unit tests Mixer: apply calibration only on required inputs Place ADC switches after all other ADC inputs Fix X12S Remove useless TR_POTS_VSRCRAW, TR_SW_VSRCRAW, and TR_VSRCRAW Cleanup redundant generated YAML parsers Fixes Boxer rebase Add boxer to generate-hw-defs.sh Obsolete LUA exports Add boxer ADC_DIRECTION Split generate_hw_defs.py into multiple files Some cleanup (+ LUA switches) Fix AXIS definitions Fixed translation strings declarations Some rebase fixes Remove some useless StdPeriph drivers fix: set pin mode to reset state on usart deinit fix: use canonical names for calibration data fix: ADC driver does not care about unconfigured inputs fix X12S ADC Add support for ADC conversion chaining Better X12S ADC implem Moved X12S ADC driver to HAL/LL Improve ADC driver separation Fixed taranis & nv14 Moved PWM gimbals to HAL/LL Removed useless TR_EXTRA_VSRCRAW Fixed include guards Small fixes Renamed control inputs Moved internal and external module pulse driver def to boards Move more things to the generic_stm32 board Remove STR_VMIXTRIMS Added analog labels Generate main control names Misuse labels / short labels for main controls Backward compatibility: sliders and legacy names New keys driver Let's get rid of StdPeriph headers in simu Add jinja2 to CI workflows Use `grep` instead of `sed` chore: add python jinja2 oto msys setup script Removed more static definitions and use dynamic ones instead Fixes X9E Fix x7 nav too 212 switch display Fix default sliders Removed NUM_STICKS 212 switch display working nicely Surface radio 'stick' replacements fix: switch, trim & rotary pin init Remove old key drivers Removed VKEYS Removed ETX_FOURCC Fixed SURFACE_NAME Removed TR_VSWITCHES & TR_TRIMS_SWITCHES Fix xpot switches Store calibrated analogs in physical order Use getSourceString in drawSource Implement missing YAML read/write Fix isSourceAvailableInInputs() Fix isSourceAvailable() Some surface fixes Fix CLI debug Ported colour UI of analog diagnostics to new ADC API Small fixes Better input mapping Minor tpro fixes Fix trims available Remove TX mode choice on surface radio Rename surface controls Channel order alignement Fix throttle warning Fix checkTrims() Fix pot config casting issue Fix IS_SWITCH_FS() Fixed input mapping Fix fswitch auto-switch Fixed storing / reading function switches in YAML Fix enableVBatBridge() / disableVBatBridge() Fix interesting mode conversion Fix sources issues Fix special funnction list Proper function switch handling 128 GUI improvements Fix compilation Boxer cosmetics 128 hardware screen cosmetic Fix TX12 switches More switches fixes Simplify CPU type handling Fix flash size Fixed page-up / page-down in libopenui
613 lines
17 KiB
CMake
613 lines
17 KiB
CMake
include(CMakeForceCompiler)
|
|
include(Bitmaps)
|
|
|
|
set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S NV14)
|
|
set(RADIO_LANGUAGES CN CZ DA DE EN ES FI FR HE IT JP PT SK SE PL HU NL TW)
|
|
set(TTS_LANGUAGES CN CZ DA DE EN ES FR HE IT JP PT SK SE PL HU NL RU)
|
|
|
|
set(PCB "X9D+" CACHE STRING "Radio type, one of: ${PCB_TYPES}")
|
|
set_property(CACHE PCB PROPERTY STRINGS ${PCB_TYPES})
|
|
set(TRANSLATIONS "EN" CACHE STRING "Radio language, one of: ${RADIO_LANGUAGES}")
|
|
set_property(CACHE TRANSLATIONS PROPERTY STRINGS ${RADIO_LANGUAGES})
|
|
set(SPLASH "DEFAULT" CACHE STRING "Splash (DEFAULT/OFF/FRSKY)")
|
|
set_property(CACHE SPLASH PROPERTY STRINGS DEFAULT OFF FRSKY)
|
|
set(PPM_UNIT "PERCENT_PREC0" CACHE STRING "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)")
|
|
set_property(CACHE PPM_UNIT PROPERTY STRINGS US PERCENT_PREC1 PERCENT_PREC0)
|
|
set(DEFAULT_MODE "" CACHE STRING "Default sticks mode")
|
|
set(POPUP_LEVEL 2 CACHE STRING "Popup level")
|
|
|
|
option(HELI "Heli menu" ON)
|
|
option(FLIGHT_MODES "Flight Modes" ON)
|
|
option(CURVES "Curves" ON)
|
|
option(GVARS "Global variables" ON)
|
|
option(GUI "GUI enabled" ON)
|
|
option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" ON)
|
|
option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF)
|
|
option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON)
|
|
option(DANGEROUS_MODULE_FUNCTIONS "Dangerous module functions (RangeCheck / Bind / Module OFF, etc.) available" OFF)
|
|
option(FAI "Competition mode (no telemetry)" OFF)
|
|
option(AUTOSOURCE "Automatic source detection in menus" ON)
|
|
option(AUTOSWITCH "Automatic switch detection in menus" ON)
|
|
option(SEMIHOSTING "Enable debugger semihosting" OFF)
|
|
option(JITTER_MEASURE "Enable ADC jitter measurement" OFF)
|
|
option(WATCHDOG "Enable hardware Watchdog" ON)
|
|
option(ASTERISK "Enable asterisk icon (test only firmware)" OFF)
|
|
if(SDL2_FOUND)
|
|
option(SIMU_AUDIO "Enable simulator audio." ON)
|
|
endif()
|
|
option(LUA "Enable LUA support" ON)
|
|
option(LUA_MIXER "Enable LUA mixer/model scripts support" OFF)
|
|
option(SIMU_DISKIO "Enable disk IO simulation in simulator. Simulator will use FatFs module and simulated IO layer that uses \"./sdcard.image\" file as image of SD card. This file must contain whole SD card from first to last sector" OFF)
|
|
option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON)
|
|
option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF)
|
|
option(RAS "RAS (SWR) enabled" ON)
|
|
option(TEMPLATES "Model templates menu" OFF)
|
|
option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON)
|
|
option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF)
|
|
option(DEBUG_SEGGER_RTT "Debug output to Segger RTT" OFF)
|
|
option(DEBUG_WINDOWS "Turn on windows traces" OFF)
|
|
option(DEBUG_YAML "Turn on YAML traces" OFF)
|
|
option(DEBUG_LABELS "Turn on Labels traces" OFF)
|
|
option(NANO "Use nano newlib and binalloc")
|
|
option(TEST_BUILD_WARNING "Warn this is a test build" OFF)
|
|
option(MODULE_PROTOCOL_FCC "Add support for FCC modules" ON)
|
|
option(MODULE_PROTOCOL_LBT "Add support for EU/LBT modules" ON)
|
|
option(MODULE_PROTOCOL_D8 "Add support for D8 modules" ON)
|
|
option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF)
|
|
option(TBS_RELEASE "Used to build TBS released firmware" OFF)
|
|
option(IMRC_RELEASE "Used to build IMRC released firmware" OFF)
|
|
option(HARDWARE_TRAINER_MULTI "Allow multi trainer" OFF)
|
|
option(BOOTLOADER "Include Bootloader" ON)
|
|
option(FWDRIVE "Attach also firmware drive with USB" OFF)
|
|
|
|
if(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)
|
|
option(USBJ_EX "Enable USB Joystick Extension" OFF)
|
|
else()
|
|
option(USBJ_EX "Enable USB Joystick Extension" ON)
|
|
endif()
|
|
|
|
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
|
|
set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).")
|
|
set(FIRMWARE_C_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c compiler (note: CMAKE_C_FLAGS_DEBUG is ignored for firmware/bootloader).")
|
|
set(FIRMWARE_CXX_FLAGS "" CACHE STRING "Additional flags for firmware target c++ compiler (note: all CMAKE_CXX_FLAGS[_*] are ignored for firmware/bootloader).")
|
|
set(FIRMWARE_CXX_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c++ compiler (note: CMAKE_CXX_FLAGS_DEBUG is ignored for firmware/bootloader).")
|
|
|
|
set(THIRDPARTY_DIR thirdparty)
|
|
set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src)
|
|
set(RTOS_DIR ${THIRDPARTY_DIR}/FreeRTOS)
|
|
set(FATFS_DIR ${THIRDPARTY_DIR}/FatFs)
|
|
set(RADIO_BIN_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
configure_file(stamp.h.in stamp.h @ONLY)
|
|
|
|
set(EEPROM_VARIANT 0)
|
|
set(GVARS_VARIANT 1)
|
|
set(FRSKY_VARIANT 2)
|
|
set(3POS_VARIANT 4)
|
|
|
|
set(FATFS_SRC
|
|
${FATFS_DIR}/ff.c
|
|
${FATFS_DIR}/ffunicode.c
|
|
${FATFS_DIR}/fattime.c
|
|
)
|
|
|
|
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
|
|
include(targets/horus/CMakeLists.txt)
|
|
elseif(PCB STREQUAL NV14)
|
|
include(targets/nv14/CMakeLists.txt)
|
|
elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7 OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES)
|
|
include(targets/taranis/CMakeLists.txt)
|
|
else()
|
|
message(FATAL_ERROR "Unknown PCB '${PCB}'")
|
|
endif()
|
|
|
|
set(HW_DESC_JSON ${FLAVOUR}.json)
|
|
AddHardwareDefTarget(${HW_DESC_JSON})
|
|
|
|
# enable generating JSON definition separately for debugging
|
|
add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON} ${HW_DESC_JSON}.h)
|
|
|
|
include(hal/CMakeLists.txt)
|
|
|
|
add_subdirectory(bitmaps)
|
|
add_subdirectory(fonts)
|
|
|
|
if(CPU_TYPE STREQUAL STM32F4)
|
|
include(targets/common/arm/stm32/f4/CMakeLists.txt)
|
|
endif()
|
|
|
|
if(CPU_TYPE STREQUAL STM32F2)
|
|
include(targets/common/arm/stm32/f2/CMakeLists.txt)
|
|
endif()
|
|
|
|
if(CPU_FAMILY STREQUAL STM32)
|
|
include(targets/common/arm/stm32/CMakeLists.txt)
|
|
include(boards/generic_stm32/CMakeLists.txt)
|
|
endif()
|
|
|
|
if(ARCH STREQUAL ARM)
|
|
include(targets/common/arm/CMakeLists.txt)
|
|
endif()
|
|
|
|
include_directories(targets/${TARGET_DIR} ${THIRDPARTY_DIR})
|
|
|
|
foreach(LANGUAGE ${RADIO_LANGUAGES})
|
|
if(TRANSLATIONS STREQUAL ${LANGUAGE})
|
|
add_definitions(-DTRANSLATIONS_${LANGUAGE} -DTRANSLATIONS="${LANGUAGE}")
|
|
endif()
|
|
endforeach()
|
|
|
|
set(RTL_LANGUAGES HE)
|
|
if(TRANSLATIONS IN_LIST RTL_LANGUAGES)
|
|
add_definitions(-DTRANSLATION_IS_RTL=1)
|
|
else()
|
|
add_definitions(-DTRANSLATION_IS_RTL=0)
|
|
endif()
|
|
|
|
set(SRC ${SRC} debug.cpp)
|
|
|
|
add_definitions(-DFLAVOUR="${FLAVOUR}")
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/bitmaps/${BITMAPS_DIR})
|
|
|
|
include(gui/CMakeLists.txt)
|
|
|
|
# TODO: move to storage/
|
|
set(SRC ${SRC} storage/storage_common.cpp)
|
|
set(SRC ${SRC} storage/sdcard_common.cpp)
|
|
set(SRC ${SRC} storage/sdcard_yaml.cpp)
|
|
add_definitions(-DSDCARD_YAML)
|
|
include(storage/yaml/CMakeLists.txt)
|
|
if(STORAGE_MODELSLIST)
|
|
set(SRC ${SRC} storage/modelslist.cpp)
|
|
add_definitions(-DSTORAGE_MODELSLIST)
|
|
endif()
|
|
|
|
if(RTC_BACKUP_RAM)
|
|
add_definitions(-DRTC_BACKUP_RAM)
|
|
|
|
GenerateDataCopy(datastructs_private.h datacopy.inc)
|
|
|
|
set(SRC ${SRC}
|
|
storage/rlc.cpp
|
|
storage/rtc_backup.cpp
|
|
${CMAKE_CURRENT_BINARY_DIR}/datacopy.inc
|
|
)
|
|
|
|
# Add custom target for debugging
|
|
add_custom_target(datacopy DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/datacopy.inc)
|
|
endif()
|
|
|
|
if(LUA)
|
|
include(lua/CMakeLists.txt)
|
|
endif()
|
|
|
|
if (LUA_MIXER AND NOT LUA)
|
|
message(FATAL_ERROR "LUA_MIXER requires LUA!!")
|
|
endif()
|
|
|
|
if(HELI)
|
|
add_definitions(-DHELI)
|
|
endif()
|
|
|
|
if(FLIGHT_MODES)
|
|
add_definitions(-DFLIGHT_MODES)
|
|
endif()
|
|
|
|
if(CURVES)
|
|
add_definitions(-DCURVES)
|
|
set(SRC ${SRC} curves.cpp)
|
|
endif()
|
|
|
|
if(GVARS)
|
|
add_definitions(-DGVARS)
|
|
set(SRC ${SRC} gvars.cpp)
|
|
math(EXPR EEPROM_VARIANT ${EEPROM_VARIANT}+${GVARS_VARIANT})
|
|
endif()
|
|
|
|
if(FAI STREQUAL YES)
|
|
add_definitions(-DFAI)
|
|
elseif(FAI STREQUAL CHOICE)
|
|
add_definitions(-DFAI_CHOICE)
|
|
endif()
|
|
|
|
if(NOT RAS)
|
|
add_definitions(-DNO_RAS)
|
|
endif()
|
|
|
|
if(FAS_PROTOTYPE)
|
|
add_definitions(-DFAS_PROTOTYPE)
|
|
endif()
|
|
|
|
if(AUTOSOURCE)
|
|
add_definitions(-DAUTOSOURCE)
|
|
endif()
|
|
|
|
if(AUTOSWITCH)
|
|
add_definitions(-DAUTOSWITCH)
|
|
endif()
|
|
|
|
if(JITTER_MEASURE)
|
|
add_definitions(-DJITTER_MEASURE)
|
|
endif()
|
|
|
|
if(ASTERISK)
|
|
add_definitions(-DASTERISK)
|
|
endif()
|
|
|
|
if(WATCHDOG)
|
|
add_definitions(-DWATCHDOG)
|
|
endif()
|
|
|
|
if(SIMU_AUDIO)
|
|
add_definitions(-DSIMU_AUDIO)
|
|
endif()
|
|
|
|
if(SIMU_DISKIO)
|
|
add_definitions(-DSIMU_DISKIO)
|
|
endif()
|
|
|
|
if(SDCARD)
|
|
add_definitions(-DSDCARD)
|
|
include_directories(${FATFS_DIR} ${FATFS_DIR}/option)
|
|
set(SRC ${SRC} sdcard.cpp rtc.cpp logs.cpp thirdparty/libopenui/src/libopenui_file.cpp)
|
|
set(FIRMWARE_SRC ${FIRMWARE_SRC} ${FATFS_SRC})
|
|
endif()
|
|
|
|
if(SHUTDOWN_CONFIRMATION)
|
|
add_definitions(-DSHUTDOWN_CONFIRMATION)
|
|
endif()
|
|
|
|
if(PPM_UNIT STREQUAL US)
|
|
add_definitions(-DPPM_UNIT_US)
|
|
elseif(PPM_UNIT STREQUAL PERCENT_PREC1)
|
|
add_definitions(-DPPM_UNIT_PERCENT_PREC1)
|
|
else()
|
|
add_definitions(-DPPM_UNIT_PERCENT_PREC0)
|
|
endif()
|
|
|
|
if(PPM_CENTER_ADJUSTABLE)
|
|
add_definitions(-DPPM_CENTER_ADJUSTABLE)
|
|
endif()
|
|
|
|
if(PPM_LIMITS_SYMETRICAL)
|
|
add_definitions(-DPPM_LIMITS_SYMETRICAL)
|
|
endif()
|
|
|
|
if(OVERRIDE_CHANNEL_FUNCTION)
|
|
add_definitions(-DOVERRIDE_CHANNEL_FUNCTION)
|
|
endif()
|
|
|
|
if(DANGEROUS_MODULE_FUNCTIONS)
|
|
add_definitions(-DDANGEROUS_MODULE_FUNCTIONS)
|
|
endif()
|
|
|
|
if(NOT SPLASH STREQUAL OFF)
|
|
add_definitions(-DSPLASH)
|
|
endif()
|
|
|
|
if(NOT DEFAULT_MODE STREQUAL "")
|
|
add_definitions(-DDEFAULT_MODE=${DEFAULT_MODE})
|
|
endif()
|
|
|
|
if(TRACE_SIMPGMSPACE)
|
|
add_definitions(-DTRACE_SIMPGMSPACE)
|
|
endif()
|
|
|
|
if(TRACE_LUA_INTERNALS)
|
|
add_definitions(-DTRACE_LUA_INTERNALS_ENABLED)
|
|
endif()
|
|
|
|
if(DEBUG_SEGGER_RTT)
|
|
add_definitions(-DDEBUG_SEGGER_RTT)
|
|
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger_RTT/RTT/SEGGER_RTT.c)
|
|
endif()
|
|
|
|
if(DEBUG_WINDOWS)
|
|
add_definitions(-DDEBUG_WINDOWS)
|
|
endif()
|
|
|
|
if(DEBUG_YAML)
|
|
add_definitions(-DDEBUG_YAML)
|
|
endif()
|
|
|
|
if(DEBUG_LABELS)
|
|
add_definitions(-DDEBUG_LABELS)
|
|
endif()
|
|
|
|
if(IMU_LSM6DS33)
|
|
add_definitions(-DIMU_LSM6DS33)
|
|
endif()
|
|
|
|
if(EEPROM_VARIANT_NEEDED)
|
|
add_definitions(-DEEPROM_VARIANT=${EEPROM_VARIANT})
|
|
endif()
|
|
|
|
if(TEST_BUILD_WARNING)
|
|
add_definitions(-DTEST_BUILD_WARNING)
|
|
endif()
|
|
|
|
if(MODULE_PROTOCOL_FCC)
|
|
add_definitions(-DMODULE_PROTOCOL_FCC)
|
|
endif()
|
|
|
|
if(MODULE_PROTOCOL_LBT)
|
|
add_definitions(-DMODULE_PROTOCOL_LBT)
|
|
endif()
|
|
|
|
if(MODULE_PROTOCOL_D8)
|
|
add_definitions(-DMODULE_PROTOCOL_D8)
|
|
endif()
|
|
|
|
if(JUMPER_RELEASE)
|
|
add_definitions(-DJUMPER_RELEASE)
|
|
endif()
|
|
|
|
if(RADIOMASTER_RELEASE)
|
|
add_definitions(-DRADIOMASTER_RELEASE)
|
|
endif()
|
|
|
|
if(RADIOMASTER_RTF_RELEASE)
|
|
add_definitions(-DRADIOMASTER_RTF_RELEASE)
|
|
endif()
|
|
|
|
if(TBS_RELEASE)
|
|
add_definitions(-DTBS_RELEASE)
|
|
endif()
|
|
|
|
if(IMRC_RELEASE)
|
|
add_definitions(-DIMRC_RELEASE)
|
|
endif()
|
|
|
|
if(FRSKY_RELEASE)
|
|
add_definitions(-DFRSKY_RELEASE)
|
|
set(POPUP_LEVEL 3)
|
|
endif()
|
|
|
|
if(IFLIGHT_RELEASE)
|
|
add_definitions(-DIFLIGHT_RELEASE)
|
|
endif()
|
|
|
|
if(HARDWARE_TRAINER_MULTI)
|
|
add_definitions(-DHARDWARE_TRAINER_MULTI)
|
|
endif()
|
|
|
|
add_definitions(-DPOPUP_LEVEL=${POPUP_LEVEL})
|
|
|
|
if(INTERNAL_MODULE_MULTI)
|
|
set(DEFAULT_TEMPLATE_SETUP 21 CACHE STRING "")
|
|
else()
|
|
set(DEFAULT_TEMPLATE_SETUP 0 CACHE STRING "")
|
|
endif()
|
|
add_definitions(-DDEFAULT_TEMPLATE_SETUP=${DEFAULT_TEMPLATE_SETUP})
|
|
|
|
if(FWDRIVE)
|
|
add_definitions(-DFWDRIVE)
|
|
endif()
|
|
|
|
set(SRC
|
|
${SRC}
|
|
opentx.cpp
|
|
functions.cpp
|
|
strhelpers.cpp
|
|
switches.cpp
|
|
analogs.cpp
|
|
mixer.cpp
|
|
mixer_scheduler.cpp
|
|
stamp.cpp
|
|
timers.cpp
|
|
trainer.cpp
|
|
model_init.cpp
|
|
serial.cpp
|
|
sbus.cpp
|
|
input_mapping.cpp
|
|
inactivity_timer.cpp
|
|
tasks/mixer_task.cpp
|
|
)
|
|
|
|
if(GUI)
|
|
add_definitions(-DGUI)
|
|
set(SRC
|
|
${SRC}
|
|
keys.cpp
|
|
maths.cpp
|
|
translations.cpp
|
|
gui/gui_common.cpp
|
|
)
|
|
foreach(FILE ${GUI_SRC})
|
|
set(SRC ${SRC} gui/${GUI_DIR}/${FILE})
|
|
endforeach()
|
|
endif()
|
|
|
|
|
|
if(USBJ_EX)
|
|
add_definitions(-DUSBJ_EX)
|
|
set(SRC
|
|
${SRC}
|
|
usb_joystick.cpp
|
|
)
|
|
endif()
|
|
foreach(FILE ${TARGET_SRC})
|
|
set(SRC targets/${TARGET_DIR}/${FILE} ${SRC})
|
|
endforeach()
|
|
|
|
foreach(FILE ${FIRMWARE_TARGET_SRC})
|
|
set(FIRMWARE_SRC ${FIRMWARE_SRC} targets/${TARGET_DIR}/${FILE})
|
|
endforeach()
|
|
|
|
foreach(FILE ${PULSES_SRC})
|
|
set(SRC ${SRC} pulses/${FILE})
|
|
endforeach()
|
|
|
|
add_definitions(-DCORRECT_NEGATIVE_SHIFTS)
|
|
|
|
if(NOT MSVC)
|
|
set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-address-of-packed-member -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits")
|
|
if(WARNINGS_AS_ERRORS)
|
|
set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
|
|
endif(WARNINGS_AS_ERRORS)
|
|
else()
|
|
add_definitions(-DHAVE_STRUCT_TIMESPEC) # this is for pthread.h
|
|
if(WARNINGS_AS_ERRORS)
|
|
set(WARNING_FLAGS "${WARNING_FLAGS} /WX")
|
|
endif(WARNINGS_AS_ERRORS)
|
|
endif()
|
|
|
|
if(NATIVE_BUILD)
|
|
|
|
set(RADIOLIB_NATIVE_SRC ${SRC})
|
|
if(SIMU_DISKIO)
|
|
set(RADIOLIB_NATIVE_SRC ${RADIOLIB_NATIVE_SRC}
|
|
${FATFS_DIR}/ff.c ${FATFS_DIR}/ffunicode.c)
|
|
endif()
|
|
|
|
# Pack all radio sources into an object lib
|
|
add_library(radiolib_native OBJECT EXCLUDE_FROM_ALL
|
|
${RADIOLIB_NATIVE_SRC})
|
|
|
|
# Add -DSIMU here PUBLIC, so it can be imported by other targets
|
|
# via INTERFACE_COMPILE_OPTIONS
|
|
target_compile_options(radiolib_native PUBLIC -DSIMU)
|
|
add_dependencies(radiolib_native ${RADIO_DEPENDENCIES})
|
|
set_property(TARGET radiolib_native PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
|
|
add_subdirectory(targets/simu)
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
set(SRC ${SRC} ${FIRMWARE_SRC})
|
|
|
|
##### firmware target #####
|
|
|
|
if(NATIVE_BUILD)
|
|
message(STATUS "firmware target disabled")
|
|
return()
|
|
endif()
|
|
|
|
set(CMAKE_C_FLAGS "${FIRMWARE_C_FLAGS}")
|
|
set(CMAKE_C_FLAGS_DEBUG "${FIRMWARE_C_FLAGS_DEBUG}")
|
|
set(CMAKE_C_FLAGS_RELEASE "${FIRMWARE_C_FLAGS}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${FIRMWARE_CXX_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${FIRMWARE_CXX_FLAGS_DEBUG}")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${FIRMWARE_CXX_FLAGS}")
|
|
|
|
find_program(BASH bash
|
|
HINTS "c:/cygwin/bin/" "c:/msys/bin/"
|
|
DOC "bash shell for firmware size report (eg. c:/cygwin/bin/bash.exe on Windows)."
|
|
)
|
|
|
|
set(OPT "s" CACHE STRING "Optimization mode (0/1/2/s")
|
|
|
|
set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst")
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -gdwarf-2 -fno-exceptions -fdata-sections -ffunction-sections")
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -DHSE_VALUE=${HSE_VALUE}")
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -O${OPT} ${FPU_FLAGS}")
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} ${WARNING_FLAGS}")
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS} -Wimplicit")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}")
|
|
|
|
# these are in addition to CMAKE_CXX_FLAGS
|
|
set(CMAKE_EXE_LINKER_FLAGS "-lm -T${RADIO_SRC_DIR}/${LINKER_SCRIPT}")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections")
|
|
|
|
if(SEMIHOSTING)
|
|
add_definitions(-DSEMIHOSTING)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=rdimon.specs")
|
|
endif()
|
|
|
|
# Use newlib nano, which saves a few kilobytes.
|
|
if(NOT NANO STREQUAL NO)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs")
|
|
if(LUA)
|
|
# Lua needs %g and %f
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -u _printf_float -u _scanf_float")
|
|
endif()
|
|
if(SDRAM)
|
|
# Target with SDRAM do not need a custom allocator for now
|
|
# as the custom allocator has alignement issues
|
|
message("Target has SDRAM, do not use BIN_ALLOCATOR")
|
|
else()
|
|
# Nano's malloc does work well with lua, use our own
|
|
add_definitions(-DUSE_BIN_ALLOCATOR)
|
|
set(SRC ${SRC} bin_allocator.cpp)
|
|
endif()
|
|
endif()
|
|
|
|
# Bootloader
|
|
if(BOOTLOADER)
|
|
add_subdirectory(targets/common/arm/stm32/bootloader)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR}/targets/common/arm/stm32/bootloader)
|
|
set(RADIO_DEPENDENCIES ${RADIO_DEPENDENCIES} bootloader)
|
|
endif()
|
|
|
|
add_definitions(-DFREE_RTOS)
|
|
|
|
add_executable(firmware ${SRC})
|
|
link_libraries(firmware -lstdc++)
|
|
add_dependencies(firmware ${RADIO_DEPENDENCIES})
|
|
set_target_properties(firmware PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
|
|
|
if(ACCESS_DENIED)
|
|
add_subdirectory(thirdparty/AccessDenied)
|
|
include_directories(thirdparty/AccessDenied)
|
|
target_link_libraries(firmware AccessDenied)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
TARGET firmware POST_BUILD
|
|
COMMAND ${CMAKE_OBJCOPY} -O binary firmware.elf firmware.bin
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
find_program(GAWK gawk
|
|
HINTS "c:/cygwin/bin/" "c:/msys/bin/"
|
|
DOC "gawk for firmware size report.") # OS X might only have "awk"
|
|
|
|
if (BASH AND GAWK)
|
|
add_custom_target(firmware-size
|
|
COMMAND ${BASH} -kc '${RADIO_DIRECTORY}/util/elf-size-report.sh --mcu=${CPU_TYPE_FULL} ${SIZE_TARGET_MEM_DEFINE} firmware.elf'
|
|
DEPENDS firmware
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
else()
|
|
add_custom_target(firmware-size
|
|
COMMAND ${CMAKE_SIZE_UTIL} -A firmware.elf
|
|
DEPENDS firmware
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
endif()
|
|
|
|
if(CPU_FAMILY STREQUAL STM32)
|
|
add_custom_target(flash
|
|
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D firmware.bin
|
|
DEPENDS firmware
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
add_custom_target(flash-bl
|
|
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D bootloader.bin
|
|
DEPENDS bootloader
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
add_custom_target(flash-jtag
|
|
COMMAND st-flash --reset write firmware.bin 0x8000000
|
|
DEPENDS firmware
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
add_custom_target(flash-stlink
|
|
COMMAND ST-LINK_CLI -c SWD -P firmware.bin 0x8000000 -Rst -Q
|
|
DEPENDS firmware-size
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
)
|
|
endif()
|
|
|
|
PrintTargetReport("firmware")
|
|
|
|
AddHardwareDefTarget(hardware_defs ${RADIO_DIRECTORY}/src/targets/hw_defs/${FLAVOUR}.json)
|