Add some scripts useful for merging with upstream-master

Bug: 153469641
Test: mm
Change-Id: Ie9a90d2ffb0a83e513bc90e2e906e2e8ab369981
This commit is contained in:
Jorge E. Moreira
2020-07-21 17:59:35 -07:00
parent 8e1bf7eee4
commit 6a057ef552
5 changed files with 194929 additions and 0 deletions

View File

@ -0,0 +1,18 @@
#!/bin/bash
set -o errexit
set -o xtrace
DIR=$(dirname $0)
"${DIR}"/generate_bp.py "${DIR}"/selected_targets.json | \
grep -v 'PACKAGE_VERSION' | \
grep -v 'PACKAGE_STRING' >"${DIR}"/../Android.bp
# The alsa device causes a double lock on a mutex, don't use it
sed -i -e 's/WEBRTC_ENABLE_LINUX_ALSA/WEBRTC_DUMMY_FILE_DEVICES/g' "${DIR}/../Android.bp"
source "${DIR}"/../../../build/envsetup.sh
bpfmt -w "${DIR}"/../Android.bp

272
android_tools/generate_bp.py Executable file
View File

@ -0,0 +1,272 @@
#!/usr/bin/env python
import json
import sys
# Set this to True to generate a default entry with all the flags and defines
# common to all the modules that needs to be curated by hand after it's
# generated. When set to False it prints the last curated version of the
# default, which could be incomplete.
GENERATE_FULL_DEFAULT = False
PRINT_ORIGINALS = False
GENERATE_ALL_FLAGS = False
if len(sys.argv) != 2:
print('wrong number of arguments')
exit()
def FormatList(l):
return json.dumps(l)
def FilterHeaders(l):
return [x for x in l if not x.endswith('.h')]
def PrintOriginCommentedOut(target):
if PRINT_ORIGINALS:
print('/* From target:')
print(json.dumps(target, sort_keys = True, indent = 4))
print('*/')
def MakeRelatives(l):
return [x.split('//').pop() for x in l]
def FormatName(name):
return 'webrtc_' + name.split('/').pop().replace(':', '__')# .replace('/', '_').replace(':', '_')
def FilterFlags(flags, to_skip = set([])):
if GENERATE_ALL_FLAGS:
skip = set([
'-L',
'-isystem',
'-Xclang',
'-B',
'--sysroot',
'-fcrash-diagnostics-dir',
'.',
'-fdebug-compilation-dir',
'-instcombine-lower-dbg-declare=0',
'-Wno-non-c-typedef-for-linkage',
'-Werror',
'-fcomplete-member-pointers',
'-m64',
'-march=x86-64'
]).union(to_skip)
return [x for x in flags if not any([x.startswith(y) for y in skip])]
else:
return [x for x in flags if x == '-msse2']
def GenerateDefault(targets):
in_default = {
'cflags' : [],
'cflags_c' : [],
'cflags_cc' : [],
'ldflags' : [],
'asmflags' : [],
'defines' : []
}
first = True
for target in targets:
typ = target['type']
if typ == 'static_library':
if first:
first = False
# Add all the flags to the default, we'll remove some later
for flag_type in in_default.keys():
in_default[flag_type] = []
for flag in target[flag_type]:
in_default[flag_type].append(flag)
else:
for flag_type in in_default.keys():
flags_to_remove = []
for flag in in_default[flag_type]:
if flag not in target[flag_type]:
flags_to_remove.append[flag_type]
for flag in flags_to_remove:
in_default[flag_type].remove(flag)
defines = in_default['defines']
in_default.pop('defines')
in_default['cflags'].extend(['-D{0}'.format(x) for x in defines])
if GENERATE_FULL_DEFAULT:
print('cc_defaults {')
print(' name: "webrtc_defaults",')
print(' local_include_dirs: ["."],')
for typ in in_default.keys():
print(' {0}: ['.format(typ.replace('asmflags', 'asflags')
.replace('cflags_cc', 'cppflags')
.replace('cflags_c', 'conlyflags')))
for flag in FilterFlags(in_default[typ]):
print(' "{0}",'.format(flag.replace('"', '\\"')))
print(' ],')
print('}')
else:
print('cc_defaults {')
print(' name: "webrtc_defaults",')
print(' local_include_dirs: [')
print(' ".",')
print(' ],')
print(' cflags: [')
print(' "-Wno-unused-parameter",')
print(' "-Wno-missing-field-initializers",')
print(' "-DUSE_UDEV",')
print(' "-DUSE_AURA=1",')
print(' "-DUSE_GLIB=1",')
print(' "-DUSE_NSS_CERTS=1",')
print(' "-DUSE_X11=1",')
print(' "-D_FILE_OFFSET_BITS=64",')
print(' "-D_LARGEFILE_SOURCE",')
print(' "-D_LARGEFILE64_SOURCE",')
print(' "-D_GNU_SOURCE",')
print(' "-DWEBRTC_ENABLE_PROTOBUF=0",')
print(' "-DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE",')
print(' "-DRTC_ENABLE_VP9",')
print(' "-DHAVE_SCTP",')
print(' "-DWEBRTC_LIBRARY_IMPL",')
print(' "-DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1",')
print(' "-DWEBRTC_POSIX",')
print(' "-DWEBRTC_LINUX",')
print(' ],')
print(' header_libs: [')
print(' "libabsl_headers",')
print(' ],')
print(' static_libs: [')
print(' "libaom",')
print(' "libevent",')
print(' "libopus",')
print(' "libsrtp2",')
print(' "libvpx",')
print(' "libyuv",')
print(' "libpffft",')
print(' "rnnoise_rnn_vad",')
print(' "usrsctplib",')
print(' ],')
print(' shared_libs: [')
print(' "libcrypto",')
print(' "libssl",')
print(' ],')
print(' host_supported: true,')
print(' device_supported: false,')
print(' arch: {')
print(' arm: {')
print(' enabled: false,')
print(' },')
print(' },')
print('}')
in_default['cflags'].extend([
"-Wno-unused-parameter",
"-Wno-missing-field-initializers",
"-DUSE_UDEV",
"-DUSE_AURA=1",
"-DUSE_GLIB=1",
"-DUSE_NSS_CERTS=1",
"-DUSE_X11=1",
"-D_FILE_OFFSET_BITS=64",
"-D_LARGEFILE_SOURCE",
"-D_LARGEFILE64_SOURCE",
"-D_GNU_SOURCE",
"-DWEBRTC_ENABLE_PROTOBUF=0",
"-DWEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE",
"-DRTC_ENABLE_VP9",
"-DHAVE_SCTP",
"-DWEBRTC_LIBRARY_IMPL",
"-DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1",
"-DWEBRTC_POSIX",
"-DWEBRTC_LINUX"
])
return in_default
def GenerateGroup(target):
PrintOriginCommentedOut(target)
def GenerateSourceSet(target):
PrintOriginCommentedOut(target)
if target.has_key('sources'):
name = FormatName(target['name'])
print('filegroup {')
print(' name: "{0}",'.format(name))
print(' srcs: {0},'.format(FormatList(MakeRelatives(FilterHeaders(target['sources'])))))
print('}')
return name
return ""
def GenerateStaticLib(target, targets, flags_in_default):
PrintOriginCommentedOut(target)
name = FormatName(target['name'])
print('cc_library_static {')
print(' name: "{0}",'.format(name))
print(' defaults: ["webrtc_defaults"],')
sources = []
sources.extend(MakeRelatives(FilterHeaders(target['sources'])))
for trg in targets:
if trg['type'] == 'source_set' and trg['name'] in target['deps']:
sources.append(':' + FormatName(trg['name']))
print(' srcs: {0},'.format(FormatList(sources)))
print(' host_supported: true,')
if target.has_key('asmflags'):
asmflags = FilterFlags(target['asmflags'], set(flags_in_default['asmflags']))
if len(asmflags) > 0:
print(' asflags: {0},'.format(FormatList(asmflags)))
cflags = []
if target.has_key('cflags'):
cflags.extend(target['cflags'])
cflags = FilterFlags(cflags, set(flags_in_default['cflags']))
if target.has_key('defines'):
cflags.extend(['-D' + x for x in target['defines']])
cflags = [x for x in cflags if x not in flags_in_default['cflags']]
if len(cflags) > 0:
print(' cflags: {0},'.format(FormatList(cflags)))
if target.has_key('cflags_c'):
cflags_c = FilterFlags(target['cflags_c'], set(flags_in_default['cflags_c']))
if len(cflags_c) > 0:
print(' conlyflags: {0},'.format(FormatList(cflags_c)))
if target.has_key('cflags_cc'):
cflags_cc = FilterFlags(target['cflags_cc'], set(flags_in_default['cflags_cc']))
if len(cflags_cc) > 0:
print(' cppflags: {0},'.format(FormatList(cflags_cc)))
if target.has_key('ldflags'):
ldflags = FilterFlags(target['ldflags'], set(flags_in_default['ldflags']))
if len(ldflags) > 0:
print(' ldflags: {0},'.format(FormatList(ldflags)))
static_libs = []
for trg in targets:
if trg['type'] == 'static_library' and target['deps'].count(trg['name']) > 0:
static_libs.append(FormatName(trg['name']))
if len(static_libs) > 0:
print(' static_libs: {0},'.format(FormatList(static_libs)))
for dep in target['deps']:
if FormatName(dep) not in static_libs:
#print(' // omitted dep: {0}'.format(dep))
pass
print('}')
return name
json_file = open(sys.argv[1], "r")
targets = json.load(json_file)
flags_in_default = GenerateDefault(targets)
print("\n\n")
static_libs = []
file_groups = []
for target in targets:
typ = target['type']
if typ == 'static_library':
lib_name = GenerateStaticLib(target, targets, flags_in_default)
static_libs.append(lib_name)
elif typ == 'source_set':
group_name = GenerateSourceSet(target)
if len(group_name) > 0:
file_groups.append(group_name)
elif typ == 'group':
GenerateGroup(target)
else:
print('Unknown type: {0}'.format(typ))
print("\n\n")
print('cc_library_static {')
print(' name: "libwebrtc",')
print(' defaults: ["webrtc_defaults"],')
print(' export_include_dirs: ["."],')
print(' whole_static_libs: {0},'.format(FormatList(static_libs + ['libpffft', 'rnnoise_rnn_vad', 'usrsctplib'])))
print(' srcs: {0},').format(FormatList([':{0}'.format(x) for x in file_groups]))
print('}')

39876
android_tools/project.json Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff