diff options
Diffstat (limited to 'android_tools/generate_bp.py')
-rwxr-xr-x | android_tools/generate_bp.py | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/android_tools/generate_bp.py b/android_tools/generate_bp.py index d5c699b5bb..7f3329985e 100755 --- a/android_tools/generate_bp.py +++ b/android_tools/generate_bp.py @@ -1,10 +1,12 @@ #!/usr/bin/env python import json +import os import sys PRINT_ORIGINAL_FULL = False +# This flags are augmented with flags added to the json files but not present in .gn or .gni files IGNORED_FLAGS = [ '-Wall', '-Werror', @@ -89,7 +91,9 @@ DEFAULT_CFLAGS_BY_ARCH = { 'x64': ['-msse2', '-mavx2', '-mfma', '-DHAVE_ARM64_CRC32C=0'], 'arm': ['-DWEBRTC_HAS_NEON', '-DWEBRTC_ARCH_ARM_V7', '-DWEBRTC_ARCH_ARM', '-mfpu=neon', '-mthumb', '-DHAVE_ARM64_CRC32C=0'], 'arm64': ['-DWEBRTC_HAS_NEON', '-DWEBRTC_ARCH_ARM64', '-DHAVE_ARM64_CRC32C=0'], + 'riscv64': ['-DHAVE_ARM64_CRC32C=0'], } +FLAGS = ['cflags', 'cflags_c', 'cflags_cc', 'asmflags'] ARCH_NAME_MAP = {n: n for n in DEFAULT_CFLAGS_BY_ARCH.keys()} ARCH_NAME_MAP['x64'] = 'x86_64' @@ -179,12 +183,7 @@ def PrintHeader(): print('}') def GatherDefaultFlags(targets): - default = { - 'cflags' : [], - 'cflags_c' : [], - 'cflags_cc' : [], - 'asmflags' : [], - } + default = { f: [] for f in FLAGS} arch = {a: {} for a in ARCHS} first = True @@ -654,6 +653,32 @@ def MergeAll(targets_by_arch): return targets +def GatherAllFlags(obj): + if type(obj) != type({}): + # not a dictionary + return set() + ret = set() + for f in FLAGS: + ret |= set(obj.get(f, [])) + for v in obj.values(): + ret |= GatherAllFlags(v) + return ret + +def FilterFlagsInUse(flags, directory): + unused = [] + for f in flags: + nf = f + if nf.startswith("-D"): + nf = nf[2:] + i = nf.find('=') + if i > 0: + nf = nf[:i] + c = os.system(f"find {directory} -name '*.gn*' | xargs grep -q -s -e '{nf}'") + if c != 0: + # couldn't find the flag in *.gn or *.gni + unused.append(f) + return unused + if len(sys.argv) != 2: print('wrong number of arguments', file = sys.stderr) exit(1) @@ -661,10 +686,15 @@ if len(sys.argv) != 2: dir = sys.argv[1] targets_by_arch = {} +flags = set() for arch in ARCHS: path = "{0}/project_{1}.json".format(dir, arch) json_file = open(path, 'r') targets_by_arch[arch] = Preprocess(json.load(json_file)) + flags |= GatherAllFlags(targets_by_arch[arch]) + +unusedFlags = FilterFlagsInUse(flags, f"{dir}/..") +IGNORED_FLAGS = sorted(set(IGNORED_FLAGS) | set(unusedFlags)) targets = MergeAll(targets_by_arch) |