initial support for STM32GENERIC with script modification
This commit is contained in:
parent
dbaf886cd0
commit
b2b6ad65e9
|
@ -24,12 +24,191 @@ http://www.stm32duino.com
|
|||
|
||||
from os.path import isdir, join
|
||||
|
||||
from SCons.Script import COMMAND_LINE_TARGETS, DefaultEnvironment
|
||||
from SCons.Script import DefaultEnvironment
|
||||
|
||||
import pdb
|
||||
|
||||
env = DefaultEnvironment()
|
||||
|
||||
print env.get("CPPDEFINES")
|
||||
|
||||
#try to get variant folder from board name
|
||||
def getVariantFromBoard(boardi):
|
||||
var_folder="";
|
||||
|
||||
boardMappings = {
|
||||
"bluepill_f103c8":"BLUEPILL",
|
||||
"genericSTM32F103CB":"BLUEPILL",
|
||||
"genericSTM32F103C8":"BLUEPILL",
|
||||
"maple_mini_b20":"MAPLE_MINI"
|
||||
}
|
||||
|
||||
#check board from mappings
|
||||
if boardi in boardMappings:
|
||||
var_folder=boardMappings[boardi].upper()
|
||||
|
||||
#convert discovery boards
|
||||
if boardi[:5].upper()=="DISCO":
|
||||
a=boardi.split("_")
|
||||
var_folder="DISCOVERY_"+a[1].upper()
|
||||
|
||||
#convert nucleo boards
|
||||
if boardi[:6].upper()=="NUCLEO":
|
||||
a=boardi.split("_")
|
||||
var_folder="NUCLEO"+a[1].upper()
|
||||
|
||||
|
||||
if var_folder=="":
|
||||
print "ERROR: could not get variant folder from board: "+boardi
|
||||
|
||||
return var_folder;
|
||||
|
||||
#HAL MX based Arduino
|
||||
def stm32generic():
|
||||
print "stm32generic()"
|
||||
env = DefaultEnvironment()
|
||||
platform = env.PioPlatform()
|
||||
board = env.BoardConfig()
|
||||
FRAMEWORK_DIR = join(platform.get_package_dir(
|
||||
"framework-arduinoSTM32GENERIC"), "STM32")
|
||||
FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoSTM32GENERIC")
|
||||
assert isdir(FRAMEWORK_DIR)
|
||||
|
||||
#print FRAMEWORK_DIR;
|
||||
|
||||
mcuseries=board.get('build.mcu')[:7].upper();
|
||||
mcudefine=board.get('build.mcu')[:11].upper();
|
||||
boardi=env.get("BOARD");
|
||||
|
||||
#map ststm32 board name to stm32generic variant folder for compiling etc.
|
||||
|
||||
var_folder=getVariantFromBoard(boardi)
|
||||
print boardi+" --> " + var_folder;
|
||||
|
||||
print "var_folder="+var_folder;
|
||||
#enable FPU for F4 in building and linking
|
||||
if mcuseries=="STM32F4":
|
||||
print "is F4"
|
||||
env.Append(
|
||||
CCFLAGS=[
|
||||
"-mfpu=fpv4-sp-d16",
|
||||
"-mfloat-abi=hard"
|
||||
],
|
||||
LINKFLAGS=[
|
||||
"-Wl,--start-group",
|
||||
"-mfloat-abi=hard",
|
||||
"-mfpu=fpv4-sp-d16",
|
||||
"-Wl,--entry=Reset_Handler",
|
||||
"--specs=nano.specs"
|
||||
],
|
||||
)
|
||||
|
||||
#empty LIBPATH, use our own ldscript
|
||||
env["LIBPATH"]= [];
|
||||
|
||||
|
||||
env.Append(
|
||||
CCFLAGS=[
|
||||
"--param", "max-inline-insns-single=500",
|
||||
"-fno-exceptions",
|
||||
"-fno-rtti",
|
||||
"-std=gnu++11",
|
||||
"-fno-threadsafe-statics",
|
||||
"-ffunction-sections",
|
||||
"-fdata-sections",
|
||||
"-mthumb",
|
||||
"--specs=nano.specs"
|
||||
],
|
||||
CPPDEFINES=[
|
||||
("ARDUINO", 10810),
|
||||
mcuseries,
|
||||
mcudefine,
|
||||
"ARDUINO_ARCH_STM32",
|
||||
("HSE_VALUE", 8000000)
|
||||
],
|
||||
|
||||
CPPPATH=[
|
||||
join(FRAMEWORK_DIR, "cores", "arduino","stm32"),
|
||||
join(FRAMEWORK_DIR, "cores", "arduino"),
|
||||
join(FRAMEWORK_DIR, "cores", "arduino","usb"),
|
||||
join(FRAMEWORK_DIR, "system", "CMSIS"),
|
||||
join(FRAMEWORK_DIR, "system", mcuseries, "CMSIS_Inc"),
|
||||
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Inc"),
|
||||
|
||||
join(FRAMEWORK_DIR, "variants", var_folder),
|
||||
|
||||
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Src"),
|
||||
],
|
||||
|
||||
LIBPATH=[
|
||||
join(FRAMEWORK_DIR, "variants",
|
||||
var_folder)
|
||||
]
|
||||
)
|
||||
|
||||
env['LDSCRIPT_PATH'] = join(FRAMEWORK_DIR, "variants", var_folder)+"\ldscript.ld";
|
||||
env.ProcessFlags(board.get("build.extra_flags"))
|
||||
|
||||
for item in ("-nostartfiles","-nostdlib"):
|
||||
if item in env['LINKFLAGS']:
|
||||
env['LINKFLAGS'].remove(item)
|
||||
|
||||
if env.subst("$UPLOAD_PROTOCOL") == "dfu":
|
||||
if board.id in ("maple", "maple_mini_origin"):
|
||||
env.Append(CPPDEFINES=[("VECT_TAB_ADDR", 0x8005000), "SERIAL_USB"])
|
||||
else:
|
||||
env.Append(CPPDEFINES=[
|
||||
("VECT_TAB_ADDR", 0x8002000), "SERIAL_USB", "GENERIC_BOOTLOADER"])
|
||||
|
||||
if "stm32f103r" in board.get("build.mcu", ""):
|
||||
env.Replace(LDSCRIPT_PATH="bootloader.ld")
|
||||
elif board.get("upload.boot_version", 0) == 2:
|
||||
env.Replace(LDSCRIPT_PATH="bootloader_20.ld")
|
||||
else:
|
||||
env.Append(CPPDEFINES=[("VECT_TAB_ADDR", 0x8000000)])
|
||||
|
||||
#
|
||||
# Lookup for specific core's libraries
|
||||
#
|
||||
env.Append(
|
||||
LIBSOURCE_DIRS=[
|
||||
join(FRAMEWORK_DIR, "libraries")
|
||||
]
|
||||
)
|
||||
|
||||
#
|
||||
# Target: Build Core Library
|
||||
#
|
||||
|
||||
libs = []
|
||||
|
||||
if "build.variant" in board:
|
||||
env.Append(
|
||||
CPPPATH=[
|
||||
join(FRAMEWORK_DIR, "variants",
|
||||
board.get("build.variant"))
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
libs.append(env.BuildLibrary(
|
||||
join("$BUILD_DIR", "FrameworkArduinoVariant"),
|
||||
join(FRAMEWORK_DIR, "variants", board.get("build.variant"))
|
||||
))
|
||||
|
||||
libs.append(env.BuildLibrary(
|
||||
join("$BUILD_DIR", "FrameworkArduino"),
|
||||
join(FRAMEWORK_DIR, "cores", board.get("build.core"))
|
||||
))
|
||||
|
||||
env.Prepend(LIBS=libs)
|
||||
|
||||
|
||||
def stm32duino():
|
||||
env = DefaultEnvironment()
|
||||
platform = env.PioPlatform()
|
||||
board = env.BoardConfig()
|
||||
print "stm32duino()";
|
||||
if board.id == "bluepill_f103c8":
|
||||
board = env.BoardConfig("genericSTM32F103C8")
|
||||
env['LDSCRIPT_PATH'] = board.get("build.ldscript")
|
||||
|
@ -135,3 +314,12 @@ libs.append(env.BuildLibrary(
|
|||
))
|
||||
|
||||
env.Prepend(LIBS=libs)
|
||||
|
||||
if "USE_STM32GENERIC" in env.get("CPPDEFINES"):
|
||||
print "USE STM32GENERIC"
|
||||
stm32generic()
|
||||
else:
|
||||
stm32duino()
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue