rewrite builder and remove -nostdlib -nostartup from link flags

This commit is contained in:
Michael L 2017-05-05 11:25:14 +03:00
parent b2b6ad65e9
commit 769c046e63
1 changed files with 74 additions and 35 deletions

View File

@ -69,6 +69,7 @@ def stm32generic():
env = DefaultEnvironment() env = DefaultEnvironment()
platform = env.PioPlatform() platform = env.PioPlatform()
board = env.BoardConfig() board = env.BoardConfig()
FRAMEWORK_DIR = join(platform.get_package_dir( FRAMEWORK_DIR = join(platform.get_package_dir(
"framework-arduinoSTM32GENERIC"), "STM32") "framework-arduinoSTM32GENERIC"), "STM32")
FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoSTM32GENERIC") FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoSTM32GENERIC")
@ -76,16 +77,16 @@ def stm32generic():
#print FRAMEWORK_DIR; #print FRAMEWORK_DIR;
mcuseries=board.get('build.mcu')[:7].upper(); mcuseries=board.get('build.mcu')[:7].upper(); #i.e. STM32F4
mcudefine=board.get('build.mcu')[:11].upper(); mcudefine=board.get('build.mcu')[:11].upper(); #i.e. STM32F407VG
boardi=env.get("BOARD"); boardi=env.get("BOARD");
#map ststm32 board name to stm32generic variant folder for compiling etc. #map ststm32 board name to stm32generic variant folder for compiling etc.
var_folder=getVariantFromBoard(boardi) var_folder=getVariantFromBoard(boardi)
print boardi+" --> " + var_folder; print boardi+" --> " + var_folder;
print "var_folder="+var_folder; #print "var_folder="+var_folder;
#enable FPU for F4 in building and linking #enable FPU for F4 in building and linking
if mcuseries=="STM32F4": if mcuseries=="STM32F4":
print "is F4" print "is F4"
@ -95,7 +96,7 @@ def stm32generic():
"-mfloat-abi=hard" "-mfloat-abi=hard"
], ],
LINKFLAGS=[ LINKFLAGS=[
"-Wl,--start-group", #"-Wl,--start-group",
"-mfloat-abi=hard", "-mfloat-abi=hard",
"-mfpu=fpv4-sp-d16", "-mfpu=fpv4-sp-d16",
"-Wl,--entry=Reset_Handler", "-Wl,--entry=Reset_Handler",
@ -104,27 +105,39 @@ def stm32generic():
) )
#empty LIBPATH, use our own ldscript #empty LIBPATH, use our own ldscript
env["LIBPATH"]= []; #env["LIBPATH"]= [];
env.Append( env.Append(
CCFLAGS=[ CXXFLAGS=[
"--param", "max-inline-insns-single=500", "-fno-exceptions",
"-fno-exceptions",
"-fno-rtti", "-fno-rtti",
"-std=gnu++11", "-std=gnu++11",
"-fno-threadsafe-statics", "-fno-threadsafe-statics",
"-w",
("-x","c++"),
"-CC",
],
CFLAGS=[
"-std=gnu11",
"-MMD"
],
CCFLAGS=[
"--param", "max-inline-insns-single=500",
"-ffunction-sections", "-ffunction-sections",
"-fdata-sections", "-fdata-sections",
"-mthumb", "-mthumb",
"--specs=nano.specs" "--specs=nano.specs",
"-nostdlib"
], ],
CPPDEFINES=[ CPPDEFINES=[
("ARDUINO", 10810), ("ARDUINO", 10810),
mcuseries, mcuseries,
mcudefine, mcudefine,
"ARDUINO_ARCH_STM32", "ARDUINO_ARCH_STM32",
("HSE_VALUE", 8000000) ("HSE_VALUE", 8000000),
("printf","iprintf")
], ],
CPPPATH=[ CPPPATH=[
@ -133,11 +146,16 @@ def stm32generic():
join(FRAMEWORK_DIR, "cores", "arduino","usb"), join(FRAMEWORK_DIR, "cores", "arduino","usb"),
join(FRAMEWORK_DIR, "system", "CMSIS"), join(FRAMEWORK_DIR, "system", "CMSIS"),
join(FRAMEWORK_DIR, "system", mcuseries, "CMSIS_Inc"), join(FRAMEWORK_DIR, "system", mcuseries, "CMSIS_Inc"),
join(FRAMEWORK_DIR, "system", mcuseries, "CMSIS_Src"),
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Inc"), join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Inc"),
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Src"),
join(FRAMEWORK_DIR, "system", mcuseries, "stm32_chip"),
join(FRAMEWORK_DIR, "variants", var_folder), join(FRAMEWORK_DIR, "variants", var_folder),
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Src"),
#join(FRAMEWORK_DIR, "cores", "arduino", "stm32_HAL"),
], ],
LIBPATH=[ LIBPATH=[
@ -146,12 +164,26 @@ def stm32generic():
] ]
) )
env['LDSCRIPT_PATH'] = join(FRAMEWORK_DIR, "variants", var_folder)+"\ldscript.ld"; #env['LDSCRIPT_PATH'] = join(FRAMEWORK_DIR, "variants", var_folder)+"\ldscript.ld";
env.ProcessFlags(board.get("build.extra_flags")) env['LDSCRIPT_PATH'] = "ldscript.ld";
#env.ProcessFlags(board.get("build.extra_flags"))
#pdb.set_trace();
for item in ("-nostartfiles","-nostdlib"):
if item in env['LINKFLAGS']: #src_filter = ["+<*.[sS]>", "+<*.c*>"]
env['LINKFLAGS'].remove(item) #src_filter = ["+<**.[sS]>"]
#env.BuildSources( join("$BUILD_DIR", ""), join(FRAMEWORK_DIR, "cores", "arduino", "stm32_HAL"), src_filter=src_filter)
#system_stm32f4xx
#src_filter = ["+<*.c>"]
#env.BuildSources( join("$BUILD_DIR", ""), join(FRAMEWORK_DIR, "cores", "arduino", "stm32"), src_filter=src_filter)
#src_filter = ["+<*system*.[cC]>"]
#env.BuildSources( join("$BUILD_DIR", ""), join(FRAMEWORK_DIR, "cores", "arduino", "stm32_HAL"), src_filter=src_filter)
pdb.set_trace();
if env.subst("$UPLOAD_PROTOCOL") == "dfu": if env.subst("$UPLOAD_PROTOCOL") == "dfu":
if board.id in ("maple", "maple_mini_origin"): if board.id in ("maple", "maple_mini_origin"):
@ -182,26 +214,33 @@ def stm32generic():
libs = [] libs = []
if "build.variant" in board: for item in ("-nostartfiles","-nostdlib"):
env.Append( if item in env['LINKFLAGS']:
CPPPATH=[ env['LINKFLAGS'].remove(item)
join(FRAMEWORK_DIR, "variants",
board.get("build.variant")) for item in ("stdc++","nosys"):
] if item in env['LIBS']:
env['LIBS'].remove(item)
#if "build.variant" in board:
# env.Append(
# CPPPATH=[
# join(FRAMEWORK_DIR, "variants",
# var_folder)
# ]
# )
libs.append(env.BuildSources(
join("$BUILD_DIR", "core"),
join(FRAMEWORK_DIR, "cores", "arduino"))
) )
libs.append(env.BuildSources(
join("$BUILD_DIR", "variants", var_folder),
join(FRAMEWORK_DIR, "variants", var_folder)) )
libs.append(env.BuildLibrary( #env.Prepend(LIBS=libs)
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(): def stm32duino():