text: # -*- coding: utf-8 -*-
  # Copyright 2020 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.
  
  """Build the AP firmware for a build target."""
  
  from __future__ import print_function
  
  import sys
  
  from chromite.cli import command
  from chromite.lib import build_target_lib
  from chromite.lib import commandline
  from chromite.lib import cros_build_lib
  from chromite.lib.firmware import ap_firmware
  
  assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
  
  
  @command.CommandDecorator('build-ap')
  class BuildApCommand(command.CliCommand):
    """Build the AP Firmware for the requested build target."""
  
    EPILOG = """
  To build the AP Firmware for foo:
    cros build-ap -b foo
  
  To build the AP Firmware only for foo-variant:
    cros build-ap -b foo --fw-name foo-variant
  """
  
    def __init__(self, options):
      super(BuildApCommand, self).__init__(options)
      self.build_target = build_target_lib.BuildTarget(self.options.build_target)
  
    @classmethod
    def AddParser(cls, parser):
      super(cls, BuildApCommand).AddParser(parser)
  
      parser.add_argument(
          '-b',
          '--build-target',
          dest='build_target',
          default=cros_build_lib.GetDefaultBoard(),
          required=not bool(cros_build_lib.GetDefaultBoard()),
          help='The build target whose AP firmware should be built.')
  
      parser.add_argument(
          '--fw-name',
          '--variant',
          dest='fw_name',
          help='Sets the FW_NAME environment variable. Set to build only the '
               "specified variant's firmware.")
  
      # TODO(saklein): Remove when added to base parser.
      parser.add_argument(
          '-n',
          '--dry-run',
          action='store_true',
          default=False,
          help='Perform a dry run, describing the steps without running them.')
  
    def Run(self):
      """Run cros build-ap."""
      self.options.Freeze()
  
      commandline.RunInsideChroot(self)
  
      try:
        ap_firmware.build(
            self.build_target,
            fw_name=self.options.fw_name,
            dry_run=self.options.dry_run)
      except ap_firmware.Error as e:
        cros_build_lib.Die(e)
  