mirror of
https://github.com/agessaman/MeshCore.git
synced 2026-08-25 07:10:01 +00:00
The reduced-TLS work was validated on hardware but only reachable through
PLATFORMIO_BUILD_FLAGS pointing at an absolute path in a developer's home
directory, so nothing outside that machine could reproduce it.
Distribute the archives as a release asset instead of committing them: ~6 MB
per architecture, and they must be rebuilt for every espressif32 bump, so
committing would grow history permanently and go stale without any signal.
scripts/mbedtls_4k_manifest.txt per-arch sha256 of each archive
scripts/fetch_mbedtls_4k.sh fetch into .mbedtls-4k/<arch>/, verify
scripts/mbedtls_4k.py pre-build wiring and post-link proof
Off by default. The script is attached to esp32_base but returns immediately
unless MESHCORE_REDUCED_TLS=1, so ordinary builds need no artifact and are
byte-for-byte unaffected — confirmed by building with it absent.
Both ways this can fail silently produce a firmware that looks fine and lacks
the change, so the opt-in path refuses to guess:
- a -L at a missing or partial directory: the linker ignores an unusable
search path and resolves mbedTLS from the framework. Now a hard error.
- archives left over from an earlier platform version: now a sha256
mismatch against the manifest, naming both hashes.
- a -L that is present but outranked, leaving the flag inert: after the
link, firmware.map must resolve every libmbed*.a into .mbedtls-4k/, or
the build fails and prints the offending paths.
That last check earned its place immediately — it caught its own first
implementation comparing a relative map path against an absolute one, and an
earlier build flag in this investigation was accepted by the compiler while
no source read it. A flag reaching the compiler proves nothing about the link.
Verified all four paths on Heltec_v3_repeater_observer_mqtt: default build
unaffected; opted in with archives present links all four from .mbedtls-4k/
and says so; archives absent fails with a fetch hint; a single appended byte
fails on sha256.
Also removes platformio.local.ini.hold, which held the superseded approach of
pointing platform_packages at a whole custom framework. That installs over the
shared framework package and changes mbedTLS for every other ESP32 project on
the machine; the -L path keeps the change scoped to one env.
Note the inbound record buffer stays at 16 KiB, so this lowers per-connection
footprint by ~12 KiB but does not move the contiguous allocation a handshake
needs. It buys headroom, not a lower floor.
(cherry picked from commit a87faff6ff170c328fdd0550f4b4dd9089aa2ea0)
208 lines
6.3 KiB
INI
208 lines
6.3 KiB
INI
; 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
|
|
;
|
|
; Please visit documentation for the other options and examples
|
|
; https://docs.platformio.org/page/projectconf.html
|
|
|
|
[platformio]
|
|
extra_configs =
|
|
variants/*/platformio.ini
|
|
platformio.local.ini
|
|
|
|
[arduino_base]
|
|
framework = arduino
|
|
monitor_speed = 115200
|
|
lib_deps =
|
|
SPI
|
|
Wire
|
|
;jgromes/RadioLib @ ^7.7.1
|
|
https://github.com/jgromes/RadioLib.git#6d8934836678d8894e3d556550475b37dce3e2b6
|
|
rweather/Crypto @ ^0.4.0
|
|
adafruit/RTClib @ ^2.1.3
|
|
melopero/Melopero RV3028 @ ^1.1.0
|
|
electroniccats/CayenneLPP @ 1.6.1
|
|
build_flags = -w -DNDEBUG -DRADIOLIB_STATIC_ONLY=1 -DRADIOLIB_GODMODE=1
|
|
-D LORA_FREQ=869.618
|
|
-D LORA_BW=62.5
|
|
-D LORA_SF=8
|
|
-D ENABLE_ADVERT_ON_BOOT=1
|
|
-D ENABLE_PRIVATE_KEY_IMPORT=1 ; NOTE: comment these out for more secure firmware
|
|
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
|
-D RADIOLIB_EXCLUDE_CC1101=1
|
|
-D RADIOLIB_EXCLUDE_RF69=1
|
|
-D RADIOLIB_EXCLUDE_SX1231=1
|
|
-D RADIOLIB_EXCLUDE_SI443X=1
|
|
-D RADIOLIB_EXCLUDE_RFM2X=1
|
|
-D RADIOLIB_EXCLUDE_SX128X=1
|
|
-D RADIOLIB_EXCLUDE_AFSK=1
|
|
-D RADIOLIB_EXCLUDE_AX25=1
|
|
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
|
-D RADIOLIB_EXCLUDE_MORSE=1
|
|
-D RADIOLIB_EXCLUDE_APRS=1
|
|
-D RADIOLIB_EXCLUDE_BELL=1
|
|
-D RADIOLIB_EXCLUDE_RTTY=1
|
|
-D RADIOLIB_EXCLUDE_SSTV=1
|
|
build_src_filter =
|
|
+<*.cpp>
|
|
+<helpers/*.cpp>
|
|
; MQTT-only sources (need Timezone/NTPClient); observer envs add them back.
|
|
-<helpers/MQTTMessageBuilder.cpp>
|
|
-<helpers/JWTHelper.cpp>
|
|
+<helpers/radiolib/*.cpp>
|
|
+<helpers/bridges/BridgeBase.cpp>
|
|
+<helpers/ui/MomentaryButton.cpp>
|
|
|
|
; ----------------- ESP32 ---------------------
|
|
|
|
[esp32_base]
|
|
extends = arduino_base
|
|
platform = platformio/espressif32@6.11.0
|
|
monitor_filters = esp32_exception_decoder
|
|
extra_scripts =
|
|
pre:scripts/generate_webconfig_html.py
|
|
; No-op unless MESHCORE_REDUCED_TLS=1; see docs/mbedtls-tls-footprint.md.
|
|
pre:scripts/mbedtls_4k.py
|
|
merge-bin.py
|
|
build_flags = ${arduino_base.build_flags}
|
|
-D ESP32_PLATFORM
|
|
; Route esp_transport_ws_init through src/helpers/ESP32WsTransportFix.cpp to
|
|
; fix a heap-overflow in the precompiled IDF 4.4 WS transport (see that file).
|
|
-Wl,--wrap=esp_transport_ws_init
|
|
; -D ESP32_CPU_FREQ=80 ; change it to your need
|
|
build_src_filter = ${arduino_base.build_src_filter}
|
|
+<helpers/esp32/WebConfigServer.cpp> ; empty TU unless WITH_MQTT_BRIDGE
|
|
|
|
[esp32_ota]
|
|
lib_deps =
|
|
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
|
file://arch/esp32/AsyncElegantOTA
|
|
|
|
; esp32c6 uses arduino framework 3.x
|
|
; WARNING: experimental. May not work as stable as other platforms.
|
|
[esp32c6_base]
|
|
extends = esp32_base
|
|
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.13-1/platform-espressif32.zip
|
|
|
|
; ----------------- NRF52 ---------------------
|
|
|
|
[nrf52_base]
|
|
extends = arduino_base
|
|
platform = nordicnrf52
|
|
platform_packages =
|
|
; use internal fork that includes patch to ble stack to prevent firmware lockup during rapid connect/disconnect
|
|
; https://github.com/meshcore-dev/MeshCore/pull/1177
|
|
; https://github.com/meshcore-dev/MeshCore/pull/1295
|
|
framework-arduinoadafruitnrf52 @ https://github.com/meshcore-dev/Adafruit_nRF52_Arduino#d541301
|
|
extra_scripts = create-uf2.py
|
|
build_flags = ${arduino_base.build_flags}
|
|
-D NRF52_PLATFORM
|
|
-D LFS_NO_ASSERT=1
|
|
-D EXTRAFS=1
|
|
-D USE_CC310_HW_CRYPTO=1
|
|
lib_deps =
|
|
${arduino_base.lib_deps}
|
|
https://github.com/oltaco/CustomLFS#0.2.3
|
|
; Vendored ESP-IDF MQTT client; the LDF otherwise pulls it into non-ESP builds.
|
|
lib_ignore = PsychicMqttClient
|
|
; ----------------- RP2040 ---------------------
|
|
|
|
[rp2040_base]
|
|
extends = arduino_base
|
|
upload_protocol = picotool
|
|
board_build.core = earlephilhower
|
|
platform = https://github.com/maxgerhardt/platform-raspberrypi.git ; framework-arduinopico @ 1.50600.0+sha.6a1d13e9
|
|
build_flags = ${arduino_base.build_flags}
|
|
-D RP2040_PLATFORM
|
|
|
|
; ----------------- STM32 ----------------------
|
|
|
|
[stm32_base]
|
|
extends = arduino_base
|
|
platform = ststm32
|
|
extra_scripts = post:arch/stm32/build_hex.py
|
|
build_flags = ${arduino_base.build_flags}
|
|
-D STM32_PLATFORM
|
|
-I src/helpers/stm32
|
|
-I $PROJECT_PACKAGES_DIR/framework-arduinoststm32/libraries/SubGhz/src
|
|
build_src_filter = ${arduino_base.build_src_filter}
|
|
+<helpers/stm32>
|
|
lib_deps = ${arduino_base.lib_deps}
|
|
file://arch/stm32/Adafruit_LittleFS_stm32
|
|
SubGhz
|
|
|
|
[sensor_base]
|
|
build_flags =
|
|
-D ENV_INCLUDE_GPS=1
|
|
-D ENV_INCLUDE_AHTX0=1
|
|
-D ENV_INCLUDE_BME280=1
|
|
-D ENV_INCLUDE_BMP280=1
|
|
-D ENV_INCLUDE_SHTC3=1
|
|
-D ENV_INCLUDE_SHT4X=1
|
|
-D ENV_INCLUDE_LPS22HB=1
|
|
-D ENV_INCLUDE_INA3221=1
|
|
-D ENV_INCLUDE_INA219=1
|
|
-D ENV_INCLUDE_INA226=1
|
|
-D ENV_INCLUDE_INA260=1
|
|
-D ENV_INCLUDE_MLX90614=1
|
|
-D ENV_INCLUDE_VL53L0X=1
|
|
-D ENV_INCLUDE_BME680=1
|
|
-D ENV_INCLUDE_BMP085=1
|
|
lib_deps =
|
|
adafruit/Adafruit INA3221 Library @ ^1.0.1
|
|
adafruit/Adafruit INA219 @ ^1.2.3
|
|
robtillaart/INA226 @ ^0.6.4
|
|
adafruit/Adafruit INA260 Library @ ^1.5.3
|
|
adafruit/Adafruit AHTX0 @ ^2.0.5
|
|
adafruit/Adafruit BME280 Library @ ^2.3.0
|
|
adafruit/Adafruit BMP280 Library @ ^2.6.8
|
|
adafruit/Adafruit SHTC3 Library @ ^1.0.1
|
|
sensirion/Sensirion I2C SHT4x @ ^1.1.2
|
|
arduino-libraries/Arduino_LPS22HB @ ^1.0.2
|
|
adafruit/Adafruit MLX90614 Library @ ^2.1.5
|
|
adafruit/Adafruit_VL53L0X @ ^1.2.4
|
|
stevemarple/MicroNMEA @ ^2.0.6
|
|
adafruit/Adafruit BME680 Library @ ^2.0.4
|
|
adafruit/Adafruit BMP085 Library @ ^1.2.4
|
|
|
|
; ----------------- TESTING ---------------------
|
|
; Host GoogleTest suites for the fork's pure logic. See test/README.md.
|
|
; Run: `pio test -e native` (all) or `pio test -e native -f <suite>` (one).
|
|
|
|
[env:native]
|
|
platform = native
|
|
test_framework = googletest
|
|
build_flags = -std=c++17
|
|
-I src
|
|
-I test/mocks
|
|
test_build_src = yes
|
|
test_ignore = test_kiss_modem
|
|
build_src_filter =
|
|
-<*>
|
|
+<../src/Utils.cpp>
|
|
+<../src/helpers/MQTTPayloadBuilder.cpp>
|
|
+<../src/Packet.cpp>
|
|
+<../src/helpers/ConfigSerializer.cpp>
|
|
lib_deps =
|
|
google/googletest @ 1.17.0
|
|
bblanchon/ArduinoJson @ 7.4.3
|
|
|
|
[env:native_kiss_modem]
|
|
platform = native
|
|
test_framework = googletest
|
|
build_flags = -std=c++17
|
|
-I test/mocks
|
|
-I src
|
|
-I examples/kiss_modem
|
|
test_build_src = yes
|
|
test_filter = test_kiss_modem
|
|
build_src_filter =
|
|
-<*>
|
|
+<../examples/kiss_modem/KissModem.cpp>
|
|
lib_deps =
|
|
google/googletest @ 1.17.0
|
|
bblanchon/ArduinoJson @ 7.4.3
|