summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/android/gyp/turbine.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/build/android/gyp/turbine.py')
-rwxr-xr-xthird_party/libwebrtc/build/android/gyp/turbine.py170
1 files changed, 170 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/android/gyp/turbine.py b/third_party/libwebrtc/build/android/gyp/turbine.py
new file mode 100755
index 0000000000..074550e047
--- /dev/null
+++ b/third_party/libwebrtc/build/android/gyp/turbine.py
@@ -0,0 +1,170 @@
+#!/usr/bin/env python3
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Wraps the turbine jar and expands @FileArgs."""
+
+import argparse
+import functools
+import logging
+import os
+import shutil
+import sys
+import time
+
+import javac_output_processor
+from util import build_utils
+
+
+def ProcessJavacOutput(output, target_name):
+ output_processor = javac_output_processor.JavacOutputProcessor(target_name)
+ lines = output_processor.Process(output.split('\n'))
+ return '\n'.join(lines)
+
+
+def main(argv):
+ build_utils.InitLogging('TURBINE_DEBUG')
+ argv = build_utils.ExpandFileArgs(argv[1:])
+ parser = argparse.ArgumentParser()
+ build_utils.AddDepfileOption(parser)
+ parser.add_argument('--target-name', help='Fully qualified GN target name.')
+ parser.add_argument(
+ '--turbine-jar-path', required=True, help='Path to the turbine jar file.')
+ parser.add_argument(
+ '--java-srcjars',
+ action='append',
+ default=[],
+ help='List of srcjars to include in compilation.')
+ parser.add_argument(
+ '--bootclasspath',
+ action='append',
+ default=[],
+ help='Boot classpath for javac. If this is specified multiple times, '
+ 'they will all be appended to construct the classpath.')
+ parser.add_argument(
+ '--java-version',
+ help='Java language version to use in -source and -target args to javac.')
+ parser.add_argument('--classpath', action='append', help='Classpath to use.')
+ parser.add_argument(
+ '--processors',
+ action='append',
+ help='GN list of annotation processor main classes.')
+ parser.add_argument(
+ '--processorpath',
+ action='append',
+ help='GN list of jars that comprise the classpath used for Annotation '
+ 'Processors.')
+ parser.add_argument(
+ '--processor-args',
+ action='append',
+ help='key=value arguments for the annotation processors.')
+ parser.add_argument('--jar-path', help='Jar output path.', required=True)
+ parser.add_argument(
+ '--generated-jar-path',
+ required=True,
+ help='Output path for generated source files.')
+ parser.add_argument('--warnings-as-errors',
+ action='store_true',
+ help='Treat all warnings as errors.')
+ options, unknown_args = parser.parse_known_args(argv)
+
+ options.bootclasspath = build_utils.ParseGnList(options.bootclasspath)
+ options.classpath = build_utils.ParseGnList(options.classpath)
+ options.processorpath = build_utils.ParseGnList(options.processorpath)
+ options.processors = build_utils.ParseGnList(options.processors)
+ options.java_srcjars = build_utils.ParseGnList(options.java_srcjars)
+
+ files = []
+ for arg in unknown_args:
+ # Interpret a path prefixed with @ as a file containing a list of sources.
+ if arg.startswith('@'):
+ files.extend(build_utils.ReadSourcesList(arg[1:]))
+
+ cmd = build_utils.JavaCmd(options.warnings_as_errors) + [
+ '-classpath', options.turbine_jar_path, 'com.google.turbine.main.Main'
+ ]
+ javac_cmd = []
+
+ # Turbine reads lists from command line args by consuming args until one
+ # starts with double dash (--). Thus command line args should be grouped
+ # together and passed in together.
+ if options.processors:
+ cmd += ['--processors']
+ cmd += options.processors
+
+ if options.java_version:
+ javac_cmd.extend([
+ '-source',
+ options.java_version,
+ '-target',
+ options.java_version,
+ ])
+ if options.java_version == '1.8':
+ # Android's boot jar doesn't contain all java 8 classes.
+ options.bootclasspath.append(build_utils.RT_JAR_PATH)
+
+ if options.bootclasspath:
+ cmd += ['--bootclasspath']
+ for bootclasspath in options.bootclasspath:
+ cmd += bootclasspath.split(':')
+
+ if options.processorpath:
+ cmd += ['--processorpath']
+ cmd += options.processorpath
+
+ if options.processor_args:
+ for arg in options.processor_args:
+ javac_cmd.extend(['-A%s' % arg])
+
+ if options.classpath:
+ cmd += ['--classpath']
+ cmd += options.classpath
+
+ if options.java_srcjars:
+ cmd += ['--source_jars']
+ cmd += options.java_srcjars
+
+ if files:
+ # Use jar_path to ensure paths are relative (needed for goma).
+ files_rsp_path = options.jar_path + '.files_list.txt'
+ with open(files_rsp_path, 'w') as f:
+ f.write(' '.join(files))
+ # Pass source paths as response files to avoid extremely long command lines
+ # that are tedius to debug.
+ cmd += ['--sources']
+ cmd += ['@' + files_rsp_path]
+
+ if javac_cmd:
+ cmd.append('--javacopts')
+ cmd += javac_cmd
+ cmd.append('--') # Terminate javacopts
+
+ # Use AtomicOutput so that output timestamps are not updated when outputs
+ # are not changed.
+ with build_utils.AtomicOutput(options.jar_path) as output_jar, \
+ build_utils.AtomicOutput(options.generated_jar_path) as generated_jar:
+ cmd += ['--output', output_jar.name, '--gensrc_output', generated_jar.name]
+
+ process_javac_output_partial = functools.partial(
+ ProcessJavacOutput, target_name=options.target_name)
+
+ logging.debug('Command: %s', cmd)
+ start = time.time()
+ build_utils.CheckOutput(cmd,
+ print_stdout=True,
+ stdout_filter=process_javac_output_partial,
+ stderr_filter=process_javac_output_partial,
+ fail_on_output=options.warnings_as_errors)
+ end = time.time() - start
+ logging.info('Header compilation took %ss', end)
+
+ if options.depfile:
+ # GN already knows of the java files, so avoid listing individual java files
+ # in the depfile.
+ depfile_deps = (options.bootclasspath + options.classpath +
+ options.processorpath + options.java_srcjars)
+ build_utils.WriteDepfile(options.depfile, options.jar_path, depfile_deps)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))