blob: 54b616d5c6ac67442db0cea9034f0445750d3f2e [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Installs cross toolchain libraries into a sysroot.
This script is not meant to be used by developers directly.
Run at your own risk.
"""
from __future__ import print_function
from chromite.lib import commandline
from chromite.lib import cros_build_lib
from chromite.lib import sysroot_lib
from chromite.lib import toolchain
def GetParser():
"""Build the argument parser."""
parser = commandline.ArgumentParser(description=__doc__)
parser.add_argument('--noconfigure', dest='configure', default=True,
action='store_false',
help='Disable updating config files in <sysroot>/etc '
'after installation.')
parser.add_argument('--force', default=False, action='store_true',
help='Install toolchain even if already up to date.')
parser.add_argument('--toolchain',
help='Toolchain. For example: i686-pc-linux-gnu, '
'armv7a-softfloat-linux-gnueabi.')
parser.add_argument('--sysroot', type='path', required=True,
help='The sysroot to install the toolchain for.')
return parser
def _GetToolchain(toolchain_name, sysroot):
"""Get the toolchain value or exit with an error message."""
if toolchain_name:
# Use the CLI argument when provided.
return toolchain_name
# Fetch the value from the sysroot.
toolchain_name = sysroot.GetStandardField(sysroot_lib.STANDARD_FIELD_CHOST)
if not toolchain_name:
cros_build_lib.Die('No toolchain specified in the sysroot or command line.')
return toolchain_name
def _ParseArgs(argv):
"""Parse and validate arguments."""
parser = GetParser()
opts = parser.parse_args(argv)
# Expand the sysroot path to a sysroot object.
opts.sysroot = sysroot_lib.Sysroot(opts.sysroot)
# Make sure the toolchain value reflects the toolchain we will be using.
opts.toolchain = _GetToolchain(opts.toolchain, opts.sysroot)
opts.Freeze()
return opts
def main(argv):
cros_build_lib.AssertInsideChroot()
opts = _ParseArgs(argv)
try:
toolchain.InstallToolchain(sysroot=opts.sysroot,
toolchain=opts.toolchain,
force=opts.force, configure=opts.configure)
except (toolchain.Error, cros_build_lib.RunCommandError, ValueError) as e:
cros_build_lib.Die(e.message)