Sync edgetx to Gitea
This commit is contained in:
Executable
+291
@@ -0,0 +1,291 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import shutil
|
||||
|
||||
from fwoptions import *
|
||||
|
||||
# Error codes
|
||||
FIRMWARE_SIZE_TOO_BIG = 1
|
||||
COMPILATION_ERROR = 4
|
||||
INVALID_FIRMWARE = 5
|
||||
INVALID_BOARD = 6
|
||||
INVALID_LANGUAGE = 7
|
||||
|
||||
|
||||
def build_target(target, path, cmake_options):
|
||||
srcdir = os.path.dirname(os.path.realpath(__file__)) + "/../.."
|
||||
outpath = path + ".out"
|
||||
errpath = path + ".err"
|
||||
|
||||
# Launch CMake
|
||||
cmd = ["cmake"]
|
||||
for option, value in cmake_options.items():
|
||||
cmd.append("-D%s=%s" % (option, value))
|
||||
if "EDGETX_VERSION_SUFFIX" in os.environ:
|
||||
suffix = os.environ["EDGETX_VERSION_SUFFIX"]
|
||||
cmd.append('-DVERSION_SUFFIX="%s"' % suffix)
|
||||
# if not suffix.startswith("rel"):
|
||||
# cmd.append('-DTEST_BUILD_WARNING=YES')
|
||||
cmd.append(srcdir)
|
||||
|
||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
output, error = proc.communicate()
|
||||
if proc.returncode == 0:
|
||||
open(outpath, "a").write("\n".join(cmd) + output.decode("utf-8") + error.decode("utf-8"))
|
||||
else:
|
||||
open(errpath, "w").write(output.decode("utf-8") + error.decode("utf-8"))
|
||||
return COMPILATION_ERROR
|
||||
|
||||
# Launch make
|
||||
cmd = ["make", "-j3", target]
|
||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
output, error = proc.communicate()
|
||||
if proc.returncode == 0:
|
||||
open(outpath, "a").write(output.decode("utf-8") + error.decode("utf-8"))
|
||||
else:
|
||||
open(errpath, "w").write(output.decode("utf-8") + error.decode("utf-8"))
|
||||
return COMPILATION_ERROR
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
return INVALID_FIRMWARE
|
||||
|
||||
target = sys.argv[1]
|
||||
directory, filename = os.path.split(sys.argv[2])
|
||||
root, ext = os.path.splitext(filename)
|
||||
options = root.split("-")
|
||||
|
||||
if len(options) < 2 or options[0] != "opentx":
|
||||
return INVALID_FIRMWARE
|
||||
|
||||
optcount = 1
|
||||
cmake_options = {}
|
||||
board_name = options[optcount]
|
||||
|
||||
if board_name == "x9lite":
|
||||
cmake_options["PCB"] = "X9LITE"
|
||||
firmware_options = options_taranis_x9lite
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x9lites":
|
||||
cmake_options["PCB"] = "X9LITES"
|
||||
firmware_options = options_taranis_x9lite
|
||||
maxsize = 65536 * 8
|
||||
elif options[optcount] == "x7":
|
||||
cmake_options["PCB"] = "X7"
|
||||
firmware_options = options_taranis_x7
|
||||
maxsize = 65536 * 8
|
||||
elif options[optcount] == "x7access":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "ACCESS"
|
||||
firmware_options = options_taranis_x7
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "xlite":
|
||||
cmake_options["PCB"] = "XLITE"
|
||||
firmware_options = options_taranis_xlite
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "xlites":
|
||||
cmake_options["PCB"] = "XLITES"
|
||||
firmware_options = options_taranis_xlites
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x9d":
|
||||
cmake_options["PCB"] = "X9D"
|
||||
firmware_options = options_taranis_x9d
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x9d+":
|
||||
cmake_options["PCB"] = "X9D+"
|
||||
firmware_options = options_taranis_x9dp
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x9d+2019":
|
||||
cmake_options["PCB"] = "X9D+"
|
||||
cmake_options["PCBREV"] = "2019"
|
||||
firmware_options = options_taranis_x9dp
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x9e":
|
||||
cmake_options["PCB"] = "X9E"
|
||||
firmware_options = options_taranis_x9e
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "x10":
|
||||
cmake_options["PCB"] = "X10"
|
||||
firmware_options = options_horus_x10
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "x10express":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "EXPRESS"
|
||||
firmware_options = options_horus_x10
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "x12s":
|
||||
cmake_options["PCB"] = "X12S"
|
||||
firmware_options = options_horus_x12s
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "lr3pro":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "LR3PRO"
|
||||
firmware_options = options_betafpv_lr3pro
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "tlite":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "TLITE"
|
||||
firmware_options = options_jumper_tlite
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "t12":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "T12"
|
||||
firmware_options = options_jumper_t12
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "tx12":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "TX12"
|
||||
firmware_options = options_radiomaster_tx12
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "zorro":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "ZORRO"
|
||||
firmware_options = options_radiomaster_zorro
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "boxer":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "BOXER"
|
||||
firmware_options = options_radiomaster_boxer
|
||||
maxsize = 65536 * 8 * 2
|
||||
elif board_name == "pocket":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "POCKET"
|
||||
firmware_options = options_radiomaster_pocket
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "mt12":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "MT12"
|
||||
firmware_options = options_radiomaster_mt12
|
||||
maxsize = 65536 * 8 * 2
|
||||
elif board_name == "gx12":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "GX12"
|
||||
firmware_options = options_radiomaster_gx12
|
||||
maxsize = 65536 * 8 * 2
|
||||
elif board_name == "t8":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "T8"
|
||||
firmware_options = options_radiomaster_t8
|
||||
maxsize = 65536 * 8
|
||||
elif board_name == "t15":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "T15"
|
||||
firmware_options = options_jumper_t16
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "t16":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "T16"
|
||||
firmware_options = options_jumper_t16
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "t18":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "T18"
|
||||
firmware_options = options_jumper_t18
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "tx16s":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "TX16S"
|
||||
firmware_options = options_radiomaster_tx16s
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "f16":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "F16"
|
||||
firmware_options = options_fatfish_f16
|
||||
maxsize = 2 * 1024 * 1024
|
||||
elif board_name == "v12":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "V12"
|
||||
firmware_options = options_helloradiosky_v12
|
||||
maxsize = 65536 * 8 * 2
|
||||
elif board_name == "v14":
|
||||
cmake_options["PCB"] = "X7"
|
||||
cmake_options["PCBREV"] = "V14"
|
||||
firmware_options = options_helloradiosky_v14
|
||||
maxsize = 65536 * 8 * 2
|
||||
elif board_name == "v16":
|
||||
cmake_options["PCB"] = "X10"
|
||||
cmake_options["PCBREV"] = "V16"
|
||||
firmware_options = options_helloradiosky_v16
|
||||
maxsize = 2 * 1024 * 1024
|
||||
else:
|
||||
return INVALID_BOARD
|
||||
|
||||
if target == "firmware":
|
||||
binary = "firmware.bin"
|
||||
ext = ".bin"
|
||||
filename = "opentx"
|
||||
else:
|
||||
return INVALID_BOARD
|
||||
|
||||
filename += "-" + board_name
|
||||
optcount += 1
|
||||
|
||||
# The firmware options
|
||||
for opt, values in firmware_options.items():
|
||||
found = False
|
||||
for i in range(optcount, len(options)):
|
||||
if options[i] == opt:
|
||||
found = True
|
||||
break
|
||||
|
||||
if not isinstance(values, list):
|
||||
values = [values]
|
||||
|
||||
for name, value1, value2 in values:
|
||||
if found:
|
||||
value = value1
|
||||
filename += "-" + opt
|
||||
else:
|
||||
value = value2
|
||||
|
||||
if value is not None:
|
||||
cmake_options[name] = value
|
||||
|
||||
# The firmware display language
|
||||
language = ""
|
||||
for key in languages:
|
||||
if key == options[-1]:
|
||||
language = key
|
||||
if not language:
|
||||
return INVALID_LANGUAGE
|
||||
cmake_options["TRANSLATIONS"] = language.upper()
|
||||
|
||||
filename += "-" + language + ext
|
||||
path = os.path.join(directory, filename)
|
||||
errpath = path + ".err"
|
||||
|
||||
if os.path.isfile(errpath):
|
||||
print(filename)
|
||||
return COMPILATION_ERROR
|
||||
|
||||
if os.path.isfile(path):
|
||||
print(filename)
|
||||
return 0
|
||||
|
||||
result = build_target(target, path, cmake_options)
|
||||
if result != 0:
|
||||
print(filename)
|
||||
return result
|
||||
|
||||
if target == "firmware":
|
||||
# Check binary size
|
||||
size = os.stat(binary).st_size
|
||||
if size > maxsize:
|
||||
return FIRMWARE_SIZE_TOO_BIG
|
||||
|
||||
# Copy binary to the binaries directory
|
||||
shutil.move(binary, path)
|
||||
|
||||
print(filename)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
Reference in New Issue
Block a user