diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /third_party/libwebrtc/build/fuchsia/aemu_target.py | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/build/fuchsia/aemu_target.py')
-rw-r--r-- | third_party/libwebrtc/build/fuchsia/aemu_target.py | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/fuchsia/aemu_target.py b/third_party/libwebrtc/build/fuchsia/aemu_target.py new file mode 100644 index 0000000000..6717005815 --- /dev/null +++ b/third_party/libwebrtc/build/fuchsia/aemu_target.py @@ -0,0 +1,116 @@ +# Copyright 2019 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. + +"""Implements commands for running and interacting with Fuchsia on AEMU.""" + +import emu_target +import os +import platform +import qemu_target +import logging + +from common import GetEmuRootForPlatform + + +def GetTargetType(): + return AemuTarget + + +class AemuTarget(qemu_target.QemuTarget): + EMULATOR_NAME = 'aemu' + + def __init__(self, out_dir, target_cpu, system_log_file, cpu_cores, + require_kvm, ram_size_mb, enable_graphics, hardware_gpu): + super(AemuTarget, self).__init__(out_dir, target_cpu, system_log_file, + cpu_cores, require_kvm, ram_size_mb) + + self._enable_graphics = enable_graphics + self._hardware_gpu = hardware_gpu + + @staticmethod + def CreateFromArgs(args): + return AemuTarget(args.out_dir, args.target_cpu, args.system_log_file, + args.cpu_cores, args.require_kvm, args.ram_size_mb, + args.enable_graphics, args.hardware_gpu) + + @staticmethod + def RegisterArgs(arg_parser): + aemu_args = arg_parser.add_argument_group('aemu', 'AEMU arguments') + aemu_args.add_argument('--enable-graphics', + action='store_true', + default=False, + help='Start AEMU with graphics instead of '\ + 'headless.') + aemu_args.add_argument('--hardware-gpu', + action='store_true', + default=False, + help='Use local GPU hardware instead of '\ + 'Swiftshader.') + + def _EnsureEmulatorExists(self, path): + assert os.path.exists(path), \ + 'This checkout is missing %s.' % (self.EMULATOR_NAME) + + def _BuildCommand(self): + aemu_folder = GetEmuRootForPlatform(self.EMULATOR_NAME) + + self._EnsureEmulatorExists(aemu_folder) + aemu_path = os.path.join(aemu_folder, 'emulator') + + # `VirtioInput` is needed for touch input device support on Fuchsia. + # `RefCountPipe` is needed for proper cleanup of resources when a process + # that uses Vulkan dies inside the guest + aemu_features = 'VirtioInput,RefCountPipe' + + # Configure the CPU to emulate. + # On Linux, we can enable lightweight virtualization (KVM) if the host and + # guest architectures are the same. + if self._IsKvmEnabled(): + aemu_features += ',KVM,GLDirectMem,Vulkan' + else: + if self._target_cpu != 'arm64': + aemu_features += ',-GLDirectMem' + + # Use Swiftshader for Vulkan if requested + gpu_target = 'swiftshader_indirect' + if self._hardware_gpu: + gpu_target = 'host' + + aemu_command = [aemu_path] + if not self._enable_graphics: + aemu_command.append('-no-window') + # All args after -fuchsia flag gets passed to QEMU + aemu_command.extend([ + '-feature', aemu_features, '-window-size', '1024x600', '-gpu', + gpu_target, '-verbose', '-fuchsia' + ]) + + aemu_command.extend(self._BuildQemuConfig()) + + aemu_command.extend([ + '-vga', 'none', + '-device', 'virtio-keyboard-pci', + '-device', 'virtio_input_multi_touch_pci_1', + '-device', 'ich9-ahci,id=ahci']) + if platform.machine() == 'x86_64': + aemu_command.extend(['-device', 'isa-debug-exit,iobase=0xf4,iosize=0x04']) + + logging.info(' '.join(aemu_command)) + return aemu_command + + def _GetVulkanIcdFile(self): + return os.path.join(GetEmuRootForPlatform(self.EMULATOR_NAME), 'lib64', + 'vulkan', 'vk_swiftshader_icd.json') + + def _SetEnv(self): + env = os.environ.copy() + aemu_logging_env = { + "ANDROID_EMU_VK_NO_CLEANUP": "1", + "ANDROID_EMUGL_LOG_PRINT": "1", + "ANDROID_EMUGL_VERBOSE": "1", + "VK_ICD_FILENAMES": self._GetVulkanIcdFile(), + "VK_LOADER_DEBUG": "info,error", + } + env.update(aemu_logging_env) + return env |