mirror of
https://github.com/espressif/arduino-esp32
synced 2024-09-21 10:28:04 +00:00
16b2d74441
* fix(prov): Use network_provisioning * IDF release/v5.1 5c57dfe949 * fix(prov): Add sketch and CMake fixes * fix(prov): Fix build for ESP32-C2 * ci(pre-commit): Apply automatic fixes * fix(prov): Improve WiFiProv library and QRcode print * IDF release/v5.1 c608177cf9 --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
352 lines
12 KiB
CMake
352 lines
12 KiB
CMake
# Check ESP-IDF version and error out if it is not in the supported range.
|
|
#
|
|
# Note for arduino-esp32 developers: to bypass the version check locally,
|
|
# set ARDUINO_SKIP_IDF_VERSION_CHECK environment variable to 1. For example:
|
|
# export ARDUINO_SKIP_IDF_VERSION_CHECK=1
|
|
# idf.py build
|
|
|
|
set(min_supported_idf_version "5.1.0")
|
|
set(max_supported_idf_version "5.1.99")
|
|
set(idf_version "${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}.${IDF_VERSION_PATCH}")
|
|
|
|
if ("${idf_version}" AND NOT "$ENV{ARDUINO_SKIP_IDF_VERSION_CHECK}")
|
|
if (idf_version VERSION_LESS min_supported_idf_version)
|
|
message(FATAL_ERROR "Arduino-esp32 can be used with ESP-IDF versions "
|
|
"between ${min_supported_idf_version} and ${max_supported_idf_version}, "
|
|
"but an older version is detected: ${idf_version}.")
|
|
endif()
|
|
if (idf_version VERSION_GREATER max_supported_idf_version)
|
|
message(FATAL_ERROR "Arduino-esp32 can be used with ESP-IDF versions "
|
|
"between ${min_supported_idf_version} and ${max_supported_idf_version}, "
|
|
"but a newer version is detected: ${idf_version}.")
|
|
endif()
|
|
endif()
|
|
|
|
set(CORE_SRCS
|
|
cores/esp32/base64.cpp
|
|
cores/esp32/cbuf.cpp
|
|
cores/esp32/chip-debug-report.cpp
|
|
cores/esp32/esp32-hal-adc.c
|
|
cores/esp32/esp32-hal-bt.c
|
|
cores/esp32/esp32-hal-cpu.c
|
|
cores/esp32/esp32-hal-dac.c
|
|
cores/esp32/esp32-hal-gpio.c
|
|
cores/esp32/esp32-hal-i2c.c
|
|
cores/esp32/esp32-hal-i2c-slave.c
|
|
cores/esp32/esp32-hal-ledc.c
|
|
cores/esp32/esp32-hal-matrix.c
|
|
cores/esp32/esp32-hal-misc.c
|
|
cores/esp32/esp32-hal-periman.c
|
|
cores/esp32/esp32-hal-psram.c
|
|
cores/esp32/esp32-hal-rgb-led.c
|
|
cores/esp32/esp32-hal-sigmadelta.c
|
|
cores/esp32/esp32-hal-spi.c
|
|
cores/esp32/esp32-hal-time.c
|
|
cores/esp32/esp32-hal-timer.c
|
|
cores/esp32/esp32-hal-tinyusb.c
|
|
cores/esp32/esp32-hal-touch.c
|
|
cores/esp32/esp32-hal-uart.c
|
|
cores/esp32/esp32-hal-rmt.c
|
|
cores/esp32/Esp.cpp
|
|
cores/esp32/FunctionalInterrupt.cpp
|
|
cores/esp32/HardwareSerial.cpp
|
|
cores/esp32/HEXBuilder.cpp
|
|
cores/esp32/IPAddress.cpp
|
|
cores/esp32/libb64/cdecode.c
|
|
cores/esp32/libb64/cencode.c
|
|
cores/esp32/MacAddress.cpp
|
|
cores/esp32/main.cpp
|
|
cores/esp32/MD5Builder.cpp
|
|
cores/esp32/Print.cpp
|
|
cores/esp32/SHA1Builder.cpp
|
|
cores/esp32/stdlib_noniso.c
|
|
cores/esp32/Stream.cpp
|
|
cores/esp32/StreamString.cpp
|
|
cores/esp32/Tone.cpp
|
|
cores/esp32/HWCDC.cpp
|
|
cores/esp32/USB.cpp
|
|
cores/esp32/USBCDC.cpp
|
|
cores/esp32/USBMSC.cpp
|
|
cores/esp32/FirmwareMSC.cpp
|
|
cores/esp32/firmware_msc_fat.c
|
|
cores/esp32/wiring_pulse.c
|
|
cores/esp32/wiring_shift.c
|
|
cores/esp32/WMath.cpp
|
|
cores/esp32/WString.cpp
|
|
)
|
|
|
|
set(ARDUINO_ALL_LIBRARIES
|
|
ArduinoOTA
|
|
AsyncUDP
|
|
BLE
|
|
BluetoothSerial
|
|
DNSServer
|
|
EEPROM
|
|
ESP_I2S
|
|
ESP_NOW
|
|
ESP_SR
|
|
ESPmDNS
|
|
Ethernet
|
|
FFat
|
|
FS
|
|
HTTPClient
|
|
HTTPUpdate
|
|
Insights
|
|
LittleFS
|
|
NetBIOS
|
|
Network
|
|
OpenThread
|
|
PPP
|
|
Preferences
|
|
RainMaker
|
|
SD_MMC
|
|
SD
|
|
SimpleBLE
|
|
SPIFFS
|
|
SPI
|
|
Ticker
|
|
Update
|
|
USB
|
|
WebServer
|
|
NetworkClientSecure
|
|
WiFi
|
|
WiFiProv
|
|
Wire
|
|
)
|
|
|
|
set(ARDUINO_LIBRARY_ArduinoOTA_SRCS libraries/ArduinoOTA/src/ArduinoOTA.cpp)
|
|
set(ARDUINO_LIBRARY_ArduinoOTA_REQUIRES esp_https_ota)
|
|
|
|
set(ARDUINO_LIBRARY_AsyncUDP_SRCS libraries/AsyncUDP/src/AsyncUDP.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_BluetoothSerial_SRCS
|
|
libraries/BluetoothSerial/src/BluetoothSerial.cpp
|
|
libraries/BluetoothSerial/src/BTAddress.cpp
|
|
libraries/BluetoothSerial/src/BTAdvertisedDeviceSet.cpp
|
|
libraries/BluetoothSerial/src/BTScanResultsSet.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_DNSServer_SRCS libraries/DNSServer/src/DNSServer.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_EEPROM_SRCS libraries/EEPROM/src/EEPROM.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_ESP_I2S_SRCS libraries/ESP_I2S/src/ESP_I2S.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_ESP_NOW_SRCS
|
|
libraries/ESP_NOW/src/ESP32_NOW.cpp
|
|
libraries/ESP_NOW/src/ESP32_NOW_Serial.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_ESP_SR_SRCS
|
|
libraries/ESP_SR/src/ESP_SR.cpp
|
|
libraries/ESP_SR/src/esp32-hal-sr.c)
|
|
|
|
set(ARDUINO_LIBRARY_ESPmDNS_SRCS libraries/ESPmDNS/src/ESPmDNS.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Ethernet_SRCS libraries/Ethernet/src/ETH.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_FFat_SRCS libraries/FFat/src/FFat.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_FS_SRCS
|
|
libraries/FS/src/FS.cpp
|
|
libraries/FS/src/vfs_api.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_HTTPClient_SRCS libraries/HTTPClient/src/HTTPClient.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_HTTPUpdate_SRCS libraries/HTTPUpdate/src/HTTPUpdate.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Insights_SRCS libraries/Insights/src/Insights.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_LittleFS_SRCS libraries/LittleFS/src/LittleFS.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_NetBIOS_SRCS libraries/NetBIOS/src/NetBIOS.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_OpenThread_SRCS
|
|
libraries/OpenThread/src/OThreadCLI.cpp
|
|
libraries/OpenThread/src/OThreadCLI_Util.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_PPP_SRCS
|
|
libraries/PPP/src/PPP.cpp
|
|
libraries/PPP/src/ppp.c)
|
|
|
|
set(ARDUINO_LIBRARY_Preferences_SRCS libraries/Preferences/src/Preferences.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_RainMaker_SRCS
|
|
libraries/RainMaker/src/RMaker.cpp
|
|
libraries/RainMaker/src/RMakerNode.cpp
|
|
libraries/RainMaker/src/RMakerParam.cpp
|
|
libraries/RainMaker/src/RMakerDevice.cpp
|
|
libraries/RainMaker/src/RMakerType.cpp
|
|
libraries/RainMaker/src/RMakerQR.cpp
|
|
libraries/RainMaker/src/RMakerUtils.cpp
|
|
libraries/RainMaker/src/AppInsights.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_SD_MMC_SRCS libraries/SD_MMC/src/SD_MMC.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_SD_SRCS
|
|
libraries/SD/src/SD.cpp
|
|
libraries/SD/src/sd_diskio.cpp
|
|
libraries/SD/src/sd_diskio_crc.c)
|
|
|
|
set(ARDUINO_LIBRARY_SimpleBLE_SRCS libraries/SimpleBLE/src/SimpleBLE.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_SPIFFS_SRCS libraries/SPIFFS/src/SPIFFS.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_SPI_SRCS libraries/SPI/src/SPI.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Ticker_SRCS libraries/Ticker/src/Ticker.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Update_SRCS
|
|
libraries/Update/src/Updater.cpp
|
|
libraries/Update/src/HttpsOTAUpdate.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_USB_SRCS
|
|
libraries/USB/src/USBHID.cpp
|
|
libraries/USB/src/USBMIDI.cpp
|
|
libraries/USB/src/USBHIDMouse.cpp
|
|
libraries/USB/src/USBHIDKeyboard.cpp
|
|
libraries/USB/src/USBHIDGamepad.cpp
|
|
libraries/USB/src/USBHIDConsumerControl.cpp
|
|
libraries/USB/src/USBHIDSystemControl.cpp
|
|
libraries/USB/src/USBHIDVendor.cpp
|
|
libraries/USB/src/USBVendor.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_WebServer_SRCS
|
|
libraries/WebServer/src/WebServer.cpp
|
|
libraries/WebServer/src/Parsing.cpp
|
|
libraries/WebServer/src/detail/mimetable.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_NetworkClientSecure_SRCS
|
|
libraries/NetworkClientSecure/src/ssl_client.cpp
|
|
libraries/NetworkClientSecure/src/NetworkClientSecure.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Network_SRCS
|
|
libraries/Network/src/NetworkInterface.cpp
|
|
libraries/Network/src/NetworkEvents.cpp
|
|
libraries/Network/src/NetworkManager.cpp
|
|
libraries/Network/src/NetworkClient.cpp
|
|
libraries/Network/src/NetworkServer.cpp
|
|
libraries/Network/src/NetworkUdp.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_WiFi_SRCS
|
|
libraries/WiFi/src/WiFiAP.cpp
|
|
libraries/WiFi/src/WiFi.cpp
|
|
libraries/WiFi/src/WiFiGeneric.cpp
|
|
libraries/WiFi/src/WiFiMulti.cpp
|
|
libraries/WiFi/src/WiFiScan.cpp
|
|
libraries/WiFi/src/WiFiSTA.cpp
|
|
libraries/WiFi/src/STA.cpp
|
|
libraries/WiFi/src/AP.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_WiFiProv_SRCS libraries/WiFiProv/src/WiFiProv.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_Wire_SRCS libraries/Wire/src/Wire.cpp)
|
|
|
|
set(ARDUINO_LIBRARY_BLE_SRCS
|
|
libraries/BLE/src/BLE2901.cpp
|
|
libraries/BLE/src/BLE2902.cpp
|
|
libraries/BLE/src/BLE2904.cpp
|
|
libraries/BLE/src/BLEAddress.cpp
|
|
libraries/BLE/src/BLEAdvertisedDevice.cpp
|
|
libraries/BLE/src/BLEAdvertising.cpp
|
|
libraries/BLE/src/BLEBeacon.cpp
|
|
libraries/BLE/src/BLECharacteristic.cpp
|
|
libraries/BLE/src/BLECharacteristicMap.cpp
|
|
libraries/BLE/src/BLEClient.cpp
|
|
libraries/BLE/src/BLEDescriptor.cpp
|
|
libraries/BLE/src/BLEDescriptorMap.cpp
|
|
libraries/BLE/src/BLEDevice.cpp
|
|
libraries/BLE/src/BLEEddystoneTLM.cpp
|
|
libraries/BLE/src/BLEEddystoneURL.cpp
|
|
libraries/BLE/src/BLEExceptions.cpp
|
|
libraries/BLE/src/BLEHIDDevice.cpp
|
|
libraries/BLE/src/BLERemoteCharacteristic.cpp
|
|
libraries/BLE/src/BLERemoteDescriptor.cpp
|
|
libraries/BLE/src/BLERemoteService.cpp
|
|
libraries/BLE/src/BLEScan.cpp
|
|
libraries/BLE/src/BLESecurity.cpp
|
|
libraries/BLE/src/BLEServer.cpp
|
|
libraries/BLE/src/BLEService.cpp
|
|
libraries/BLE/src/BLEServiceMap.cpp
|
|
libraries/BLE/src/BLEUtils.cpp
|
|
libraries/BLE/src/BLEUUID.cpp
|
|
libraries/BLE/src/BLEValue.cpp
|
|
libraries/BLE/src/FreeRTOS.cpp
|
|
libraries/BLE/src/GeneralUtils.cpp
|
|
)
|
|
|
|
set(ARDUINO_LIBRARIES_SRCS)
|
|
set(ARDUINO_LIBRARIES_REQUIRES)
|
|
set(ARDUINO_LIBRARIES_INCLUDEDIRS)
|
|
foreach(libname IN LISTS ARDUINO_ALL_LIBRARIES)
|
|
if(NOT CONFIG_ARDUINO_SELECTIVE_COMPILATION OR CONFIG_ARDUINO_SELECTIVE_${libname})
|
|
if(ARDUINO_LIBRARY_${libname}_SRCS)
|
|
list(APPEND ARDUINO_LIBRARIES_SRCS ${ARDUINO_LIBRARY_${libname}_SRCS})
|
|
endif()
|
|
if(ARDUINO_LIBRARY_${libname}_REQUIRES)
|
|
list(APPEND ARDUINO_LIBRARIES_REQUIRES ${ARDUINO_LIBRARY_${libname}_REQUIRES})
|
|
endif()
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/libraries/${libname}/src)
|
|
list(APPEND ARDUINO_LIBRARIES_INCLUDEDIRS libraries/${libname}/src)
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
|
|
set(includedirs variants/${CONFIG_ARDUINO_VARIANT}/ cores/esp32/ ${ARDUINO_LIBRARIES_INCLUDEDIRS})
|
|
set(srcs ${CORE_SRCS} ${ARDUINO_LIBRARIES_SRCS})
|
|
set(priv_includes cores/esp32/libb64)
|
|
set(requires spi_flash esp_partition mbedtls wpa_supplicant esp_adc esp_eth http_parser espressif__network_provisioning)
|
|
set(priv_requires fatfs nvs_flash app_update spiffs bootloader_support bt esp_hid usb esp_psram ${ARDUINO_LIBRARIES_REQUIRES})
|
|
|
|
if(NOT CONFIG_ARDUINO_SELECTIVE_COMPILATION OR CONFIG_ARDUINO_SELECTIVE_OpenThread)
|
|
#if(CONFIG_SOC_IEEE802154_SUPPORTED) # Does not work!
|
|
#if(CONFIG_OPENTHREAD_ENABLED) # Does not work!
|
|
if(IDF_TARGET STREQUAL "esp32c6" OR IDF_TARGET STREQUAL "esp32h2") # Sadly only this works
|
|
list(APPEND requires openthread)
|
|
endif()
|
|
endif()
|
|
|
|
idf_component_register(INCLUDE_DIRS ${includedirs} PRIV_INCLUDE_DIRS ${priv_includes} SRCS ${srcs} REQUIRES ${requires} PRIV_REQUIRES ${priv_requires})
|
|
|
|
if(NOT CONFIG_FREERTOS_HZ EQUAL 1000 AND NOT "$ENV{ARDUINO_SKIP_TICK_CHECK}")
|
|
# See delay() in cores/esp32/esp32-hal-misc.c.
|
|
message(FATAL_ERROR "esp32-arduino requires CONFIG_FREERTOS_HZ=1000 "
|
|
"(currently ${CONFIG_FREERTOS_HZ})")
|
|
endif()
|
|
|
|
string(TOUPPER ${CONFIG_ARDUINO_VARIANT} idf_target_caps)
|
|
string(REPLACE "-" "_" idf_target_for_macro "${idf_target_caps}")
|
|
target_compile_options(${COMPONENT_TARGET} PUBLIC
|
|
-DARDUINO=10812
|
|
-DARDUINO_${idf_target_for_macro}_DEV
|
|
-DARDUINO_ARCH_ESP32
|
|
-DARDUINO_BOARD="${idf_target_caps}_DEV"
|
|
-DARDUINO_VARIANT="${CONFIG_ARDUINO_VARIANT}"
|
|
-DESP32)
|
|
|
|
if(CONFIG_AUTOSTART_ARDUINO)
|
|
# in autostart mode, arduino-esp32 contains app_main() function and needs to
|
|
# reference setup() and loop() in the main component. If we add main
|
|
# component to priv_requires then we create a large circular dependency
|
|
# (arduino-esp32 -> main -> arduino-esp32) and can get linker errors, so
|
|
# instead we add setup() and loop() to the undefined symbols list so the
|
|
# linker will always include them.
|
|
#
|
|
# (As they are C++ symbol, we need to add the C++ mangled names.)
|
|
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u _Z5setupv -u _Z4loopv")
|
|
endif()
|
|
|
|
# This function adds a dependency on the given component if the component is included into the build.
|
|
function(maybe_add_component component_name)
|
|
idf_build_get_property(components BUILD_COMPONENTS)
|
|
if (${component_name} IN_LIST components)
|
|
idf_component_get_property(lib_name ${component_name} COMPONENT_LIB)
|
|
target_link_libraries(${COMPONENT_LIB} PUBLIC ${lib_name})
|
|
endif()
|
|
endfunction()
|
|
|
|
if(IDF_TARGET MATCHES "esp32s2|esp32s3" AND CONFIG_TINYUSB_ENABLED)
|
|
maybe_add_component(arduino_tinyusb)
|
|
endif()
|
|
if(NOT CONFIG_ARDUINO_SELECTIVE_COMPILATION OR CONFIG_ARDUINO_SELECTIVE_ArduinoOTA)
|
|
maybe_add_component(esp_https_ota)
|
|
endif()
|