# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

action("usb_gadget") {
  script = "//tools/usb_gadget/package.py"
  inputs = [
    "__init__.py",
    "__main__.py",
    "composite_echo_gadget.py",
    "composite_gadget.py",
    "default_gadget.py",
    "echo_gadget.py",
    "gadget.py",
    "hid_constants.py",
    "hid_descriptors.py",
    "hid_echo_gadget.py",
    "hid_gadget.py",
    "keyboard_gadget.py",
    "linux_gadgetfs.py",
    "mouse_gadget.py",
    "msos20_descriptors.py",
    "server.py",
    "usb_constants.py",
    "usb_descriptors.py",
  ]
  package_path = "$root_build_dir/usb_gadget.zip"
  hash_path = "$root_build_dir/usb_gadget.zip.md5"
  outputs = [
    package_path,
    hash_path,
  ]
  args = [
           "--zip-file",
           rebase_path(package_path, root_build_dir),
           "--hash-file",
           rebase_path(hash_path, root_build_dir),
         ] + rebase_path(inputs, root_build_dir)
}
