# 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 "4.4.0") set(max_supported_idf_version "4.4.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/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-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/IPAddress.cpp cores/esp32/IPv6Address.cpp cores/esp32/libb64/cdecode.c cores/esp32/libb64/cencode.c cores/esp32/main.cpp cores/esp32/MD5Builder.cpp cores/esp32/Print.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(LIBRARY_SRCS libraries/ArduinoOTA/src/ArduinoOTA.cpp libraries/AsyncUDP/src/AsyncUDP.cpp libraries/BluetoothSerial/src/BluetoothSerial.cpp libraries/BluetoothSerial/src/BTAddress.cpp libraries/BluetoothSerial/src/BTAdvertisedDeviceSet.cpp libraries/BluetoothSerial/src/BTScanResultsSet.cpp libraries/DNSServer/src/DNSServer.cpp libraries/EEPROM/src/EEPROM.cpp libraries/ESPmDNS/src/ESPmDNS.cpp libraries/Ethernet/src/ETH.cpp libraries/FFat/src/FFat.cpp libraries/FS/src/FS.cpp libraries/FS/src/vfs_api.cpp libraries/HTTPClient/src/HTTPClient.cpp libraries/HTTPUpdate/src/HTTPUpdate.cpp libraries/LittleFS/src/LittleFS.cpp libraries/I2S/src/I2S.cpp libraries/NetBIOS/src/NetBIOS.cpp libraries/Preferences/src/Preferences.cpp 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/SD_MMC/src/SD_MMC.cpp libraries/SD/src/SD.cpp libraries/SD/src/sd_diskio.cpp libraries/SD/src/sd_diskio_crc.c libraries/SimpleBLE/src/SimpleBLE.cpp libraries/SPIFFS/src/SPIFFS.cpp libraries/SPI/src/SPI.cpp libraries/Ticker/src/Ticker.cpp libraries/Update/src/Updater.cpp libraries/Update/src/HttpsOTAUpdate.cpp libraries/USB/src/USBHID.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 libraries/WebServer/src/WebServer.cpp libraries/WebServer/src/Parsing.cpp libraries/WebServer/src/detail/mimetable.cpp libraries/WiFiClientSecure/src/ssl_client.cpp libraries/WiFiClientSecure/src/esp_crt_bundle.c libraries/WiFiClientSecure/src/WiFiClientSecure.cpp libraries/WiFi/src/WiFiAP.cpp libraries/WiFi/src/WiFiClient.cpp libraries/WiFi/src/WiFi.cpp libraries/WiFi/src/WiFiGeneric.cpp libraries/WiFi/src/WiFiMulti.cpp libraries/WiFi/src/WiFiScan.cpp libraries/WiFi/src/WiFiServer.cpp libraries/WiFi/src/WiFiSTA.cpp libraries/WiFi/src/WiFiUdp.cpp libraries/WiFiProv/src/WiFiProv.cpp libraries/Wire/src/Wire.cpp ) set(BLE_SRCS 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(includedirs variants/${CONFIG_ARDUINO_VARIANT}/ cores/esp32/ libraries/ArduinoOTA/src libraries/AsyncUDP/src libraries/BLE/src libraries/BluetoothSerial/src libraries/DNSServer/src libraries/EEPROM/src libraries/ESP32/src libraries/ESPmDNS/src libraries/Ethernet/src libraries/FFat/src libraries/FS/src libraries/HTTPClient/src libraries/HTTPUpdate/src libraries/LittleFS/src libraries/I2S/src libraries/NetBIOS/src libraries/Preferences/src libraries/RainMaker/src libraries/SD_MMC/src libraries/SD/src libraries/SimpleBLE/src libraries/SPIFFS/src libraries/SPI/src libraries/Ticker/src libraries/Update/src libraries/USB/src libraries/WebServer/src libraries/WiFiClientSecure/src libraries/WiFi/src libraries/WiFiProv/src libraries/Wire/src ) set(srcs ${CORE_SRCS} ${LIBRARY_SRCS} ${BLE_SRCS}) set(priv_includes cores/esp32/libb64) set(requires spi_flash mbedtls mdns esp_adc_cal wifi_provisioning nghttp wpa_supplicant) set(priv_requires fatfs nvs_flash app_update spiffs bootloader_support openssl bt esp_ipc esp_hid) 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) target_compile_options(${COMPONENT_TARGET} PUBLIC -DARDUINO=10812 -DARDUINO_${idf_target_caps}_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() maybe_add_component(esp-dsp) if(CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_STACK) maybe_add_component(esp_rainmaker) maybe_add_component(qrcode) endif() 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() if(NOT CONFIG_ARDUINO_SELECTIVE_COMPILATION OR CONFIG_ARDUINO_SELECTIVE_LITTLEFS) maybe_add_component(esp_littlefs) endif()