Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 14d1d0b1 authored by Devin Moore's avatar Devin Moore Committed by Gerrit Code Review
Browse files

Merge "find_static_candidates.py: protect against missing keys in module" into main

parents a718299b 621b02ab
Loading
Loading
Loading
Loading
+26 −21
Original line number Diff line number Diff line
@@ -119,28 +119,23 @@ class TransitiveHelper:
  # modify the module's shared_libs and static_libs with all of the transient
  # dependencies required from all of the explicit dependencies
  def flattenDeps(self, module, module_info):
    libs_snapshot = dict(shared_libs = set(module["shared_libs"]), static_libs = set(module["static_libs"]))
    libs_snapshot = dict(shared_libs = set(module.get("shared_libs",{})), static_libs = set(module.get("static_libs",{})))

    for lib_class in ["shared_libs", "static_libs"]:
      for lib in libs_snapshot[lib_class]:
        if not lib or lib not in module_info:
        if not lib or lib not in module_info or lib_class not in module:
          continue
        if lib in self.visited:
          module[lib_class].update(self.visited[lib][lib_class])
        else:
          res = self.flattenDeps(module_info[lib], module_info)
          module[lib_class].update(res[lib_class])
          self.visited[lib][lib_class].update(res[lib_class])
          module[lib_class].update(res.get(lib_class, {}))
          self.visited[lib][lib_class].update(res.get(lib_class, {}))

    return module

def main():
  module_info = json.load(open(ANDROID_PRODUCT_OUT + "/module-info.json"))
  # turn all of the static_libs and shared_libs lists into sets to make them
  # easier to update
  for _, module in module_info.items():
    module["shared_libs"] = set(module["shared_libs"])
    module["static_libs"] = set(module["static_libs"])

  args = parse_args()

@@ -149,6 +144,12 @@ def main():
      print("Module {} does not exist".format(args.module))
      exit(1)

  # turn all of the static_libs and shared_libs lists into sets to make them
  # easier to update
  for _, module in module_info.items():
    module["shared_libs"] = set(module.get("shared_libs", {}))
    module["static_libs"] = set(module.get("static_libs", {}))

  includedStatically = defaultdict(set)
  includedSharedly = defaultdict(set)
  includedBothly = defaultdict(set)
@@ -160,6 +161,7 @@ def main():
        continue
      module = transitive.flattenDeps(module, module_info)
      # filter out fuzzers by their dependency on clang
      if "static_libs" in module:
        if "libclang_rt.fuzzer" in module["static_libs"]:
          continue
    else:
@@ -168,11 +170,14 @@ def main():
        continue

    # count all of the shared and static libs included in this module
    if "shared_libs" in module:
      for lib in module["shared_libs"]:
        includedSharedly[lib].add(name)
    if "static_libs" in module:
      for lib in module["static_libs"]:
        includedStatically[lib].add(name)

    if "shared_libs" in module and  "static_libs" in module:
      intersection = set(module["shared_libs"]).intersection(
          module["static_libs"]
      )