diff --git a/HISTORY.rst b/HISTORY.rst index 1bc72b89..f156f03b 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,6 +7,8 @@ PlatformIO 2.0 2.10.4 (2016-06-??) ~~~~~~~~~~~~~~~~~~~ +* Better removing unnecessary flags using ``build_unflags`` option + (`issue #698 `_) * Fixed issue with ``platformio init --ide`` command for Python 2.6 2.10.3 (2016-06-15) diff --git a/platformio/__init__.py b/platformio/__init__.py index 8746c80d..b2567541 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (2, 10, "4.dev0") +VERSION = (2, 10, "4.dev1") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/builder/scripts/basearm.py b/platformio/builder/scripts/basearm.py index 20892b18..a8dc9cc7 100644 --- a/platformio/builder/scripts/basearm.py +++ b/platformio/builder/scripts/basearm.py @@ -40,8 +40,7 @@ env.Replace( "-fdata-sections", "-Wall", "-mthumb", - "-mcpu=${BOARD_OPTIONS['build']['cpu']}", - "-nostdlib" + "-mcpu=${BOARD_OPTIONS['build']['cpu']}" ], CXXFLAGS=[ @@ -57,7 +56,9 @@ env.Replace( "-Os", "-Wl,--gc-sections,--relax", "-mthumb", - "-mcpu=${BOARD_OPTIONS['build']['cpu']}" + "-mcpu=${BOARD_OPTIONS['build']['cpu']}", + "-nostdlib", + "-nostartfiles" ], LIBS=["c", "gcc", "m"], diff --git a/platformio/builder/scripts/espressif.py b/platformio/builder/scripts/espressif.py index 7c167489..34058955 100644 --- a/platformio/builder/scripts/espressif.py +++ b/platformio/builder/scripts/espressif.py @@ -71,8 +71,7 @@ env.Replace( "-Wpointer-arith", "-Wno-implicit-function-declaration", "-Wl,-EL", - "-fno-inline-functions", - "-nostdlib" + "-fno-inline-functions" ], CCFLAGS=[ @@ -82,8 +81,7 @@ env.Replace( "-falign-functions=4", "-U__STRICT_ANSI__", "-ffunction-sections", - "-fdata-sections", - "-MMD" # output dependancy info + "-fdata-sections" ], CXXFLAGS=[ diff --git a/platformio/builder/scripts/frameworks/mbed.py b/platformio/builder/scripts/frameworks/mbed.py index 08a9e873..3c7dc2e0 100644 --- a/platformio/builder/scripts/frameworks/mbed.py +++ b/platformio/builder/scripts/frameworks/mbed.py @@ -264,13 +264,12 @@ env.Replace( ) # restore external build flags -env.ProcessFlags([ - env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags") -]) +env.ProcessFlags( + env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags")) # remove base flags env.ProcessUnFlags(env.get("BUILD_UNFLAGS")) # apply user flags -env.ProcessFlags([env.get("BUILD_FLAGS")]) +env.ProcessFlags(env.get("BUILD_FLAGS")) # Hook for K64F and K22F if board_type in ("frdm_k22f", "frdm_k64f"): diff --git a/platformio/builder/scripts/ststm32.py b/platformio/builder/scripts/ststm32.py index 8dbd70ef..3077f74d 100644 --- a/platformio/builder/scripts/ststm32.py +++ b/platformio/builder/scripts/ststm32.py @@ -66,11 +66,6 @@ env.Append( ], LIBS=["stdc++", "nosys"], - - LINKFLAGS=[ - "-nostartfiles", - "-nostdlib" - ] ) # diff --git a/platformio/builder/scripts/titiva.py b/platformio/builder/scripts/titiva.py index e705cd62..411eb0cb 100644 --- a/platformio/builder/scripts/titiva.py +++ b/platformio/builder/scripts/titiva.py @@ -31,13 +31,6 @@ env.Replace( UPLOADCMD='"$UPLOADER" $SOURCES' ) -env.Append( - LINKFLAGS=[ - "-nostartfiles", - "-nostdlib" - ] -) - # # Target: Build executable and linkable firmware # diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 01b50f57..41341b96 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -53,13 +53,12 @@ def BuildProgram(env): ) # process extra flags from board - env.ProcessFlags([ - env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags") - ]) + env.ProcessFlags( + env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags")) # remove base flags env.ProcessUnFlags(env.get("BUILD_UNFLAGS")) # apply user flags - env.ProcessFlags([env.get("BUILD_FLAGS")]) + env.ProcessFlags(env.get("BUILD_FLAGS")) if env.get("FRAMEWORK"): env.BuildFrameworks([ @@ -88,7 +87,7 @@ def BuildProgram(env): ) # Handle SRC_BUILD_FLAGS - env.ProcessFlags([env.get("SRC_BUILD_FLAGS", None)]) + env.ProcessFlags(env.get("SRC_BUILD_FLAGS")) env.Append( CPPPATH=["$PROJECTSRC_DIR"], @@ -117,18 +116,17 @@ def BuildProgram(env): def ProcessFlags(env, flags): - for f in flags: - if not f: + if not flags: + return + parsed_flags = env.ParseFlags(str(flags)) + for flag in parsed_flags.pop("CPPDEFINES"): + if not isinstance(flag, list): + env.Append(CPPDEFINES=flag) continue - parsed_flags = env.ParseFlags(str(f)) - for flag in parsed_flags.pop("CPPDEFINES"): - if not isinstance(flag, list): - env.Append(CPPDEFINES=flag) - continue - if '\"' in flag[1]: - flag[1] = flag[1].replace('\"', '\\\"') - env.Append(CPPDEFINES=[flag]) - env.Append(**parsed_flags) + if '\"' in flag[1]: + flag[1] = flag[1].replace('\"', '\\\"') + env.Append(CPPDEFINES=[flag]) + env.Append(**parsed_flags) # fix relative CPPPATH & LIBPATH for k in ("CPPPATH", "LIBPATH"): @@ -153,10 +151,17 @@ def ProcessFlags(env, flags): def ProcessUnFlags(env, flags): if not flags: return - for var, values in env.ParseFlags(flags).items(): - for v in values: - if v in env[var]: - env[var].remove(v) + parsed_flags = env.ParseFlags(flags) + all_flags = [] + for items in parsed_flags.values(): + all_flags.extend(items) + all_flags = set(all_flags) + + for key in parsed_flags.keys(): + cur_flags = set(env.get(key, [])) + common = cur_flags & all_flags + for item in common: + env[key].remove(item) def IsFileWithExt(env, file_, ext): # pylint: disable=W0613