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()
platform = env.PioPlatform()
board = env.BoardConfig()
FRAMEWORK_DIR = join(platform.get_package_dir(
"framework-arduinoSTM32GENERIC"), "STM32")
FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoSTM32GENERIC")
@ -76,16 +77,16 @@ def stm32generic():
#print FRAMEWORK_DIR;
mcuseries=board.get('build.mcu')[:7].upper();
mcudefine=board.get('build.mcu')[:11].upper();
mcuseries=board.get('build.mcu')[:7].upper(); #i.e. STM32F4
mcudefine=board.get('build.mcu')[:11].upper(); #i.e. STM32F407VG
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;
#print "var_folder="+var_folder;
#enable FPU for F4 in building and linking
if mcuseries=="STM32F4":
print "is F4"
@ -95,7 +96,7 @@ def stm32generic():
"-mfloat-abi=hard"
],
LINKFLAGS=[
"-Wl,--start-group",
#"-Wl,--start-group",
"-mfloat-abi=hard",
"-mfpu=fpv4-sp-d16",
"-Wl,--entry=Reset_Handler",
@ -104,27 +105,39 @@ def stm32generic():
)
#empty LIBPATH, use our own ldscript
env["LIBPATH"]= [];
#env["LIBPATH"]= [];
env.Append(
CCFLAGS=[
"--param", "max-inline-insns-single=500",
"-fno-exceptions",
CXXFLAGS=[
"-fno-exceptions",
"-fno-rtti",
"-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",
"-fdata-sections",
"-mthumb",
"--specs=nano.specs"
"--specs=nano.specs",
"-nostdlib"
],
CPPDEFINES=[
("ARDUINO", 10810),
mcuseries,
mcudefine,
"ARDUINO_ARCH_STM32",
("HSE_VALUE", 8000000)
("HSE_VALUE", 8000000),
("printf","iprintf")
],
CPPPATH=[
@ -133,11 +146,16 @@ def stm32generic():
join(FRAMEWORK_DIR, "cores", "arduino","usb"),
join(FRAMEWORK_DIR, "system", "CMSIS"),
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_Src"),
join(FRAMEWORK_DIR, "system", mcuseries, "stm32_chip"),
join(FRAMEWORK_DIR, "variants", var_folder),
join(FRAMEWORK_DIR, "system", mcuseries, "HAL_Src"),
#join(FRAMEWORK_DIR, "cores", "arduino", "stm32_HAL"),
],
LIBPATH=[
@ -146,12 +164,26 @@ def stm32generic():
]
)
env['LDSCRIPT_PATH'] = join(FRAMEWORK_DIR, "variants", var_folder)+"\ldscript.ld";
env.ProcessFlags(board.get("build.extra_flags"))
#env['LDSCRIPT_PATH'] = join(FRAMEWORK_DIR, "variants", var_folder)+"\ldscript.ld";
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']:
env['LINKFLAGS'].remove(item)
#src_filter = ["+<*.[sS]>", "+<*.c*>"]
#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 board.id in ("maple", "maple_mini_origin"):
@ -182,26 +214,33 @@ def stm32generic():
libs = []
if "build.variant" in board:
env.Append(
CPPPATH=[
join(FRAMEWORK_DIR, "variants",
board.get("build.variant"))
]
for item in ("-nostartfiles","-nostdlib"):
if item in env['LINKFLAGS']:
env['LINKFLAGS'].remove(item)
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(
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)
#env.Prepend(LIBS=libs)
def stm32duino():