forked from platformio/platformio-core
Add support for "Build Middlewares"
This commit is contained in:
@@ -18,6 +18,7 @@ PlatformIO Core 4.0
|
|||||||
- Unused variables or functions
|
- Unused variables or functions
|
||||||
- Out of scope memory usage.
|
- Out of scope memory usage.
|
||||||
|
|
||||||
|
* Added support for `Build Middlewares <http://docs.platformio.org/page/projectconf/advanced_scripting.html#build-middlewares>`__: configure custom build flags per specific file, skip any build nodes from a framework, replace build file with another on-the-fly, etc.
|
||||||
* Extend project environment configuration in "platformio.ini" with other sections using a new `extends <http://docs.platformio.org/page/projectconf/section_env_advanced.html#extends>`__ option (`issue #2953 <https://github.com/platformio/platformio-core/issues/2953>`_)
|
* Extend project environment configuration in "platformio.ini" with other sections using a new `extends <http://docs.platformio.org/page/projectconf/section_env_advanced.html#extends>`__ option (`issue #2953 <https://github.com/platformio/platformio-core/issues/2953>`_)
|
||||||
* Generate ``.ccls`` LSP file for `Emacs <https://docs.platformio.org/page/ide/emacs.html>`__ cross references, hierarchies, completion and semantic highlighting
|
* Generate ``.ccls`` LSP file for `Emacs <https://docs.platformio.org/page/ide/emacs.html>`__ cross references, hierarchies, completion and semantic highlighting
|
||||||
* Added ``--no-ansi`` flag for `PIO Core <http://docs.platformio.org/page/userguide/index.html>`__ to disable ANSI control characters
|
* Added ``--no-ansi`` flag for `PIO Core <http://docs.platformio.org/page/userguide/index.html>`__ to disable ANSI control characters
|
||||||
|
2
docs
2
docs
Submodule docs updated: 46b1dee7f1...733ab67e51
@@ -14,10 +14,12 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import fnmatch
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from SCons import Builder, Util # pylint: disable=import-error
|
from SCons import Builder, Util # pylint: disable=import-error
|
||||||
|
from SCons.Node import FS # pylint: disable=import-error
|
||||||
from SCons.Script import COMMAND_LINE_TARGETS # pylint: disable=import-error
|
from SCons.Script import COMMAND_LINE_TARGETS # pylint: disable=import-error
|
||||||
from SCons.Script import AlwaysBuild # pylint: disable=import-error
|
from SCons.Script import AlwaysBuild # pylint: disable=import-error
|
||||||
from SCons.Script import DefaultEnvironment # pylint: disable=import-error
|
from SCons.Script import DefaultEnvironment # pylint: disable=import-error
|
||||||
@@ -244,7 +246,9 @@ def MatchSourceFiles(env, src_dir, src_filter=None):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def CollectBuildFiles(env, variant_dir, src_dir, src_filter=None, duplicate=False):
|
def CollectBuildFiles(
|
||||||
|
env, variant_dir, src_dir, src_filter=None, duplicate=False
|
||||||
|
): # pylint: disable=too-many-locals
|
||||||
sources = []
|
sources = []
|
||||||
variants = []
|
variants = []
|
||||||
|
|
||||||
@@ -264,9 +268,24 @@ def CollectBuildFiles(env, variant_dir, src_dir, src_filter=None, duplicate=Fals
|
|||||||
if fs.path_endswith_ext(item, SRC_BUILD_EXT):
|
if fs.path_endswith_ext(item, SRC_BUILD_EXT):
|
||||||
sources.append(env.File(os.path.join(_var_dir, os.path.basename(item))))
|
sources.append(env.File(os.path.join(_var_dir, os.path.basename(item))))
|
||||||
|
|
||||||
|
for callback, pattern in env.get("__PIO_BUILD_MIDDLEWARES", []):
|
||||||
|
tmp = []
|
||||||
|
for node in sources:
|
||||||
|
if pattern and not fnmatch.fnmatch(node.get_path(), pattern):
|
||||||
|
tmp.append(node)
|
||||||
|
continue
|
||||||
|
n = callback(node)
|
||||||
|
if n:
|
||||||
|
tmp.append(n)
|
||||||
|
sources = tmp
|
||||||
|
|
||||||
return sources
|
return sources
|
||||||
|
|
||||||
|
|
||||||
|
def AddBuildMiddleware(env, callback, pattern=None):
|
||||||
|
env.Append(__PIO_BUILD_MIDDLEWARES=[(callback, pattern)])
|
||||||
|
|
||||||
|
|
||||||
def BuildFrameworks(env, frameworks):
|
def BuildFrameworks(env, frameworks):
|
||||||
if not frameworks:
|
if not frameworks:
|
||||||
return
|
return
|
||||||
@@ -309,7 +328,11 @@ def BuildLibrary(env, variant_dir, src_dir, src_filter=None):
|
|||||||
|
|
||||||
def BuildSources(env, variant_dir, src_dir, src_filter=None):
|
def BuildSources(env, variant_dir, src_dir, src_filter=None):
|
||||||
nodes = env.CollectBuildFiles(variant_dir, src_dir, src_filter)
|
nodes = env.CollectBuildFiles(variant_dir, src_dir, src_filter)
|
||||||
DefaultEnvironment().Append(PIOBUILDFILES=[env.Object(node) for node in nodes])
|
DefaultEnvironment().Append(
|
||||||
|
PIOBUILDFILES=[
|
||||||
|
env.Object(node) if isinstance(node, FS.File) else node for node in nodes
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def exists(_):
|
def exists(_):
|
||||||
@@ -323,6 +346,7 @@ def generate(env):
|
|||||||
env.AddMethod(ProcessUnFlags)
|
env.AddMethod(ProcessUnFlags)
|
||||||
env.AddMethod(MatchSourceFiles)
|
env.AddMethod(MatchSourceFiles)
|
||||||
env.AddMethod(CollectBuildFiles)
|
env.AddMethod(CollectBuildFiles)
|
||||||
|
env.AddMethod(AddBuildMiddleware)
|
||||||
env.AddMethod(BuildFrameworks)
|
env.AddMethod(BuildFrameworks)
|
||||||
env.AddMethod(BuildLibrary)
|
env.AddMethod(BuildLibrary)
|
||||||
env.AddMethod(BuildSources)
|
env.AddMethod(BuildSources)
|
||||||
|
@@ -165,7 +165,7 @@ def results_to_json(raw):
|
|||||||
{
|
{
|
||||||
"ignored": item.get("succeeded") is None,
|
"ignored": item.get("succeeded") is None,
|
||||||
"succeeded": bool(item.get("succeeded")),
|
"succeeded": bool(item.get("succeeded")),
|
||||||
"defects": [d.as_dict() for d in item.get("defects", [])]
|
"defects": [d.as_dict() for d in item.get("defects", [])],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
Reference in New Issue
Block a user