193 lines
6.6 KiB
Python
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
|