Files
arduino-libs/arduino-cli/libraries/Blynk/extras/build-examples.py
2024-07-20 22:09:06 +08:00

193 lines
6.6 KiB
Python

#!/usr/bin/env python
import os, sys, fnmatch
from subprocess import call
arduino_ide_path = os.environ['ARDUINO_IDE_PATH']
energia_ide_path = os.environ['ENERGIA_IDE_PATH']
ESP8266 = { "fqbn": "esp8266:esp8266:nodemcuv2:CpuFrequency=80,FlashSize=4M3M" }
metadata = {
"Arduino_Yun.ino" : { "fqbn": "arduino:avr:yun" },
"Arduino_Zero_M0_Serial.ino" : { "fqbn": "arduino:samd:arduino_zero_native" },
"ENC28J60.ino" : { "fqbn": "arduino:avr:nano:cpu=atmega328" },
"ESP8266_Shield.ino" : { "fqbn": "arduino:avr:mega:cpu=atmega2560" },
"RN_XV_WiFly.ino" : { "fqbn": "arduino:avr:leonardo" },
"Serial_HM10_HC08.ino" : { "fqbn": "arduino:avr:leonardo" },
"Adafruit_Feather_32u4_BLE.ino": { "fqbn": "adafruit:avr:feather32u4" },
"Seeed_EthernetV2_0.ino" : { "fqbn": "arduino:avr:uno" },
# arduino.org
"Arduino_Ethernet2.ino" : { "skip": True },
"Arduino_org_UNO_WiFi.ino" : { "fqbn": "arduino:avr:unowifi" },
# ESP8266
"Sparkfun_Blynk_Board.ino" : ESP8266,
"NodeMCU.ino" : ESP8266,
"ESP8266_DirectConnect.ino" : ESP8266,
"ESP8266_Standalone.ino" : ESP8266,
"ESP8266_Standalone_Manual_IP.ino" : ESP8266,
"ESP8266_Standalone_SmartConfig.ino" : ESP8266,
"ESP8266_Standalone_SSL.ino" : ESP8266,
"ESP8266_Station.ino" : ESP8266,
"ESP8266_AccessPoint.ino" : ESP8266,
"ESP8266_WiFi.ino" : ESP8266,
"ESP32_WiFi.ino" : { "fqbn": "espressif:esp32:esp32:FlashMode=qio,FlashFreq=80,FlashSize=4M" },
"myPlant_ESP8266.ino" : ESP8266,
"Template_ESP8266.ino" : ESP8266,
"Template_MKR1000.ino" : { "fqbn": "arduino:samd:mkr1000" },
# TheAirBoard
"TheAirBoard_WiFly.ino" : { "fqbn": "arduino:avr:fio" },
"TheAirBoard_BLE_Link.ino" : { "fqbn": "arduino:avr:fio" },
# Digistump
"Digistump_Digispark.ino" : { "fqbn": "digistump:avr:digispark-pro" },
"Digistump_Oak.ino" : { "fqbn": "digistump:oak:oak1:CpuFrequency=80,UploadTool=oak_ota,FlashSize=OAK,RomConfig=Full" },
# Intel
"Intel_Edison_WiFi.ino" : { "fqbn": "Intel:i686:izmir_ec" },
"Intel_Galileo.ino" : { "fqbn": "Intel:i586:izmir_fg" },
"Arduino_101_BLE.ino" : { "fqbn": "Intel:arc32:arduino_101" },
# RBL
"RedBear_Duo_WiFi.ino" : { "fqbn": "RedBear:STM32F2:RedBear_Duo" },
"RedBear_Duo_BLE.ino" : { "fqbn": "RedBear:STM32F2:RedBear_Duo" },
"RedBearLab_BLE_Nano.ino" : { "fqbn": "RedBear:nRF51822:nRF51822_NANO_32KB" },
"RedBearLab_BlendMicro.ino" : { "fqbn": "RedBear:avr:blendmicro8" },
"RedBearLab_BLE_Mini.ino" : { "fqbn": "arduino:avr:leonardo" },
# GSM
"SIM800_SIM900.ino" : { "fqbn": "arduino:avr:leonardo" },
#Other
"Blue_Pill_STM32F103C.ino" : { "fqbn": "stm32duino:STM32F1:genericSTM32F103C:device_variant=STM32F103C8" },
"Fishino.ino" : { "skip": True }, # requires extra lib
"BBC_MicroBit.ino" : { "fqbn": "sandeepmistry:nRF5:BBCmicrobit:softdevice=s130" },
"Simblee_BLE.ino" : { "fqbn": "Simblee:Simblee:Simblee" },
"RFDuino_BLE.ino" : { "fqbn": "RFduino:RFduino:RFduino" },
"DFRobot_Bluno_BLE_Link.ino" : { "fqbn": "arduino:avr:leonardo" },
"Microduino_BLE.ino" : { "fqbn": "arduino:avr:leonardo" },
"TinyDuino_WiFi.ino" : { "fqbn": "arduino:avr:pro:cpu=8MHzatmega328" },
"WildFire_V3.ino" : { "fqbn": "WildFire- 4.0.0:avr:wildfireo3" },
"WildFire_V4.ino" : { "fqbn": "WildFire- 4.0.0:avr:wildfireo3" },
"chipKIT_Uno32.ino" : { "fqbn": "chipKIT:pic32:uno_pic32" },
"LightBlue_Bean.ino" : { "fqbn": "LightBlue-Bean:avr:beanplus" },
"Teensy3.ino" : { "fqbn": "teensy:avr:teensy31:usb=serial,speed=96,opt=o2std,keys=en-us" },
"ATtiny85.ino" : { "fqbn": "attiny:avr:ATtinyX5:cpu=attiny85,clock=internal8" },
# Special examples
"ESP8266.ino" : ESP8266,
"HandleDisconnect.ino" : ESP8266,
# No linux support
"LinkItONE.ino" : { "skip": True },
# Energia
"Energia_WiFi.ino" : { "fqbn": "energia:msp430:MSP-EXP430F5529LP" },
"Energia_BLE.ino" : { "fqbn": "energia:msp432r:MSP-EXP432P401RR" },
"Energia_Ethernet.ino" : { "fqbn": "energia:tivac:EK-TM4C1294XL" },
"Energia_Serial_USB.ino" : { "fqbn": "energia:tivac:EK-LM4F120XL" },
}
def find_files(directory, pattern):
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
yield filename
examples = find_files('examples', '*.ino')
abs_examples = map(lambda x: os.path.abspath(x), examples)
logfile = open("./build.log","wb")
'''
builder = "./arduino-builder"
builder_args = [
"-verbose",
"-hardware", "./hardware",
"-hardware", os.path.expanduser("~/.arduino15/packages/"),
"-hardware", "/data2/sketchbook/hardware",
"-tools", "./hardware/tools",
"-tools", os.path.expanduser("~/.arduino15/packages/"),
"-tools", "./tools-builder",
"-libraries",os.path.expanduser("~/.arduino15/packages/"),
"-libraries","./libraries",
"-libraries","/data2/sketchbook/libraries/",
]
'''
failed = []
built = []
skipped = []
for fn in abs_examples:
path, ino = os.path.split(fn)
if ino in metadata:
m = metadata[ino]
m['sketch_found'] = True
if "skip" in m:
skipped.append(ino)
continue
if not "fqbn" in m:
m["fqbn"] = "arduino:avr:uno"
else:
#continue
m = { "fqbn": "arduino:avr:uno" }
if len(sys.argv) > 1:
if ino != sys.argv[1]:
continue
print >>logfile, "\n\n", "================="
print >>logfile, "Building:", ino
print >>logfile, "=================", "\n"
logfile.flush()
print "Building:", ino, "...",
sys.stdout.flush()
if m["fqbn"].startswith("energia:"):
os.chdir(energia_ide_path)
builder = "./energia"
else:
os.chdir(arduino_ide_path)
builder = "./arduino"
cmd = [
builder,
"--verbose",
"--verify",
"--board", m["fqbn"],
fn
]
#print cmd
rc = call(cmd, stdout=logfile, stderr=logfile)
if rc:
print "Failed"
failed.append(ino)
else:
print "OK"
built.append(ino)
print "=================="
if len(failed):
print " Failed:", failed
sys.exit(1)
else:
print " All", len(built), "examples OK"
for ino, m in metadata.items():
if not 'sketch_found' in m:
print "Sketch not found:", ino