diff options
Diffstat (limited to 'third_party/libwebrtc/tools_webrtc/executable_host_build.py')
-rw-r--r-- | third_party/libwebrtc/tools_webrtc/executable_host_build.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/third_party/libwebrtc/tools_webrtc/executable_host_build.py b/third_party/libwebrtc/tools_webrtc/executable_host_build.py new file mode 100644 index 0000000000..e8c9aeb583 --- /dev/null +++ b/third_party/libwebrtc/tools_webrtc/executable_host_build.py @@ -0,0 +1,100 @@ +#!/usr/bin/env vpython3 + +# Copyright (c) 2018 The WebRTC project authors. All Rights Reserved. +# +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file in the root of the source +# tree. An additional intellectual property rights grant can be found +# in the file PATENTS. All contributing project authors may +# be found in the AUTHORS file in the root of the source tree. +""" +This script builds a GN executable targeting the host machine. + +It is useful, for example, for mobile devices performance testing where +it makes sense to build WebRTC for a mobile platform (e.g. Android) but +part of the test is performed on the host machine (e.g. running an +executable to analyze a video downloaded from a device). + +The script has only one (mandatory) option: --executable_name, which is +the output name of the GN executable. For example, if you have the +following executable in your out folder: + + out/Debug/random_exec + +You will be able to compile the same executable targeting your host machine +by running: + + $ vpython3 tools_webrtc/executable_host_build.py --executable_name random_exec + +The generated executable will have the same name as the input executable with +suffix '_host'. + +This script should not be used standalone but from GN, through an action: + + action("random_exec_host") { + script = "//tools_webrtc/executable_host_build.py" + outputs = [ + "${root_out_dir}/random_exec_host", + ] + args = [ + "--executable_name", + "random_exec", + ] + } + +The executable for the host machine will be generated in the GN out directory +(e.g. out/Debug in the previous example). +""" + +from contextlib import contextmanager + +import argparse +import os +import shutil +import subprocess +import sys +import tempfile + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +SRC_DIR = os.path.normpath(os.path.join(SCRIPT_DIR, os.pardir)) +sys.path.append(os.path.join(SRC_DIR, 'build')) +import find_depot_tools + + +def _ParseArgs(): + desc = 'Generates a GN executable targeting the host machine.' + parser = argparse.ArgumentParser(description=desc) + parser.add_argument('--executable_name', + required=True, + help='Name of the executable to build') + args = parser.parse_args() + return args + + +@contextmanager +def HostBuildDir(): + temp_dir = tempfile.mkdtemp() + try: + yield temp_dir + finally: + shutil.rmtree(temp_dir) + + +def _RunCommand(argv, cwd=SRC_DIR, **kwargs): + with open(os.devnull, 'w') as devnull: + subprocess.check_call(argv, cwd=cwd, stdout=devnull, **kwargs) + + +def DepotToolPath(*args): + return os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, *args) + + +if __name__ == '__main__': + ARGS = _ParseArgs() + EXECUTABLE_TO_BUILD = ARGS.executable_name + EXECUTABLE_FINAL_NAME = ARGS.executable_name + '_host' + with HostBuildDir() as build_dir: + _RunCommand([sys.executable, DepotToolPath('gn.py'), 'gen', build_dir]) + _RunCommand([DepotToolPath('ninja'), '-C', build_dir, EXECUTABLE_TO_BUILD]) + shutil.copy(os.path.join(build_dir, EXECUTABLE_TO_BUILD), + EXECUTABLE_FINAL_NAME) |