Implement 'boards' command // Resolve #11

This commit is contained in:
Ivan Kravets
2014-12-27 23:59:20 +02:00
parent 01bbfcced0
commit 2aa4d0af33
16 changed files with 1251 additions and 105 deletions
+9 -6
View File
@@ -11,7 +11,7 @@ from time import sleep
from SCons.Script import (AlwaysBuild, Builder, COMMAND_LINE_TARGETS, Default,
DefaultEnvironment, Exit)
from platformio.util import get_serialports, reset_serialport
from platformio.util import get_serialports
env = DefaultEnvironment()
@@ -41,7 +41,10 @@ env.Replace(
"-mmcu=$BOARD_MCU"
],
CXXFLAGS=["-fno-exceptions"],
CXXFLAGS=[
"-fno-exceptions",
"-fno-threadsafe-statics"
],
CPPDEFINES=[
"F_CPU=$BOARD_F_CPU"
@@ -101,7 +104,7 @@ env.Append(
)
def reset_device():
def before_upload():
def rpi_sysgpio(path, value):
with open(path, "w") as f:
@@ -115,7 +118,7 @@ def reset_device():
rpi_sysgpio("/sys/class/gpio/gpio18/value", 0)
rpi_sysgpio("/sys/class/gpio/unexport", 18)
else:
return reset_serialport(env.subst("$UPLOAD_PORT"))
return env.FlushSerialBuffer("$UPLOAD_PORT")
CORELIBS = env.ProcessGeneral()
@@ -147,7 +150,7 @@ else:
#
upload = env.Alias(["upload", "uploadlazy"], target_hex, [
lambda target, source, env: reset_device(), "$UPLOADHEXCMD"])
lambda target, source, env: before_upload(), "$UPLOADHEXCMD"])
AlwaysBuild(upload)
#
@@ -155,7 +158,7 @@ AlwaysBuild(upload)
#
uploadeep = env.Alias("uploadeep", target_eep, [
lambda target, source, env: reset_device(), "$UPLOADEEPCMD"])
lambda target, source, env: before_upload(), "$UPLOADEEPCMD"])
AlwaysBuild(uploadeep)
#
@@ -12,35 +12,31 @@ from SCons.Script import Import, Return
env = None
Import("env")
BOARD_OPTIONS = env.ParseBoardOptions(
join("$PLATFORMFW_DIR", "boards.txt"),
"${BOARD}"
)
ARDUINO_VERSION = int(
open(join(env.subst("$PLATFORMFW_DIR"),
"version.txt")).read().replace(".", "").strip())
# usb flags
ARDUINO_USBDEFINES = []
if "build.usb_product" in BOARD_OPTIONS:
if "usb_product" in env.subst("${BOARD_OPTIONS['build']}"):
ARDUINO_USBDEFINES = [
"USB_VID=%s" % BOARD_OPTIONS['build.vid'],
"USB_PID=%s" % BOARD_OPTIONS['build.pid'],
'USB_PRODUCT=\\"%s\\"' % BOARD_OPTIONS['build.usb_product'].replace(
'"', "")
"USB_VID=${BOARD_OPTIONS['build']['vid']}",
"USB_PID=${BOARD_OPTIONS['build']['pid']}",
'USB_PRODUCT=\\"%s\\"' % (env.subst(
"${BOARD_OPTIONS['build']['usb_product']}").replace('"', ""))
]
# include board variant
env.VariantDir(
join("$BUILD_DIR", "FrameworkArduinoVariant"),
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
join("$PLATFORMFW_DIR", "variants", "${BOARD_OPTIONS['build']['variant']}")
)
env.Append(
CPPDEFINES=[
"ARDUINO_ARCH_%s" % env.subst("$PLATFORM").upper()[-3:],
"ARDUINO=%d" % ARDUINO_VERSION,
"ARDUINO_%s" % BOARD_OPTIONS['build.board']
"ARDUINO_${BOARD_OPTIONS['build']['board']}"
] + ARDUINO_USBDEFINES,
CPPPATH=[
join("$BUILD_DIR", "FrameworkArduino"),
@@ -48,25 +44,16 @@ env.Append(
]
)
if "BOARD_MCU" not in env:
env.Replace(BOARD_MCU=BOARD_OPTIONS['build.mcu'])
if "BOARD_F_CPU" not in env:
env.Replace(BOARD_F_CPU=BOARD_OPTIONS['build.f_cpu'])
if "UPLOAD_PROTOCOL" not in env:
env.Replace(UPLOAD_PROTOCOL=BOARD_OPTIONS['upload.protocol'])
if "UPLOAD_SPEED" not in env:
env.Replace(UPLOAD_SPEED=BOARD_OPTIONS['upload.speed'])
libs = []
#
# Target: Build Core Library
#
libs = []
libs.append(env.BuildLibrary(
join("$BUILD_DIR", "FrameworkArduino"),
join("$PLATFORMFW_DIR", "cores", BOARD_OPTIONS['build.core'])
join("$PLATFORMFW_DIR", "cores", "${BOARD_OPTIONS['build']['core']}")
))
Return("libs")
@@ -12,10 +12,6 @@ from SCons.Script import Import, Return
env = None
Import("env")
BOARD_OPTIONS = env.ParseBoardOptions(
join("$PLATFORMFW_DIR", "boards.txt"),
"${BOARD}"
)
ENERGIA_VERSION = int(
open(join(env.subst("$PLATFORMFW_DIR"),
"version.txt")).read().replace(".", "").strip())
@@ -23,7 +19,7 @@ ENERGIA_VERSION = int(
# include board variant
env.VariantDir(
join("$BUILD_DIR", "FrameworkEnergiaVariant"),
join("$PLATFORMFW_DIR", "variants", BOARD_OPTIONS['build.variant'])
join("$PLATFORMFW_DIR", "variants", "${BOARD_OPTIONS['build']['variant']}")
)
env.Append(
@@ -37,31 +33,25 @@ env.Append(
]
)
if "BOARD_MCU" not in env:
env.Replace(BOARD_MCU=BOARD_OPTIONS['build.mcu'])
if "BOARD_F_CPU" not in env:
env.Replace(BOARD_F_CPU=BOARD_OPTIONS['build.f_cpu'])
if "UPLOAD_PROTOCOL" not in env and "upload.protocol" in BOARD_OPTIONS:
env.Replace(UPLOAD_PROTOCOL=BOARD_OPTIONS['upload.protocol'])
# specific linker script for TIVA devices
if "ldscript" in BOARD_OPTIONS:
if "ldscript" in env.subst("${BOARD_OPTIONS['build']}"):
env.Append(
LINKFLAGS=["-T", join("$PLATFORMFW_DIR", "cores",
BOARD_OPTIONS['build.core'],
BOARD_OPTIONS['ldscript'])]
LINKFLAGS=["-T", join(
"$PLATFORMFW_DIR", "cores",
"${BOARD_OPTIONS['build']['core']}",
"${BOARD_OPTIONS['build']['ldscript']}")]
)
libs = []
#
# Target: Build Core Library
#
libs = []
libs.append(env.BuildLibrary(
join("$BUILD_DIR", "FrameworkEnergia"),
join("$PLATFORMFW_DIR", "cores", BOARD_OPTIONS['build.core'])
join("$PLATFORMFW_DIR", "cores", "${BOARD_OPTIONS['build']['core']}")
))
Return("libs")