Home | History | Annotate | Download | only in gyp
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2013 The Chromium Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 """Pushes native libraries to a device.
      8 
      9 """
     10 
     11 import optparse
     12 import os
     13 import sys
     14 
     15 BUILD_ANDROID_DIR = os.path.join(os.path.dirname(__file__), os.pardir)
     16 sys.path.append(BUILD_ANDROID_DIR)
     17 
     18 from pylib import constants
     19 
     20 from util import build_device
     21 from util import build_utils
     22 from util import md5_check
     23 
     24 def DoPush(options):
     25   libraries = build_utils.ReadJson(options.libraries_json)
     26 
     27   device = build_device.GetBuildDeviceFromPath(
     28       options.build_device_configuration)
     29   if not device:
     30     return
     31 
     32   serial_number = device.GetSerialNumber()
     33   # A list so that it is modifiable in Push below.
     34   needs_directory = [True]
     35   for lib in libraries:
     36     device_path = os.path.join(options.device_dir, lib)
     37     host_path = os.path.join(options.libraries_dir, lib)
     38 
     39     def Push():
     40       if needs_directory:
     41         device.RunShellCommand('mkdir -p ' + options.device_dir)
     42         needs_directory[:] = [] # = False
     43       device.PushIfNeeded(host_path, device_path)
     44 
     45     record_path = '%s.%s.push.md5.stamp' % (host_path, serial_number)
     46     md5_check.CallAndRecordIfStale(
     47         Push,
     48         record_path=record_path,
     49         input_paths=[host_path],
     50         input_strings=[device_path])
     51 
     52 
     53 def main():
     54   parser = optparse.OptionParser()
     55   parser.add_option('--libraries-dir',
     56       help='Directory that contains stripped libraries.')
     57   parser.add_option('--device-dir',
     58       help='Device directory to push the libraries to.')
     59   parser.add_option('--libraries-json',
     60       help='Path to the json list of native libraries.')
     61   parser.add_option('--stamp', help='Path to touch on success.')
     62   parser.add_option('--build-device-configuration',
     63       help='Path to build device configuration.')
     64   parser.add_option('--configuration-name',
     65       help='The build CONFIGURATION_NAME')
     66   options, _ = parser.parse_args()
     67 
     68   required_options = ['libraries_dir', 'device_dir', 'libraries_json']
     69   build_utils.CheckOptions(options, parser, required=required_options)
     70   constants.SetBuildType(options.configuration_name)
     71 
     72   DoPush(options)
     73 
     74   if options.stamp:
     75     build_utils.Touch(options.stamp)
     76 
     77 
     78 if __name__ == '__main__':
     79   sys.exit(main())
     80