From 9ba5dc0a602801ef08b8b02d6f98d40660b871b3 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 26 May 2018 01:02:52 +0300 Subject: [PATCH] Override any option from board manifest in Project Configuration File "platformio.ini" // Resolve #1612 --- HISTORY.rst | 2 ++ docs | 2 +- platformio/builder/main.py | 2 ++ platformio/builder/tools/pioplatform.py | 18 ++++++++++---- platformio/builder/tools/platformio.py | 6 ++--- platformio/commands/run.py | 31 +++++++++++++++---------- 6 files changed, 40 insertions(+), 21 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 404635c5..7d3886ea 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -15,6 +15,8 @@ PlatformIO 3.0 * Simplify configuration for `PIO Unit Testing `__: separate main program from a test build process, drop requirement for ``#ifdef UNIT_TEST`` guard +* Override any option from board manifest in `Project Configuration File "platformio.ini" `__ + (`issue #1612 `_) * Configure a custom path to SVD file using `debug_svd_path `__ option * Custom project `description `_ diff --git a/docs b/docs index 4ccbe4a4..bea5f7fa 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 4ccbe4a41e38da952cc135894b8069864cfd4225 +Subproject commit bea5f7fa6c0758878a9e563e243f57994be4d91b diff --git a/platformio/builder/main.py b/platformio/builder/main.py index cdd7d5d1..caafda5b 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -54,10 +54,12 @@ commonvars.AddVariables( # board options ("BOARD",), + # deprecated options, use board_{object.path} instead ("BOARD_MCU",), ("BOARD_F_CPU",), ("BOARD_F_FLASH",), ("BOARD_FLASH_MODE",), + # end of deprecated options # upload options ("UPLOAD_PORT",), diff --git a/platformio/builder/tools/pioplatform.py b/platformio/builder/tools/pioplatform.py index 16c64ec9..0b7cb6a5 100644 --- a/platformio/builder/tools/pioplatform.py +++ b/platformio/builder/tools/pioplatform.py @@ -14,6 +14,7 @@ from __future__ import absolute_import +import base64 import sys from os.path import isdir, isfile, join @@ -83,16 +84,23 @@ def LoadPioPlatform(env, variables): if "BOARD" not in env: return + # update board manifest with a custom data board_config = env.BoardConfig() - for k in variables.keys(): - if k in env or \ - not any([k.startswith("BOARD_"), k.startswith("UPLOAD_")]): + for key, value in variables.UnknownVariables().items(): + if not key.startswith("BOARD_"): continue - _opt, _val = k.lower().split("_", 1) + board_config.update(key.lower()[6:], base64.b64decode(value)) + + # update default environment variables + for key in variables.keys(): + if key in env or \ + not any([key.startswith("BOARD_"), key.startswith("UPLOAD_")]): + continue + _opt, _val = key.lower().split("_", 1) if _opt == "board": _opt = "build" if _val in board_config.get(_opt): - env.Replace(**{k: board_config.get("%s.%s" % (_opt, _val))}) + env.Replace(**{key: board_config.get("%s.%s" % (_opt, _val))}) if "build.ldscript" in board_config: env.Replace(LDSCRIPT_PATH=board_config.get("build.ldscript")) diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index 9d7f333c..9c6f6d0d 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -20,7 +20,7 @@ from glob import glob from os import sep, walk from os.path import basename, dirname, isdir, join, realpath -from SCons import Action, Builder, Util +from SCons import Builder, Util from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, DefaultEnvironment, SConscript) @@ -108,8 +108,8 @@ def BuildProgram(env): program = env.Program( join("$BUILD_DIR", env.subst("$PROGNAME")), env['PIOBUILDFILES']) - checksize_action = Action.Action(env.CheckUploadSize, - "Checking program size") + checksize_action = env.VerboseAction(env.CheckUploadSize, + "Checking program size") AlwaysBuild(env.Alias("checkprogsize", program, checksize_action)) if set(["upload", "program"]) & set(COMMAND_LINE_TARGETS): env.AddPostAction(program, checksize_action) diff --git a/platformio/commands/run.py b/platformio/commands/run.py index 209e2ca0..f2d4636c 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -131,16 +131,15 @@ class EnvironmentProcessor(object): "src_dir", "build_dir", "data_dir", "test_dir", "boards_dir", "lib_extra_dirs") - KNOWN_ENV_OPTIONS = ("platform", "framework", "board", "board_mcu", - "board_f_cpu", "board_f_flash", "board_flash_mode", - "build_flags", "src_build_flags", "build_unflags", - "src_filter", "extra_scripts", "targets", - "upload_port", "upload_protocol", "upload_speed", - "upload_flags", "upload_resetmethod", "lib_deps", - "lib_ignore", "lib_extra_dirs", "lib_ldf_mode", - "lib_compat_mode", "lib_archive", "piotest", - "test_transport", "test_filter", "test_ignore", - "test_port", "test_speed", "debug_tool", "debug_port", + KNOWN_ENV_OPTIONS = ("platform", "framework", "board", "build_flags", + "src_build_flags", "build_unflags", "src_filter", + "extra_scripts", "targets", "upload_port", + "upload_protocol", "upload_speed", "upload_flags", + "upload_resetmethod", "lib_deps", "lib_ignore", + "lib_extra_dirs", "lib_ldf_mode", "lib_compat_mode", + "lib_archive", "piotest", "test_transport", + "test_filter", "test_ignore", "test_port", + "test_speed", "debug_tool", "debug_port", "debug_init_cmds", "debug_extra_cmds", "debug_server", "debug_init_break", "debug_load_cmd", "debug_load_mode", "debug_svd_path", "monitor_port", @@ -160,7 +159,11 @@ class EnvironmentProcessor(object): "lib_use": "lib_deps", "lib_force": "lib_deps", "extra_script": "extra_scripts", - "monitor_baud": "monitor_speed" + "monitor_baud": "monitor_speed", + "board_mcu": "board_build.mcu", + "board_f_cpu": "board_build.f_cpu", + "board_f_flash": "board_build.f_flash", + "board_flash_mode": "board_build.flash_mode" } RENAMED_PLATFORMS = {"espressif": "espressif8266"} @@ -238,7 +241,11 @@ class EnvironmentProcessor(object): v = self.RENAMED_PLATFORMS[v] # warn about unknown options - if k not in self.KNOWN_ENV_OPTIONS and not k.startswith("custom_"): + unknown_conditions = [ + k not in self.KNOWN_ENV_OPTIONS, not k.startswith("custom_"), + not k.startswith("board_") + ] + if all(unknown_conditions): click.secho( "Detected non-PlatformIO `%s` option in `[env:%s]` section" % (k, self.name),