blob: c1aae41dfc9e47acd2aabecd3036863ea621b98b [file] [log] [blame]
# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""Bazel macros for launching the pw_system console."""
load("@bazel_skylib//rules:native_binary.bzl", "native_binary")
def device_simulator_console(
name,
script,
host_binary,
pw_console_config = None,
socket_addr = "default",
**kwargs):
"""Launch the host_binary and connect to it with the pw_system console.
This macro is a wrapper around bazel_skylib native_binary to
launch a device_sim.py script.
Args:
name: The name of this device_simulator_console rule.
script: The py_binary target that calls upstream Pigweed's
pw_console.device_sim main or main_with_compiled_protos. See:
https://cs.opensource.google/pigweed/pigweed/+/main:pw_system/py/pw_system/device_sim.py
host_binary: The host_device_simulator_binary target to run.
socket_addr: Optional --socket-addr value to pass to pw-system-console.
pw_console_config: Optional file group target containing a
pw_console.yaml config file. For example:
filegroup(
name = "pw_console_config",
srcs = [".pw_console.yaml"],
)
**kwargs: Passed to native_binary.
"""
data = [host_binary]
args = [
"--sim-binary",
"$(rootpath " + host_binary + ")",
"--socket-addr",
socket_addr,
]
if pw_console_config:
data.append(pw_console_config)
args.append("--config-file")
args.append("$(rootpath " + pw_console_config + ")")
native_binary(
name = name,
src = script,
args = args,
data = data,
# Note: out is mandatory in older bazel-skylib versions.
out = name + ".exe",
**kwargs
)
def device_console(
name,
script,
binary,
baudrate = "115200",
pw_console_config = None,
**kwargs):
"""Connect to a device running the binary with the pw_system console.
This macro is a wrapper around bazel_skylib native_binary to
launch the console.py script with the basic set of arguments.
Args:
name: The name of this device_simulator_console rule.
script: The py_binary target that calls upstream Pigweed's
pw_system.console main or main_with_compiled_protos. See:
https://cs.opensource.google/pigweed/pigweed/+/main:pw_system/py/pw_system/console.py
binary: The binary to pass along to pw-system-console as the
"--token-databases" argument.
baudrate: Value to pass as the "--baudrate" arg to
pw-system-console. Defaults to 115200.
pw_console_config: Optional file group target containing a
pw_console.yaml config file. For example:
filegroup(
name = "pw_console_config",
srcs = [".pw_console.yaml"],
)
**kwargs: Passed to native_binary.
"""
data = [binary]
args = [
"--baudrate",
baudrate,
"--token-databases",
"$(rootpath " + binary + ")",
]
if pw_console_config:
data.append(pw_console_config)
args.append("--config-file")
args.append("$(rootpath " + pw_console_config + ")")
native_binary(
name = name,
src = script,
args = args,
data = data,
# Note: out is mandatory in older bazel-skylib versions.
out = name + ".exe",
**kwargs
)