summaryrefslogtreecommitdiff
path: root/scripts/conv_linker_config.py
diff options
context:
space:
mode:
author Jooyung Han <jooyung@google.com> 2023-09-08 11:51:45 +0900
committer Jooyung Han <jooyung@google.com> 2023-09-08 15:40:12 +0900
commit4bc102672a5351528710ac6f77b67e2faaded6b9 (patch)
tree14ff35f6b940d36365d1fcaf9e8015257574a5c7 /scripts/conv_linker_config.py
parent86b9b13607e21f29234a546d347011b730e46795 (diff)
apex: invoke `conv_linker_config validate` as validation
`conv_linker_config validate` command is used to validate the linker configuration embedded in APEX to detect common mistakes. For example, when used in APEX, linker configuration can't set provideLibs/requireLibs. For APEX, there are provideSharedLibs/requireSharedLibs in APEX manifest for that purpose. One might make mistake by setting provideLibs in linker config. Now, when these unsupported properties are set, there'll be build-time error like: // set provideLibs key in com.android.art's linker config. $ m com.android.art ...image.apex/etc/linker.config.pb: provideLibs is set. Use provideSharedLibs in apex_manifest Bug: 264341796 Test: m com.android.art (see above) Change-Id: Ibaf7322616ad333569e6d721680f3d72243402a2
Diffstat (limited to 'scripts/conv_linker_config.py')
-rw-r--r--scripts/conv_linker_config.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/conv_linker_config.py b/scripts/conv_linker_config.py
index 3ac1b7e5e..c6aa3d0dc 100644
--- a/scripts/conv_linker_config.py
+++ b/scripts/conv_linker_config.py
@@ -120,6 +120,37 @@ def Merge(args):
f.write(pb.SerializeToString())
+def Validate(args):
+ if os.path.isdir(args.input):
+ config_file = os.path.join(args.input, 'etc/linker.config.pb')
+ if os.path.exists(config_file):
+ args.input = config_file
+ Validate(args)
+ # OK if there's no linker config file.
+ return
+
+ if not os.path.isfile(args.input):
+ sys.exit(f"{args.input} is not a file")
+
+ pb = linker_config_pb2.LinkerConfig()
+ with open(args.input, 'rb') as f:
+ pb.ParseFromString(f.read())
+
+ if args.type == 'apex':
+ # Shouldn't use provideLibs/requireLibs in APEX linker.config.pb
+ if getattr(pb, 'provideLibs'):
+ sys.exit(f'{args.input}: provideLibs is set. Use provideSharedLibs in apex_manifest')
+ if getattr(pb, 'requireLibs'):
+ sys.exit(f'{args.input}: requireLibs is set. Use requireSharedLibs in apex_manifest')
+ elif args.type == 'system':
+ if getattr(pb, 'visible'):
+ sys.exit(f'{args.input}: do not use visible, which is for APEX')
+ if getattr(pb, 'permittedPaths'):
+ sys.exit(f'{args.input}: do not use permittedPaths, which is for APEX')
+ else:
+ sys.exit(f'Unknown type: {args.type}')
+
+
def GetArgParser():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
@@ -227,6 +258,18 @@ def GetArgParser():
help='Linker configuration files to merge.')
append.set_defaults(func=Merge)
+ validate = subparsers.add_parser('validate', help='Validate configuration')
+ validate.add_argument(
+ '--type',
+ required=True,
+ choices=['apex', 'system'],
+ help='Type of linker configuration')
+ validate.add_argument(
+ 'input',
+ help='Input can be a directory which has etc/linker.config.pb or a path'
+ ' to the linker config file')
+ validate.set_defaults(func=Validate)
+
return parser