diff --git a/WORKSPACE b/WORKSPACE index 5f36624ff9..743a57c651 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -66,6 +66,15 @@ cipd_repository( tag = "version:pw_transfer_test_binaries_528098d588f307881af83f769207b8e6e1b57520-linux-amd64-cipd.cipd", ) +# Set up bloaty size profiler. +# Required by: pigweed. +# Used in modules: //pw_bloat. +cipd_repository( + name = "bloaty", + path = "fuchsia/third_party/bloaty/${os}-amd64", + tag = "git_revision:c057ba4f43db0506d4ba8c096925b054b02a8bd3", +) + # Set up Starlark library. # Required by: io_bazel_rules_go, com_google_protobuf, rules_python # Used in modules: None. diff --git a/pw_bloat/py/BUILD.bazel b/pw_bloat/py/BUILD.bazel new file mode 100644 index 0000000000..752a9abc81 --- /dev/null +++ b/pw_bloat/py/BUILD.bazel @@ -0,0 +1,45 @@ +# 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. + +load("@rules_python//python:defs.bzl", "py_binary", "py_library") +load("//pw_build:selects.bzl", "TARGET_COMPATIBLE_WITH_HOST_SELECT") + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +py_library( + name = "pw_bloat", + srcs = [ + "pw_bloat/bloat.py", + "pw_bloat/bloaty_config.py", + "pw_bloat/label.py", + "pw_bloat/label_output.py", + ], + data = ["@bloaty//:all"], + imports = ["."], + deps = [ + "@pigweed//pw_cli/py:pw_cli", + "@python_packages_pyelftools//:pkg", + "@rules_python//python/runfiles", + ], +) + +py_binary( + name = "bloat", + srcs = ["pw_bloat/__main__.py"], + main = "pw_bloat/__main__.py", + target_compatible_with = select(TARGET_COMPATIBLE_WITH_HOST_SELECT), + deps = [":pw_bloat"], +) diff --git a/pw_bloat/py/pw_bloat/bloat.py b/pw_bloat/py/pw_bloat/bloat.py index 488331109d..0239d669d0 100755 --- a/pw_bloat/py/pw_bloat/bloat.py +++ b/pw_bloat/py/pw_bloat/bloat.py @@ -100,8 +100,18 @@ def run_bloaty( subprocess.CalledProcessError: The Bloaty invocation failed. """ - default_bloaty = 'bloaty' - bloaty_path = os.getenv('BLOATY_PATH', default_bloaty) + try: + # If running from within a Bazel context, find the Bloaty executable + # within the project's runfiles. + # pylint: disable=import-outside-toplevel + from rules_python.python.runfiles import runfiles # type: ignore + + r = runfiles.Create() + bloaty_path = r.Rlocation("bloaty/bloaty") + except ImportError: + # Outside of Bazel, use Bloaty from the system path. + default_bloaty = 'bloaty' + bloaty_path = os.getenv('BLOATY_PATH', default_bloaty) cmd = [ bloaty_path,