123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # xcompile.py — builds Materialize-specific Docker images.
- import argparse
- import os
- import sys
- from materialize import mzbuild, spawn, xcompile
- def main() -> int:
- parser = argparse.ArgumentParser(
- prog="xcompile",
- description="Facilitates cross compilation of Rust binaries.",
- epilog="For additional help on a subcommand, run:\n\n %(prog)s <command> -h",
- )
- parser.add_argument(
- "--arch",
- default=mzbuild.Arch.X86_64,
- help="the CPU architecture to build for",
- type=mzbuild.Arch,
- choices=mzbuild.Arch,
- )
- parser.add_argument(
- "--channel",
- default="nightly" if os.getenv("CI_SANITIZER", "none") else None,
- help="Rust compiler channel to use",
- )
- subparsers = parser.add_subparsers(
- dest="command", metavar="<command>", required=True
- )
- cargo_parser = subparsers.add_parser(
- "cargo", help="run a cross-compiling cargo command"
- )
- cargo_parser.add_argument(
- "--rustflags",
- action="append",
- default=[],
- help="override the default flags to the Rust compiler",
- )
- cargo_parser.add_argument("subcommand", help="the cargo subcommand to invoke")
- cargo_parser.add_argument(
- "subargs", nargs=argparse.REMAINDER, help="the arguments to pass to cargo"
- )
- tool_parser = subparsers.add_parser(
- "tool", help="run a cross-compiling binutils tool"
- )
- tool_parser.add_argument(
- "--name-target-prefix",
- default=True,
- action=argparse.BooleanOptionalAction,
- help="whether the tool name should be prefixed with the target name",
- )
- tool_parser.add_argument("tool", metavar="TOOL", help="the binutils tool to invoke")
- tool_parser.add_argument(
- "subargs", nargs=argparse.REMAINDER, help="the arguments to pass to the tool"
- )
- args = parser.parse_args()
- if args.command == "cargo":
- spawn.runv(
- [
- *xcompile.cargo(
- arch=args.arch,
- channel=args.channel,
- subcommand=args.subcommand,
- rustflags=args.rustflags,
- ),
- *args.subargs,
- ]
- )
- elif args.command == "tool":
- spawn.runv(
- [
- *xcompile.tool(
- args.arch, args.tool, prefix_name=args.name_target_prefix
- ),
- *args.subargs,
- ]
- )
- else:
- raise RuntimeError("unreachable")
- return 0
- if __name__ == "__main__":
- sys.exit(main())
|