Skip to content

fix piohome hang #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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 <https://docs.platformio.org/en/latest/integration/compile_commands.html>`__ file, ensuring accurate compilation database generation

6.1.18 (2025-03-11)
~~~~~~~~~~~~~~~~~~~

Expand Down
2 changes: 1 addition & 1 deletion examples
2 changes: 1 addition & 1 deletion platformio/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
43 changes: 22 additions & 21 deletions platformio/builder/tools/piobuild.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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__)
Expand Down Expand Up @@ -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()

Expand Down
16 changes: 10 additions & 6 deletions platformio/home/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import mimetypes
import socket

import click

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",
Expand Down Expand Up @@ -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
Expand All @@ -71,19 +75,19 @@ def cli(port, host, no_open, shutdown_timeout, session_id):
[
"",
" ___I_",
" /\\-_--\\ PlatformIO Home",
" /\\-_--\\ PIO Home",
"/ \\_-__\\",
"|[]| [] | %s" % home_url,
"|__|____|__%s" % ("_" * len(home_url)),
]
)
)
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)
Expand Down
5 changes: 3 additions & 2 deletions platformio/home/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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")

Expand Down
5 changes: 3 additions & 2 deletions platformio/remote/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down
Loading