Merge "build: Add --out_dir argument to build_with_bazel.py"

This commit is contained in:
qctecmdr 2022-11-30 19:21:17 -08:00 committed by Gerrit - the friendly Code Review server
commit 705d77d8eb

View File

@ -23,7 +23,7 @@ DEFAULT_ABL_EXTENSIONS_SRC = "../bootable/bootloader/edk2/abl_extensions.bzl"
class BazelBuilder:
"""Helper class for building with Bazel"""
def __init__(self, target_list, skip_list, user_opts):
def __init__(self, target_list, skip_list, out_dir, user_opts):
self.workspace = os.path.realpath(
os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
)
@ -36,6 +36,7 @@ class BazelBuilder:
)
self.target_list = target_list
self.skip_list = skip_list
self.out_dir = out_dir
self.user_opts = user_opts
self.process_list = []
self.setup_extensions()
@ -186,7 +187,12 @@ class BazelBuilder:
return toolchain
def bazel(
self, bazel_subcommand, targets, extra_options=None, us_cross_toolchain=None
self,
bazel_subcommand,
targets,
out_subdir="dist",
extra_options=None,
us_cross_toolchain=None,
):
"""Execute a bazel command"""
cmdline = [self.bazel_bin, bazel_subcommand]
@ -195,6 +201,9 @@ class BazelBuilder:
if us_cross_toolchain:
cmdline.extend(self.get_cross_cli_opts(us_cross_toolchain))
cmdline.extend(targets)
if self.out_dir and bazel_subcommand == "run":
cmdline.extend(["--", "--dist_dir", os.path.join(self.out_dir, out_subdir)])
cmdline_str = " ".join(cmdline)
try:
logging.info('Running "%s"', cmdline_str)
@ -209,16 +218,20 @@ class BazelBuilder:
self.process_list.remove(build_proc)
def build_targets(self, targets, user_opts=None, us_cross_toolchain=None):
def build_targets(
self, targets, out_subdir="dist", user_opts=None, us_cross_toolchain=None
):
"""Run "bazel build" on all targets in parallel"""
if not targets:
logging.warning("no targets to build")
self.bazel("build", targets, user_opts, us_cross_toolchain)
self.bazel("build", targets, out_subdir, user_opts, us_cross_toolchain)
def run_targets(self, targets, user_opts=None, us_cross_toolchain=None):
def run_targets(
self, targets, out_subdir="dist", user_opts=None, us_cross_toolchain=None
):
"""Run "bazel run" on all targets in serial (since bazel run cannot have multiple targets)"""
for target in targets:
self.bazel("run", [target], user_opts, us_cross_toolchain)
self.bazel("run", [target], out_subdir, user_opts, us_cross_toolchain)
def build(self):
"""Determine which targets to build, then build them"""
@ -240,12 +253,24 @@ class BazelBuilder:
sys.exit(1)
logging.info("Building %s targets...", CPU)
self.build_targets(cross_targets_to_build, self.user_opts, us_cross_toolchain)
self.run_targets(cross_targets_to_build, self.user_opts, us_cross_toolchain)
self.build_targets(
cross_targets_to_build,
user_opts=self.user_opts,
us_cross_toolchain=us_cross_toolchain,
)
self.run_targets(
cross_targets_to_build,
user_opts=self.user_opts,
us_cross_toolchain=us_cross_toolchain,
)
logging.info("Building host targets...")
self.build_targets(host_targets_to_build, self.user_opts)
self.run_targets(host_targets_to_build, self.user_opts)
self.build_targets(
host_targets_to_build, out_subdir="host", user_opts=self.user_opts
)
self.run_targets(
host_targets_to_build, out_subdir="host", user_opts=self.user_opts
)
def main():
@ -269,6 +294,12 @@ def main():
default=[],
help="Skip specific build rules (e.g. --skip abl will skip the //msm-kernel:<target>_<variant>_abl build)",
)
parser.add_argument(
"-o",
"--out_dir",
metavar="OUT_DIR",
help='Specify the output distribution directory (by default, "$PWD/out/msm-kernel-<target>-variant")',
)
parser.add_argument(
"--log",
metavar="LEVEL",
@ -286,7 +317,7 @@ def main():
args.skip.extend(DEFAULT_SKIP_LIST)
builder = BazelBuilder(args.target, args.skip, user_opts)
builder = BazelBuilder(args.target, args.skip, args.out_dir, user_opts)
try:
builder.build()
except KeyboardInterrupt: