Home | History | Annotate | Download | only in brillo
      1 # Copyright 2016 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 from autotest_lib.client.common_lib import utils
      6 
      7 
      8 def has_hal(hal_library_name, host=None, accept_64bit=True, accept_32bit=True):
      9     """Detect if the host has the given HAL.
     10 
     11     Note that a board can have several HALs, even of a same type.  libhardware
     12     picks among them at runtime based on values in system properties.  So if
     13     hal_library_name == 'gralloc', we might find that we have both
     14     gralloc.brilloemulator.so and gralloc.default.so.  This function will
     15     not speculate about which will be loaded at runtime.
     16 
     17     @param hal_library_name: string name of the hal (e.g. gralloc or camera).
     18     @param host: optional host object representing a remote DUT.  If None,
     19             then we'll look for the HAL on localhost.
     20     @param accept_64bit: True iff a 64 bit version of the library suffices.
     21     @param accept_32bit: True iff a 32 bit version of the library suffices.
     22 
     23     @return True iff an appropriate library is found on the device.
     24 
     25     """
     26     run = utils.run if host is None else host.run
     27     paths = []
     28     if accept_64bit:
     29         paths.append('/system/lib64/hw')
     30     if accept_32bit:
     31         paths.append('/system/lib/hw')
     32     for path in paths:
     33         result = run('find %s -name %s.*.so 2>/dev/null' %
     34                      (path, hal_library_name), ignore_status=True)
     35         if result.exit_status == 0 and result.stdout.strip():
     36             return True
     37 
     38     return False
     39