Widevine version genrules
Bug: 327241925 Test: dumpsys android.hardware.drm.IDrmFactory/widevine (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:9f32150e5fae37bc200eaaca3794605a8bf17806) Merged-In: Ice412cd2739f0c8a95af488cf565a3abf484200a Change-Id: Ice412cd2739f0c8a95af488cf565a3abf484200a
This commit is contained in:
committed by
Android Build Coastguard Worker
parent
6c7988f8c9
commit
cada7659cb
117
libwvdrmengine/wv-android-genrule.py
Normal file
117
libwvdrmengine/wv-android-genrule.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
INT32_MAX = 2 ** 31 - 1
|
||||
|
||||
def guess_build_top():
|
||||
if 'ANDROID_BUILD_TOP' in os.environ:
|
||||
return os.environ['ANDROID_BUILD_TOP']
|
||||
cwd = os.getcwd()
|
||||
parts = cwd.split('/out/soong/')
|
||||
return parts[0]
|
||||
|
||||
|
||||
def get_build_number():
|
||||
top = guess_build_top()
|
||||
with open(f'{top}/out/soong/build_number.txt', 'r') as file:
|
||||
soong_build_number = file.read().strip()
|
||||
return soong_build_number
|
||||
|
||||
|
||||
def get_build_id():
|
||||
top = guess_build_top()
|
||||
with open(f'{top}/build/core/build_id.mk', 'r') as file:
|
||||
for line in file:
|
||||
if line.startswith('BUILD_ID='):
|
||||
_, rc = line.strip().split('=', 1)
|
||||
return rc
|
||||
|
||||
|
||||
def hdr(args):
|
||||
output = f'''\
|
||||
#ifndef {args.guard}
|
||||
#define {args.guard}
|
||||
|
||||
#define WV_ANDROID_BUILD_ID "{get_build_id()}"
|
||||
|
||||
#endif // {args.guard}'''
|
||||
print(output)
|
||||
|
||||
|
||||
def safe_int(str_value):
|
||||
"""Converts a build number to an integer, capped at INT32_MAX.
|
||||
|
||||
INT32_MAX is the max supported by Android Build.
|
||||
|
||||
Args:
|
||||
str_value: The build number to convert.
|
||||
|
||||
Returns:
|
||||
The integer representation of build number, capped at INT32_MAX;
|
||||
0 on error.
|
||||
"""
|
||||
try:
|
||||
v = int(str_value)
|
||||
return min(INT32_MAX, v)
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
|
||||
def apex_manifest(args):
|
||||
rc = get_build_id()
|
||||
v = get_build_number()
|
||||
|
||||
if v.startswith('eng.'):
|
||||
# local build
|
||||
#
|
||||
# set large version so local builds can overwrite other build types
|
||||
v = INT32_MAX
|
||||
elif re.match(r'P\d+$', v):
|
||||
# presubmit build
|
||||
#
|
||||
# numeric value of presubmit builds are typically higher than
|
||||
# postsubmit builds, so presubmit builds can overwrite postsubmit
|
||||
# builds during test
|
||||
v = safe_int(v[1:])
|
||||
elif rc in ('MASTER', 'MAIN'):
|
||||
# postsubmit dev branch
|
||||
#
|
||||
# set APEX version to 1 (preserve udc behavior)
|
||||
v = 1
|
||||
elif re.match(r'\d+$', v):
|
||||
# postsubmit release branch
|
||||
#
|
||||
# set APEX version to ab build number
|
||||
v = safe_int(v)
|
||||
else:
|
||||
raise RuntimeError('Unsupported Widevine APEX build env')
|
||||
|
||||
out = dict(name=args.name, version=v, requireNativeLibs=['liboemcrypto'])
|
||||
print(json.dumps(out))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description='Widevine Android genrule utility')
|
||||
parser.set_defaults(func=lambda _: parser.print_help())
|
||||
subparsers = parser.add_subparsers(help='Available subcommands')
|
||||
|
||||
hdr_description = 'Generate build id C++ header (stdout)'
|
||||
parser_hdr = subparsers.add_parser('build_id_header', help=hdr_description)
|
||||
parser_hdr.add_argument('--guard', type=str,
|
||||
default='WVCDM_WV_ANDROID_BUILD_ID_H_',
|
||||
help='Include guard')
|
||||
parser_hdr.set_defaults(func=hdr)
|
||||
|
||||
apex_description = 'Generate APEX manifest json (stdout)'
|
||||
parser_apex = subparsers.add_parser('apex_manifest', help=apex_description)
|
||||
parser_apex.add_argument('--name', help='apex name',
|
||||
default='com.google.android.widevine')
|
||||
parser_apex.set_defaults(func=apex_manifest)
|
||||
|
||||
# Parse the arguments and call the appropriate function
|
||||
args = parser.parse_args()
|
||||
args.func(args)
|
||||
Reference in New Issue
Block a user