mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 11:11:26 +02:00
build: Add support for custom userspace toolchain
When using build_with_bazel.py, users may want to build extra userspace cc_binary targets with a different toolchain. Enable this capability by adding the --userspace_cross_toolchain option. Change-Id: I9eaaaa71ba483132fb68124e713a05d2918f9aa1 Signed-off-by: John Moon <quic_johmoo@quicinc.com>
This commit is contained in:
parent
2b0465b6c3
commit
8e5c9866a0
|
|
@ -9,11 +9,23 @@ import sys
|
|||
from subprocess import Popen
|
||||
|
||||
BAZEL_BIN = "./tools/bazel"
|
||||
CPU = "aarch64"
|
||||
HOST_CROSSTOOL = "@bazel_tools//tools/cpp:toolchain"
|
||||
|
||||
|
||||
def bazel(bazel_subcommand, targets, extra_options=[]):
|
||||
def get_cross_cli_opts(toolchain):
|
||||
return [
|
||||
"--cpu={}".format(CPU),
|
||||
"--crosstool_top={}".format(toolchain),
|
||||
"--host_crosstool_top={}".format(HOST_CROSSTOOL),
|
||||
]
|
||||
|
||||
|
||||
def bazel(bazel_subcommand, targets, extra_options=[], us_cross_toolchain=None):
|
||||
cmdline = [BAZEL_BIN, bazel_subcommand]
|
||||
cmdline.extend(extra_options)
|
||||
if us_cross_toolchain:
|
||||
cmdline.extend(get_cross_cli_opts(us_cross_toolchain))
|
||||
cmdline.extend(targets)
|
||||
cmdline_str = " ".join(cmdline)
|
||||
try:
|
||||
|
|
@ -27,19 +39,22 @@ def bazel(bazel_subcommand, targets, extra_options=[]):
|
|||
sys.exit(1)
|
||||
|
||||
|
||||
def build_targets(targets, user_opts=[]):
|
||||
bazel("build", targets, user_opts)
|
||||
def build_targets(targets, user_opts=[], us_cross_toolchain=None):
|
||||
if not targets:
|
||||
logging.warning("no targets to build")
|
||||
bazel("build", targets, user_opts, us_cross_toolchain)
|
||||
|
||||
|
||||
def run_targets(targets, user_opts=[]):
|
||||
def run_targets(targets, user_opts=[], us_cross_toolchain=None):
|
||||
# bazel cannot _run_ multiple targets at once, so run them in serial
|
||||
for target in targets:
|
||||
bazel("run", [target], user_opts)
|
||||
bazel("run", [target], user_opts, us_cross_toolchain)
|
||||
|
||||
|
||||
def build(
|
||||
target_list,
|
||||
user_opts=[],
|
||||
us_cross_toolchain=None,
|
||||
extra_targets=[],
|
||||
skip_kernel=False,
|
||||
skip_abl=False,
|
||||
|
|
@ -49,9 +64,12 @@ def build(
|
|||
msm_targets = ["//msm-kernel:{}_{}".format(t, v) for t, v in target_list]
|
||||
extra_msm_targets = []
|
||||
for extra in extra_targets:
|
||||
extra_msm_targets.extend(["//msm-kernel:{}_{}_{}".format(t, v, extra) for t, v in target_list])
|
||||
extra_msm_targets.extend(
|
||||
["//msm-kernel:{}_{}_{}".format(t, v, extra) for t, v in target_list]
|
||||
)
|
||||
|
||||
targets_to_build = []
|
||||
host_targets_to_build = []
|
||||
for t in msm_targets:
|
||||
logging.info(
|
||||
"skipping kernel build"
|
||||
|
|
@ -61,7 +79,7 @@ def build(
|
|||
)
|
||||
logging.info(
|
||||
"skipping host tools build"
|
||||
) if skip_host_tools else targets_to_build.append(t + "_dtc")
|
||||
) if skip_host_tools else host_targets_to_build.append(t + "_dtc")
|
||||
|
||||
targets_to_build += extra_msm_targets
|
||||
|
||||
|
|
@ -69,8 +87,13 @@ def build(
|
|||
logging.error("no targets to build")
|
||||
sys.exit(1)
|
||||
|
||||
build_targets(targets_to_build, user_opts)
|
||||
run_targets([t + "_dist" for t in targets_to_build], user_opts)
|
||||
logging.info("Building {} targets...".format(CPU))
|
||||
build_targets(targets_to_build, user_opts, us_cross_toolchain)
|
||||
run_targets([t + "_dist" for t in targets_to_build], user_opts, us_cross_toolchain)
|
||||
|
||||
logging.info("Building host targets...")
|
||||
build_targets(host_targets_to_build, user_opts)
|
||||
run_targets([t + "_dist" for t in host_targets_to_build], user_opts)
|
||||
|
||||
|
||||
def main():
|
||||
|
|
@ -85,6 +108,25 @@ def main():
|
|||
required=True,
|
||||
help="Target and variant to build (e.g. -t kalama gki). May be passed multiple times.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-u",
|
||||
"--userspace_cross_toolchain",
|
||||
default=None,
|
||||
metavar="TOOLCHAIN",
|
||||
help="Set a Bazel toolchain for cross-compiled userspace programs",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-e",
|
||||
"--extra_build_target",
|
||||
metavar="BUILD_TARGET",
|
||||
action="append",
|
||||
default=[],
|
||||
help="""
|
||||
Additional Bazel target to build and run dist. For example, "-t kalama gki --extra_target foo"
|
||||
would run "bazel build //msm-kernel:kalama_gki_foo && bazel run //msms-kernel:kalama_gki_foo_dist".
|
||||
May be passed multiple times.
|
||||
""",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--skip_kernel",
|
||||
action="store_true",
|
||||
|
|
@ -100,17 +142,6 @@ def main():
|
|||
action="store_true",
|
||||
help="Skip building host tools (DTC, etc.)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--extra_build_target",
|
||||
metavar="BUILD_TARGET",
|
||||
action="append",
|
||||
default=[],
|
||||
help="""
|
||||
Additional Bazel target to build and run dist. For example, "-t kalama gki --extra_target foo"
|
||||
would run "bazel build //msm-kernel:kalama_gki_foo && bazel run //msms-kernel:kalama_gki_foo_dist".
|
||||
May be passed multiple times.
|
||||
"""
|
||||
)
|
||||
parser.add_argument(
|
||||
"--log",
|
||||
help="Log level (debug, info, warning, error)",
|
||||
|
|
@ -127,7 +158,13 @@ def main():
|
|||
|
||||
extra_targets = list(args.extra_build_target)
|
||||
|
||||
build(args.target, user_opts, extra_targets, **vars(args))
|
||||
build(
|
||||
args.target,
|
||||
user_opts,
|
||||
args.userspace_cross_toolchain,
|
||||
extra_targets,
|
||||
**vars(args)
|
||||
)
|
||||
|
||||
logging.info("Build completed successfully!")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user