diff options
author | 2020-11-16 10:48:44 +0900 | |
---|---|---|
committer | 2020-12-01 14:09:03 +0900 | |
commit | 24dfc1fbb2d2ccf5377613f3c0bc4b088f39fd0e (patch) | |
tree | 060f5989cb00f962d3b72baf664233c1d9ce3d7b /scripts/conv_linker_config.py | |
parent | 493e7ec3eee7e62035326eff5defbeb0cca6de82 (diff) |
Generate system stub library list at build time
List of stub libraries from system (and bionic APEX) is currently
managed in static file. This change generates the list at build time and
adds to the system config so linkerconfig can use it.
Bug: 172889962
Test: Build cuttlefish and confirmed list is generated in
/system/etc/linker.config.pb
Change-Id: Ie0400e9d1098b0de19c6a7c25f261384aadde0a3
Diffstat (limited to 'scripts/conv_linker_config.py')
-rw-r--r-- | scripts/conv_linker_config.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/scripts/conv_linker_config.py b/scripts/conv_linker_config.py index 81425fb35..fca71ad56 100644 --- a/scripts/conv_linker_config.py +++ b/scripts/conv_linker_config.py @@ -18,8 +18,10 @@ import argparse import collections import json +import os import linker_config_pb2 +from google.protobuf.descriptor import FieldDescriptor from google.protobuf.json_format import ParseDict from google.protobuf.text_format import MessageToString @@ -43,6 +45,25 @@ def Print(args): print(MessageToString(pb)) +def SystemProvide(args): + pb = linker_config_pb2.LinkerConfig() + with open(args.source, 'rb') as f: + pb.ParseFromString(f.read()) + libraries = args.value.split() + + def IsInLibPath(lib_name): + lib_path = os.path.join(args.system, 'lib', lib_name) + lib64_path = os.path.join(args.system, 'lib64', lib_name) + return os.path.exists(lib_path) or os.path.islink(lib_path) or os.path.exists(lib64_path) or os.path.islink(lib64_path) + + installed_libraries = list(filter(IsInLibPath, libraries)) + for item in installed_libraries: + if item not in getattr(pb, 'provideLibs'): + getattr(pb, 'provideLibs').append(item) + with open(args.output, 'wb') as f: + f.write(pb.SerializeToString()) + + def GetArgParser(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() @@ -73,6 +94,32 @@ def GetArgParser(): help='Source linker configuration file in protobuf.') print_proto.set_defaults(func=Print) + system_provide_libs = subparsers.add_parser( + 'systemprovide', help='Append system provide libraries into the configuration.') + system_provide_libs.add_argument( + '-s', + '--source', + required=True, + type=str, + help='Source linker configuration file in protobuf.') + system_provide_libs.add_argument( + '-o', + '--output', + required=True, + type=str, + help='Target linker configuration file to write in protobuf.') + system_provide_libs.add_argument( + '--value', + required=True, + type=str, + help='Values of the libraries to append. If there are more than one it should be separated by empty space') + system_provide_libs.add_argument( + '--system', + required=True, + type=str, + help='Path of the system image.') + system_provide_libs.set_defaults(func=SystemProvide) + return parser |