refactor(build): consolidate envs to production/debug/test; add compiler hardening flags

- Replace 11 per-frequency build environments with 3 role-based targets
  (production, debug, test) using shared [env] base section
- Move LoRa frequency and sender-ID config from build flags into config.h
  so all variants build from the same source
- Add -fstack-protector-strong, -D_FORTIFY_SOURCE=2, -Wformat-security
- Add Unity test framework to lib_deps for pio test support
- Add __pycache__/ to .gitignore
This commit is contained in:
2026-03-17 12:31:16 +01:00
parent b9591ce9bb
commit 5edb79f372
3 changed files with 57 additions and 171 deletions

View File

@@ -1,14 +1,14 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
; Build targets:
; production serial off, light-sleep on (normal deployment)
; debug serial + meter diag + state tracing (real meter, real data)
; test synthetic meter data + payload codec self-test (no real meter needed)
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
; LoRa frequency and sender IDs are configured in include/config.h,
; NOT via build flags. Change them there before building.
[env:lilygo-t3-v1-6-1]
[env]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
@@ -18,169 +18,40 @@ lib_deps =
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
throwtheswitch/Unity@^2.6.1
[env:lilygo-t3-v1-6-1-test]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
; --- Hardening flags for all builds ---
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DENABLE_TEST_MODE
-fstack-protector-strong
-D_FORTIFY_SOURCE=2
-Wformat -Wformat-security
-Wno-format-truncation
[env:lilygo-t3-v1-6-1-868]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DLORA_FREQUENCY_HZ=868E6
[env:lilygo-t3-v1-6-1-868-test]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DENABLE_TEST_MODE
-DLORA_FREQUENCY_HZ=868E6
[env:lilygo-t3-v1-6-1-payload-test]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DPAYLOAD_CODEC_TEST
[env:lilygo-t3-v1-6-1-868-payload-test]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DPAYLOAD_CODEC_TEST
-DLORA_FREQUENCY_HZ=868E6
[env:lilygo-t3-v1-6-1-prod]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=0
[env:lilygo-t3-v1-6-1-868-prod]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=0
-DLORA_FREQUENCY_HZ=868E6
; Diagnostic build: enables extended meter fault telemetry via DEBUG_METER_DIAG.
; Use for investigating meter error rates; disable in production.
[env:lilygo-t3-v1-6-1-diag]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=1
-DDEBUG_METER_DIAG
; Power-optimised sender build: light-sleep between 1 Hz samples, serial off.
; Use for long-duration battery-life measurements and production deployments.
[env:lilygo-t3-v1-6-1-lowpower]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
; --- Production: serial off, light-sleep on ---
[env:production]
build_flags =
${env.build_flags}
-DSERIAL_DEBUG_MODE_FLAG=0
-DENABLE_LIGHT_SLEEP_IDLE=1
; Power-optimised + 868 MHz variant.
[env:lilygo-t3-v1-6-1-868-lowpower]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
build_flags =
-DSERIAL_DEBUG_MODE_FLAG=0
-DENABLE_LIGHT_SLEEP_IDLE=1
-DLORA_FREQUENCY_HZ=868E6
; Power-optimised sender build with debug output enabled for validation.
; Use during the measurement / verification phase.
[env:lilygo-t3-v1-6-1-lowpower-debug]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip
board = ttgo-lora32-v1
framework = arduino
lib_deps =
sandeepmistry/LoRa@^0.8.0
bblanchon/ArduinoJson@^6.21.5
adafruit/Adafruit SSD1306@^2.5.9
adafruit/Adafruit GFX Library@^1.11.9
knolleary/PubSubClient@^2.8
; --- Debug: serial + all diagnostics, real meter data ---
; Does NOT enable test mode — uses real meter + real LoRa.
[env:debug]
build_flags =
${env.build_flags}
-DSERIAL_DEBUG_MODE_FLAG=1
-DENABLE_LIGHT_SLEEP_IDLE=1
-DDEBUG_METER_DIAG
-DDD3_DEBUG
; --- Test: synthetic meter samples, payload codec self-test at boot ---
; Replaces real meter reading with fake 1 Hz data and publishes to test MQTT topic.
; Use for bench testing without a physical meter attached.
[env:test]
build_flags =
${env.build_flags}
-DSERIAL_DEBUG_MODE_FLAG=1
-DENABLE_TEST_MODE
-DPAYLOAD_CODEC_TEST
-DDEBUG_METER_DIAG
-DDD3_DEBUG