diff --git a/HISTORY.rst b/HISTORY.rst index f66848c24e..657a429b11 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -22,6 +22,8 @@ test-driven methodologies, and modern toolchains for unrivaled success. 6.1.19 (2025-??-??) ~~~~~~~~~~~~~~~~~~~ +* Fixed a regression issue where custom build flags were not properly reflected in the `compile_commands.json `__ file, ensuring accurate compilation database generation + 6.1.18 (2025-03-11) ~~~~~~~~~~~~~~~~~~~ diff --git a/examples b/examples index 9f28e742ce..0409a90a01 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 9f28e742ce24bc661c864f50739b20453c8f9425 +Subproject commit 0409a90a01cfa039d409d01e41fc16c7f224a074 diff --git a/platformio/__init__.py b/platformio/__init__.py index 898df11723..8bffb21e6c 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -VERSION = (6, 1, 18) +VERSION = (6, 1, 19) __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/builder/tools/piobuild.py b/platformio/builder/tools/piobuild.py index e1a310bdfe..8ef2522cf7 100644 --- a/platformio/builder/tools/piobuild.py +++ b/platformio/builder/tools/piobuild.py @@ -58,8 +58,8 @@ def GetBuildType(env): def BuildProgram(env): - env.ProcessCompileDbToolchainOption() env.ProcessProgramDeps() + env.ProcessCompileDbToolchainOption() env.ProcessProjectDeps() # append into the beginning a main LD script @@ -91,26 +91,6 @@ def BuildProgram(env): return program -def ProcessCompileDbToolchainOption(env): - if "compiledb" not in COMMAND_LINE_TARGETS: - return - # Resolve absolute path of toolchain - for cmd in ("CC", "CXX", "AS"): - if cmd not in env: - continue - if os.path.isabs(env[cmd]) or '"' in env[cmd]: - continue - env[cmd] = where_is_program(env.subst("$%s" % cmd), env.subst("${ENV['PATH']}")) - if " " in env[cmd]: # issue #4998: Space in compilator path - env[cmd] = f'"{env[cmd]}"' - - if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"): - print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping") - for scope, includes in env.DumpIntegrationIncludes().items(): - if scope in ("toolchain",): - env.Append(CPPPATH=includes) - - def ProcessProgramDeps(env): def _append_pio_macros(): core_version = pepver_to_semver(__version__) @@ -148,6 +128,27 @@ def _append_pio_macros(): env.ProcessUnFlags(env.get("BUILD_UNFLAGS")) +def ProcessCompileDbToolchainOption(env): + if "compiledb" not in COMMAND_LINE_TARGETS: + return + + # Resolve absolute path of toolchain + for cmd in ("CC", "CXX", "AS"): + if cmd not in env: + continue + if os.path.isabs(env[cmd]) or '"' in env[cmd]: + continue + env[cmd] = where_is_program(env.subst("$%s" % cmd), env.subst("${ENV['PATH']}")) + if " " in env[cmd]: # issue #4998: Space in compilator path + env[cmd] = f'"{env[cmd]}"' + + if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"): + print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping") + for scope, includes in env.DumpIntegrationIncludes().items(): + if scope in ("toolchain",): + env.Append(CPPPATH=includes) + + def ProcessProjectDeps(env): plb = env.ConfigureProjectLibBuilder() diff --git a/platformio/home/cli.py b/platformio/home/cli.py index 318c78facf..cd090b6047 100644 --- a/platformio/home/cli.py +++ b/platformio/home/cli.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import mimetypes import socket @@ -19,10 +20,10 @@ from platformio.compat import IS_WINDOWS from platformio.home.run import run_server -from platformio.package.manager.core import get_core_package_dir +from platformio.project.config import ProjectConfig -@click.command("home", short_help="GUI to manage PlatformIO") +@click.command("home", short_help="GUI to manage PIO") @click.option("--port", type=int, default=8008, help="HTTP port, default=8008") @click.option( "--host", @@ -53,7 +54,10 @@ def cli(port, host, no_open, shutdown_timeout, session_id): # hook for `platformio-node-helpers` if host == "__do_not_start__": # download all dependent packages - get_core_package_dir("contrib-piohome") + os.path.join( + ProjectConfig.get_instance().get("platformio","packages_dir"), + "contrib-piohome" + ) return # Ensure PIO Home mimetypes are known @@ -71,7 +75,7 @@ def cli(port, host, no_open, shutdown_timeout, session_id): [ "", " ___I_", - " /\\-_--\\ PlatformIO Home", + " /\\-_--\\ PIO Home", "/ \\_-__\\", "|[]| [] | %s" % home_url, "|__|____|__%s" % ("_" * len(home_url)), @@ -79,11 +83,11 @@ def cli(port, host, no_open, shutdown_timeout, session_id): ) ) click.echo("") - click.echo("Open PlatformIO Home in your browser by this URL => %s" % home_url) + click.echo("Open PIO Home in your browser by this URL => %s" % home_url) if is_port_used(host, port): click.secho( - "PlatformIO Home server is already started in another process.", fg="yellow" + "PIO Home server is already started in another process.", fg="yellow" ) if not no_open: click.launch(home_url) diff --git a/platformio/home/run.py b/platformio/home/run.py index df3fa47e1f..542ac9554b 100644 --- a/platformio/home/run.py +++ b/platformio/home/run.py @@ -36,7 +36,7 @@ from platformio.home.rpc.handlers.project import ProjectRPC from platformio.home.rpc.handlers.registry import RegistryRPC from platformio.home.rpc.server import WebSocketJSONRPCServerFactory -from platformio.package.manager.core import get_core_package_dir +from platformio.project.config import ProjectConfig from platformio.proc import force_exit @@ -62,7 +62,8 @@ async def protected_page(_): def run_server(host, port, no_open, shutdown_timeout, home_url): - contrib_dir = get_core_package_dir("contrib-piohome") + packages_dir = ProjectConfig.get_instance().get("platformio", "packages_dir") + contrib_dir = os.path.join(packages_dir, "contrib-piohome") if not os.path.isdir(contrib_dir): raise PlatformioException("Invalid path to PIO Home Contrib") diff --git a/platformio/remote/cli.py b/platformio/remote/cli.py index 423980f506..0f5d5c88db 100644 --- a/platformio/remote/cli.py +++ b/platformio/remote/cli.py @@ -31,7 +31,7 @@ device_monitor_cmd, get_project_options, ) -from platformio.package.manager.core import get_core_package_dir +from platformio.project.config import ProjectConfig from platformio.project.exception import NotPlatformIOProjectError from platformio.project.options import ProjectOptions from platformio.run.cli import cli as cmd_run @@ -44,7 +44,8 @@ def cli(ctx, agent): ctx.obj = agent # inject twisted dependencies - contrib_dir = get_core_package_dir("contrib-pioremote") + packages_dir = ProjectConfig.get_instance().get("platformio", "packages_dir") + contrib_dir = os.path.join(packages_dir, "contrib-pioremote") if contrib_dir not in sys.path: addsitedir(contrib_dir) sys.path.insert(0, contrib_dir)