Build script converted to python and added to git

This commit is contained in:
Bertrand Songis
2016-03-23 23:46:49 +01:00
parent 20ab3a324b
commit e3d70817ea
2 changed files with 487 additions and 0 deletions
+179
View File
@@ -0,0 +1,179 @@
#!/usr/bin/env python
import os
import sys
from fwoptions import *
# Board types
BOARD_9X = 0
BOARD_GRUVIN9X = 1
BOARD_SKY9X = 2
BOARD_TARANIS = 3
BOARD_HORUS = 4
# Board families
BOARD_FAMILY_AVR = 0
BOARD_FAMILY_ARM = 1
srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.."
filename = sys.argv[1]
root, ext = os.path.splitext(filename)
options = root.split("-")
if options[0] != "opentx":
sys.exit("Invalid firmware");
filename = "opentx-"
optcount = 1
command_options = {}
if options[optcount] == "9x":
command_options["PCB"] = "9X"
firmware_options = options_9x
maxsize = 65536
board = BOARD_9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "9xr":
command_options["PCB"] = "9XR"
firmware_options = options_9x
maxsize = 65536
board = BOARD_9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "9x128":
command_options["PCB"] = "9X128"
command_options["FRSKY_STICKS"] = "YES"
firmware_options = options_9x128
maxsize = 65536*2
board = BOARD_9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "9xr128":
command_options["PCB"] = "9XR128"
command_options["FRSKY_STICKS"] = "YES"
firmware_options = options_9x128
maxsize = 65536*2
board = BOARD_9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "gruvin9x":
command_options["PCB"] = "GRUVIN9X"
command_options["EXT"] = "FRSKY"
firmware_options = options_gruvin9x
maxsize = 65536*4
board = BOARD_GRUVIN9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "mega2560":
command_options["PCB"] = "MEGA2560"
command_options["EXT"] = "FRSKY"
firmware_options = options_mega2560
maxsize = 65536*4
board = BOARD_GRUVIN9X
board_family = BOARD_FAMILY_AVR
elif options[optcount] == "sky9x":
command_options["PCB"] = "SKY9X"
firmware_options = options_sky9x
maxsize = 65536*4
board = BOARD_SKY9X
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "9xrpro":
command_options["PCB"] = "9XRPRO"
command_options["SDCARD"] = "YES"
firmware_options = options_sky9x
maxsize = 65536*4
board = BOARD_SKY9X
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "ar9x":
command_options["PCB"] = "AR9X"
command_options["SDCARD"] = "YES"
command_options["HARDWARE_VOLUME"] = "NO"
firmware_options = options_ar9x
maxsize = 65536*4
board = BOARD_SKY9X
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "taranis":
command_options["PCB"] = "TARANIS"
firmware_options = options_taranis
maxsize = 65536*8
board = BOARD_TARANIS
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "taranisplus":
command_options["PCB"] = "TARANIS"
command_options["PCBREV"] = "REVPLUS"
firmware_options = options_taranisplus
maxsize = 65536*8
board = BOARD_TARANIS
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "taranisx9e":
command_options["PCB"] = "TARANIS"
command_options["PCBREV"] = "REV9E"
firmware_options = options_taranisx9e
maxsize = 65536*8
board = BOARD_TARANIS
board_family = BOARD_FAMILY_ARM
elif options[optcount] == "horus":
command_options["PCB"] = "HORUS"
firmware_options = options_horus
maxsize = 2*1024*1024
board = BOARD_HORUS
board_family = BOARD_FAMILY_ARM
else:
sys.exit("Unknown board")
filename += options[optcount]
optcount += 1
# The firmware options
for opt, value in firmware_options.items():
found = False
for i in range(optcount, len(options)):
if options[i] == opt:
found = True
break
if found:
optvalue = value[1];
filename += "-" + opt;
else:
optvalue = value[2]
if optvalue != None:
command_options[value[0]] = optvalue
# The firmware display language
language = ""
for key in languages:
if key == options[-1]:
language = key
if not language:
sys.exit("Invalid language")
command_options["TRANSLATIONS"] = language.upper()
filename += "-" + language
if board_family == BOARD_FAMILY_ARM:
ext = ".bin"
else:
ext = ".hex"
filename += ext
firmware = "firmware" + ext
# Launch CMake
cmd = "cmake"
for opt, value in command_options.items():
cmd += " -D%s=%s" % (opt, value)
cmd += " " + srcdir
if "OPENTX_VERSION_SUFFIX" in os.environ:
cmd += ' -DVERSION_SUFFIX="%s"' % os.environ["OPENTX_VERSION_SUFFIX"]
print cmd
os.system(cmd)
# Launch make firmware
cmd = "make firmware"
os.system(cmd)
# Check binary size
if board_family == BOARD_FAMILY_ARM:
size = os.stat(firmware).st_size
else:
os.system("avr-size -A %s | grep Total | cut -f2- -d \" \" > ./size" % firmware)
size = file("./size").read().strip()
if int(size) > maxsize:
exit("Invalid size")
+308
View File
@@ -0,0 +1,308 @@
#!/usr/bin/env python
languages = (
"en",
"fr",
"se",
"it",
"cz",
"de",
"pt",
"es",
"pl",
"nl"
)
tts_avr = {
"ttsen": ("TTS", "EN", None),
"ttsfr": ("TTS", "FR", None),
"ttsit": ("TTS", "IT", None),
"ttscz": ("TTS", "CZ", None),
"ttsde": ("TTS", "DE", None),
"ttspt": ("TTS", "PT", None),
}
options_9x_ext = {
"nmea": ("EXT", "NMEA", None),
"frsky": ("EXT", "FRSKY", None),
"telemetrez": ("EXT", "TELEMETREZ", None),
"jeti": ("EXT", "JETI", None),
"ardupilot": ("EXT", "ARDUPILOT", None),
"mavlink": ("EXT", "MAVLINK", None),
}
options_9x = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nosplash": ("SPLASH", "NO", "YES"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"audio": ("AUDIO", "YES", "NO"),
"voice": ("VOICE", "YES", "NO"),
"haptic": ("HAPTIC", "YES", "NO"),
"pwmbl": ("PWM_BACKLIGHT", "YES", "NO"),
"turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"),
"acurStats": ("ACCURAT_THROTTLE_STATS", "YES", "NO"),
"arithOvfl": ("ARITHMETIC_OVERFLOW_CHECK", "YES", "NO"),
# "PXX": ("PXX", "YES", "NO"),
"DSM2": ("DSM2", "PPM ", "NO"),
"potscroll": ("NAVIGATION", "POTS ", "NO"),
"rotenc": ("NAVIGATION", "ROTENC ", "NO"),
"sp22": ("SP22", "YES", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5 ", None),
"thrtrace": ("THR_TRACE", "YES", "NO"),
"pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"nogps": ("GPS", "NO", "YES"),
"nogauges": ("GAUGES", "NO", "YES"),
"novario": ("VARIO", "NO", "YES"),
"nowshh": ("WS_HOW_HIGH", "NO", "YES"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE ", None),
"fasoffset": ("FAS_OFFSET", "YES", "NO"),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"stickrev": ("FRSKY_STICKS", "YES", "NO")
}
options_9x.update(options_9x_ext)
options_9x.update(tts_avr)
options_9x128 = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nosplash": ("SPLASH", "NO", "YES"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"audio": ("AUDIO", "YES", "NO"),
"voice": ("VOICE", "YES", "NO"),
"haptic": ("HAPTIC", "YES", "NO"),
"pwmbl": ("PWM_BACKLIGHT", "YES", "NO"),
"turnigyfix": ("TURNIGY_TRANSMITTER_FIX", "YES", "NO"),
# "PXX": ("PXX", "YES", "NO"),
"DSM2": ("DSM2", "PPM", "NO"),
"potscroll": ("NAVIGATION", "POTS", "NO"),
"rotenc": ("NAVIGATION", "ROTENC", "NO"),
"sp22": ("SP22", "YES", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"thrtrace": ("THR_TRACE", "YES", "NO"),
"pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"nogps": ("GPS", "NO", "YES"),
"nogauges": ("GAUGES", "NO", "YES"),
"novario": ("VARIO", "NO", "YES"),
"nowshh": ("WS_HOW_HIGH", "NO", "YES"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES")
}
options_9x128.update(options_9x_ext)
options_9x128.update(tts_avr)
options_gruvin9x = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"sdcard": ("SDCARD", "YES", "NO"),
"voice": ("VOICE", "YES", "NO"),
"PXX": ("PXX", "YES", "NO"),
"DSM2": ("DSM2", "SERIAL", "NO"),
"DSM2PPM": ("DSM2", "PPM", "NO"),
"potscroll": ("NAVIGATION", "POTS", "NO"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES")
}
options_gruvin9x.update(tts_avr)
options_mega2560 = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"PWR": ("PWRMANAGE", "YES", "NO"),
"sdcard": ("SDCARD", "YES", "NO"),
"voice": ("VOICE", "YES", "NO"),
"PXX": ("PXX", "YES", "NO"),
"DSM2": ("DSM2", "SERIAL", "NO"),
"DSM2PPM": ("DSM2", "PPM", "NO"),
"ST7565R": ("LCD", "ST7565R", None),
"ERC12864FSF": ("LCD", "ERC12864FSF", None),
"ST7920": ("LCD", "ST7920", None),
"potscroll": ("NAVIGATION", "POTS", "NO"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"pgbar": ("EEPROM_PROGRESS_BAR", "YES", "NO"),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES")
}
options_mega2560.update(tts_avr)
options_sky9x = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"potscroll": ("NAVIGATION", "POTS", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"bluetooth": ("BLUETOOTH", "YES", "NO"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES")
}
options_ar9x = {
"heli": ("HELI", "YES", "NO"),
"templates": ("TEMPLATES", "YES", "NO"),
"nofp": ("FLIGHT_MODES", "NO", "YES"),
"nocurves": ("CURVES", "NO", "YES"),
"ppmca": ("PPM_CENTER_ADJUSTABLE", "YES", "NO"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"gvars": ("GVARS", "YES", "NO"),
"symlimits": ("PPM_LIMITS_SYMETRICAL", "YES", "NO"),
"potscroll": ("NAVIGATION", "POTS", "NO"),
"autosource": ("AUTOSOURCE", "YES", "NO"),
"autoswitch": ("AUTOSWITCH", "YES", "NO"),
"dblkeys": ("DBLKEYS", "YES", "NO"),
"nographics": ("GRAPHICS", "NO", "YES"),
"battgraph": ("BATTGRAPH", "YES", "NO"),
"nobold": ("BOLD", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"imperial": ("UNITS", "IMPERIAL", "METRIC"),
"bluetooth": ("BLUETOOTH", "YES", "NO"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
# "rtc": ("RTCLOCK", "YES", "NO"),
# "volume": ("HARDWARE_VOLUME", "YES", "NO") # Renove HARDWARE_VOLUME=NO in the commandline below when activating!
}
options_taranis = {
"noheli": ("HELI", "NO", "YES"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
"haptic": ("HAPTIC", "YES", "NO"),
"nogvars": ("GVARS", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"massstorage": ("USB", "MASSSTORAGE", None),
"cli": ("USB", "SERIAL", None),
"mixersmon": ("MIXERS_MONITOR", "YES", "NO"),
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"timer3": ("TIMERS", "3", "2"),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO")
}
options_taranisplus = {
"noheli": ("HELI", "NO", "YES"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
"SWR": ("SWR", "YES", "NO"),
"nogvars": ("GVARS", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"massstorage": ("USB", "MASSSTORAGE", None),
"cli": ("USB", "SERIAL", None),
"mixersmon": ("MIXERS_MONITOR", "YES", "NO"),
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"timer3": ("TIMERS", "3", None),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO")
}
options_taranisx9e = {
"noheli": ("HELI", "NO", "YES"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
"SWR": ("SWR", "YES", "NO"),
"nogvars": ("GVARS", "NO", "YES"),
"sqt5font": ("FONT", "SQT5", None),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"massstorage": ("USB", "MASSSTORAGE", None),
"cli": ("USB", "SERIAL", None),
"mixersmon": ("MIXERS_MONITOR", "YES", "NO"),
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
"timer3": ("TIMERS", "3", None),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
"horussticks": ("STICKS", "HORUS", "STANDARD")
}
options_horus = {
"noheli": ("HELI", "NO", "YES"),
"ppmus": ("PPM_UNIT", "US", "PERCENT_PREC1"),
"lua": ("LUA", "YES", "NO_MODEL_SCRIPTS"),
"nogvars": ("GVARS", "NO", "YES"),
"faimode": ("FAI", "YES", None),
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"massstorage": ("USB", "MASSSTORAGE", None),
"cli": ("USB", "SERIAL", None),
"timer3": ("TIMERS", "3", "2"),
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO")
}