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 json
     12 import optparse
     13 import os
     14 import sys
     15 
     16 from util import build_device
     17 from util import build_utils
     18 from util import md5_check
     19 
     20 def DoPush(options):
     21   libraries = build_utils.ReadJson(options.libraries_json)
     22 
     23   device = build_device.GetBuildDeviceFromPath(
     24       options.build_device_configuration)
     25   if not device:
     26     return
     27 
     28   serial_number = device.GetSerialNumber()
     29   # A list so that it is modifiable in Push below.
     30   needs_directory = [True]
     31   for lib in libraries:
     32     device_path = os.path.join(options.device_dir, lib)
     33     host_path = os.path.join(options.libraries_dir, lib)
     34 
     35     def Push():
     36       if needs_directory:
     37         device.RunShellCommand('mkdir -p ' + options.device_dir)
     38         needs_directory[:] = [] # = False
     39       device.PushIfNeeded(host_path, device_path)
     40 
     41     record_path = '%s.%s.push.md5.stamp' % (host_path, serial_number)
     42     md5_check.CallAndRecordIfStale(
     43         Push,
     44         record_path=record_path,
     45         input_paths=[host_path],
     46         input_strings=[device_path])
     47 
     48 
     49 def main(argv):
     50   parser = optparse.OptionParser()
     51   parser.add_option('--libraries-dir',
     52       help='Directory that contains stripped libraries.')
     53   parser.add_option('--device-dir',
     54       help='Device directory to push the libraries to.')
     55   parser.add_option('--libraries-json',
     56       help='Path to the json list of native libraries.')
     57   parser.add_option('--stamp', help='Path to touch on success.')
     58   parser.add_option('--build-device-configuration',
     59       help='Path to build device configuration.')
     60   options, _ = parser.parse_args()
     61 
     62   required_options = ['libraries_dir', 'device_dir', 'libraries_json']
     63   build_utils.CheckOptions(options, parser, required=required_options)
     64 
     65   DoPush(options)
     66 
     67   if options.stamp:
     68     build_utils.Touch(options.stamp)
     69 
     70 
     71 if __name__ == '__main__':
     72   sys.exit(main(sys.argv))
     73