; ============================================================================= ; AR-Autopilot v1 -- firmware build configuration ; ============================================================================= ; ; Target hardware: AR-NMEA-IO v1.0 (ESP32-DOWD-V3, dual-core 240 MHz) ; Build system: PlatformIO 6.1+ ; Framework: arduino (on ESP32 -- includes FreeRTOS, full Espressif stack) ; ; This file is the single source of truth for the firmware build. Versions of ; the platform, framework packages, and library dependencies are pinned for ; reproducibility. ; ; Tasks (from the project root): ; ; .venv/Scripts/pio.exe run # compile (default env: esp32-dev) ; .venv/Scripts/pio.exe run -e esp32-debug # compile with extra debug flags ; .venv/Scripts/pio.exe run -e native # build host-side Unity tests ; .venv/Scripts/pio.exe test -e native # run host-side Unity tests ; .venv/Scripts/pio.exe check # static analysis (cppcheck) ; .venv/Scripts/pio.exe run -t upload # flash (needs the board plugged in) ; ; ============================================================================= [platformio] src_dir = src include_dir = include test_dir = test default_envs = esp32-dev ; ----------------------------------------------------------------------------- ; Common settings shared by every ESP32 env ; ----------------------------------------------------------------------------- [env] platform = espressif32@^6.7.0 framework = arduino monitor_speed = 115200 monitor_filters = esp32_exception_decoder, time build_flags = -std=gnu++17 -DCORE_DEBUG_LEVEL=3 ; ARDUHAL_LOG_LEVEL_INFO -DAR_FW_VERSION=\"0.1.0-sprint1\" -DAR_FW_BUILD_TIMESTAMP=__TIMESTAMP__ -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers build_unflags = -std=gnu++11 ; Library dependencies pinned for reproducibility. ; These are the Sprint 1 dependencies; later sprints may add more. lib_deps = ttlappalainen/NMEA2000-library@^4.22.0 ttlappalainen/NMEA2000_esp32@^1.0.3 https://github.com/eModbus/eModbus.git#v1.7.4.stable ; Files we never want to compile / lint: ; - Documentation ; - Test fixtures (handled by env:native) lib_ignore = test ; ----------------------------------------------------------------------------- ; Production build for the AR-NMEA-IO board ; ----------------------------------------------------------------------------- [env:esp32-dev] board = esp32dev board_build.partitions = default.csv build_type = release build_flags = ${env.build_flags} -Os -DAR_BUILD_VARIANT=\"release\" ; ----------------------------------------------------------------------------- ; Debug build (-O0, extra logging) ; ----------------------------------------------------------------------------- [env:esp32-debug] board = esp32dev build_type = debug build_flags = ${env.build_flags} -O0 -ggdb -DAR_BUILD_VARIANT=\"debug\" -DCORE_DEBUG_LEVEL=5 ; ARDUHAL_LOG_LEVEL_VERBOSE ; ----------------------------------------------------------------------------- ; Host-side Unity tests (run on the developer machine, no ESP32 needed) ; ----------------------------------------------------------------------------- ; Used for pure-logic tests: ring buffers, median filters, the Modbus ; register map, the PID math, etc. Anything that talks to real hardware ; lives in env:esp32-dev tests and runs only on the board. ; ; NOTE: this env does NOT inherit [env] (which targets ESP32 + Arduino). [env:native] platform = native framework = test_framework = unity test_build_src = no build_flags = -std=gnu++17 -DAR_HOST_TEST=1 -DUNITY_INCLUDE_DOUBLE -Wall -Wextra build_unflags = lib_deps = lib_ignore = monitor_filters = ; ----------------------------------------------------------------------------- ; Static analysis ; ----------------------------------------------------------------------------- [env:check] platform = espressif32@^6.7.0 framework = arduino board = esp32dev check_tool = cppcheck check_flags = cppcheck: --enable=warning,style,performance,portability --inline-suppr check_skip_packages = yes check_severity = medium, high