summaryrefslogtreecommitdiff
path: root/chromium/build
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-03 13:42:47 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-15 10:27:51 +0000
commit8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (patch)
treed29d987c4d7b173cf853279b79a51598f104b403 /chromium/build
parent830c9e163d31a9180fadca926b3e1d7dfffb5021 (diff)
downloadqtwebengine-chromium-8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec.tar.gz
BASELINE: Update Chromium to 66.0.3359.156
Change-Id: I0c9831ad39911a086b6377b16f995ad75a51e441 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/build')
-rw-r--r--chromium/build/BUILD.gn9
-rw-r--r--chromium/build/android/BUILD.gn5
-rwxr-xr-xchromium/build/android/adb_gdb6
-rwxr-xr-xchromium/build/android/apk_operations.py38
-rw-r--r--chromium/build/android/gradle/root.jinja4
-rwxr-xr-xchromium/build/android/gyp/apkbuilder.py3
-rwxr-xr-xchromium/build/android/gyp/create_test_runner_script.py2
-rwxr-xr-xchromium/build/android/gyp/dist_aar.py16
-rwxr-xr-xchromium/build/android/gyp/finalize_apk.py158
-rwxr-xr-xchromium/build/android/gyp/finalize_splits.py52
-rwxr-xr-xchromium/build/android/gyp/jar.py28
-rwxr-xr-xchromium/build/android/gyp/javac.py164
-rwxr-xr-xchromium/build/android/gyp/jinja_template.py8
-rwxr-xr-xchromium/build/android/gyp/merge_manifest.py10
-rwxr-xr-xchromium/build/android/gyp/process_resources.py76
-rwxr-xr-xchromium/build/android/gyp/proguard.py5
-rw-r--r--chromium/build/android/gyp/util/proguard_util.py12
-rwxr-xr-xchromium/build/android/gyp/write_build_config.py42
-rwxr-xr-xchromium/build/android/gyp/write_ordered_libraries.py7
-rw-r--r--chromium/build/android/incremental_install/BUILD.gn1
-rwxr-xr-xchromium/build/android/lighttpd_server.py2
-rw-r--r--chromium/build/android/lint/suppressions.xml93
-rw-r--r--chromium/build/android/pylib/constants/__init__.py2
-rw-r--r--chromium/build/android/pylib/gtest/filter/unit_tests_disabled34
-rw-r--r--chromium/build/android/pylib/gtest/gtest_test_instance.py5
-rw-r--r--chromium/build/android/pylib/output/remote_output_manager.py2
-rw-r--r--chromium/build/build_config.h12
-rw-r--r--chromium/build/buildflag_header.gni8
-rw-r--r--chromium/build/check_gn_headers_whitelist.txt1
-rw-r--r--chromium/build/ciopfs.sha11
-rw-r--r--chromium/build/cipd/android/android.ensure2
-rw-r--r--chromium/build/config/BUILDCONFIG.gn5
-rw-r--r--chromium/build/config/OWNERS3
-rw-r--r--chromium/build/config/allocator.gni6
-rw-r--r--chromium/build/config/android/config.gni30
-rw-r--r--chromium/build/config/android/internal_rules.gni161
-rw-r--r--chromium/build/config/android/rules.gni232
-rw-r--r--chromium/build/config/arm.gni10
-rw-r--r--chromium/build/config/c++/c++.gni2
-rw-r--r--chromium/build/config/clang/clang.gni4
-rw-r--r--chromium/build/config/compiler/BUILD.gn249
-rw-r--r--chromium/build/config/compiler/compiler.gni41
-rw-r--r--chromium/build/config/coverage/BUILD.gn7
-rw-r--r--chromium/build/config/coverage/coverage.gni11
-rw-r--r--chromium/build/config/fuchsia/BUILD.gn4
-rw-r--r--chromium/build/config/fuchsia/build_manifest.py141
-rw-r--r--chromium/build/config/fuchsia/package.gni85
-rw-r--r--chromium/build/config/fuchsia/rules.gni213
-rw-r--r--chromium/build/config/fuchsia/sandbox_policy6
-rw-r--r--chromium/build/config/gcc/BUILD.gn5
-rw-r--r--chromium/build/config/ios/BUILD.gn15
-rw-r--r--chromium/build/config/ios/ios_sdk.gni4
-rw-r--r--chromium/build/config/ios/rules.gni12
-rw-r--r--chromium/build/config/jumbo.gni26
-rw-r--r--chromium/build/config/linux/OWNERS1
-rwxr-xr-xchromium/build/config/linux/pkg-config.py3
-rw-r--r--chromium/build/config/linux/pkg_config.gni9
-rwxr-xr-xchromium/build/config/merge_for_jumbo.py22
-rw-r--r--chromium/build/config/posix/BUILD.gn30
-rw-r--r--chromium/build/config/sanitizers/BUILD.gn20
-rw-r--r--chromium/build/config/sanitizers/sanitizers.gni4
-rw-r--r--chromium/build/config/sysroot.gni41
-rw-r--r--chromium/build/config/win/BUILD.gn47
-rw-r--r--chromium/build/dotfile_settings.gni1
-rwxr-xr-xchromium/build/fuchsia/create_runner_script.py15
-rwxr-xr-xchromium/build/fuchsia/exe_runner.py3
-rw-r--r--chromium/build/fuchsia/layout_test_proxy/BUILD.gn27
-rw-r--r--chromium/build/fuchsia/layout_test_proxy/DEPS3
-rw-r--r--chromium/build/fuchsia/layout_test_proxy/layout_test_proxy.cc78
-rwxr-xr-xchromium/build/fuchsia/runner_common.py23
-rw-r--r--chromium/build/fuchsia/runner_v2/__init__.py0
-rw-r--r--chromium/build/fuchsia/runner_v2/boot_data.py151
-rw-r--r--chromium/build/fuchsia/runner_v2/boot_image.py96
-rw-r--r--chromium/build/fuchsia/runner_v2/common_args.py76
-rwxr-xr-xchromium/build/fuchsia/runner_v2/create_runner_script.py89
-rw-r--r--chromium/build/fuchsia/runner_v2/device_target.py112
-rwxr-xr-xchromium/build/fuchsia/runner_v2/exe_runner.py35
-rw-r--r--chromium/build/fuchsia/runner_v2/net_test_server.py124
-rw-r--r--chromium/build/fuchsia/runner_v2/qemu_target.py64
-rwxr-xr-xchromium/build/fuchsia/runner_v2/qemu_target_test.py9
-rw-r--r--chromium/build/fuchsia/runner_v2/remote_cmd.py60
-rw-r--r--chromium/build/fuchsia/runner_v2/run_package.py180
-rw-r--r--chromium/build/fuchsia/runner_v2/symbolizer.py229
-rw-r--r--chromium/build/fuchsia/runner_v2/target.py112
-rwxr-xr-xchromium/build/fuchsia/runner_v2/test_runner.py115
-rwxr-xr-xchromium/build/fuchsia/test_runner.py12
-rwxr-xr-xchromium/build/fuchsia/update_sdk.py15
-rwxr-xr-xchromium/build/get_landmines.py41
-rw-r--r--chromium/build/gn_run_binary.py8
-rwxr-xr-xchromium/build/install-build-deps-android.sh3
-rwxr-xr-xchromium/build/install-build-deps.sh86
-rw-r--r--chromium/build/landmine_utils.py70
-rwxr-xr-xchromium/build/landmines.py5
-rw-r--r--chromium/build/linux/sysroot_scripts/debian-archive-sid-stable.gpgbin0 -> 54194 bytes
-rwxr-xr-xchromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py58
-rwxr-xr-xchromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols_unittest.py36
-rwxr-xr-xchromium/build/linux/sysroot_scripts/install-sysroot.py108
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.amd64306
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.arm304
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.arm64304
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.i386304
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el297
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel297
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.amd6410
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.arm10
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.arm6410
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.i38610
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.mips64el10
-rw-r--r--chromium/build/linux/sysroot_scripts/packagelist.stretch.mipsel10
-rwxr-xr-xchromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh364
-rwxr-xr-xchromium/build/linux/sysroot_scripts/sysroot-creator-stretch.sh10
-rw-r--r--chromium/build/linux/sysroot_scripts/sysroot-creator.sh25
-rw-r--r--chromium/build/linux/sysroot_scripts/sysroots.json60
-rw-r--r--chromium/build/linux/unbundle/ffmpeg.gn6
-rw-r--r--chromium/build/linux/unbundle/libwebp.gn8
-rw-r--r--chromium/build/nocompile.gni2
-rwxr-xr-xchromium/build/print_python_deps.py2
-rw-r--r--chromium/build/sanitizers/tsan_suppressions.cc6
-rw-r--r--chromium/build/secondary/third_party/android_platform/development/scripts/BUILD.gn16
-rw-r--r--chromium/build/secondary/third_party/android_tools/BUILD.gn76
-rw-r--r--chromium/build/secondary/third_party/android_tools/support/BUILD.gn70
-rw-r--r--chromium/build/secondary/third_party/catapult/devil/BUILD.gn31
-rw-r--r--chromium/build/secondary/third_party/catapult/devil/devil_arm.gni9
-rw-r--r--chromium/build/slave/OWNERS20
-rw-r--r--chromium/build/slave/README8
-rw-r--r--chromium/build/toolchain/BUILD.gn14
-rw-r--r--chromium/build/toolchain/OWNERS1
-rw-r--r--chromium/build/toolchain/concurrent_links.gni11
-rw-r--r--chromium/build/toolchain/fuchsia/BUILD.gn8
-rw-r--r--chromium/build/toolchain/gcc_toolchain.gni5
-rw-r--r--chromium/build/toolchain/get_concurrent_links.py9
-rw-r--r--chromium/build/toolchain/get_cpu_count.py21
-rw-r--r--chromium/build/toolchain/goma.gni11
-rw-r--r--chromium/build/toolchain/mac/BUILD.gn4
-rw-r--r--chromium/build/toolchain/toolchain.gni7
-rw-r--r--chromium/build/toolchain/win/BUILD.gn25
-rw-r--r--chromium/build/toolchain/win/rc/linux64/rc.sha12
-rw-r--r--chromium/build/toolchain/win/rc/mac/rc.sha12
-rw-r--r--chromium/build/toolchain/win/rc/win/rc.exe.sha12
-rw-r--r--chromium/build/toolchain/win/tool_wrapper.py23
-rw-r--r--chromium/build/util/LASTCHANGE2
-rw-r--r--chromium/build/util/lib/common/chrome_test_server_spawner.py105
-rwxr-xr-xchromium/build/vs_toolchain.py12
-rw-r--r--chromium/build/win/BUILD.gn1
-rwxr-xr-xchromium/build/win/copy_cdb_to_output.py1
145 files changed, 5554 insertions, 1598 deletions
diff --git a/chromium/build/BUILD.gn b/chromium/build/BUILD.gn
new file mode 100644
index 00000000000..7ab955abe1f
--- /dev/null
+++ b/chromium/build/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2018 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.
+
+source_set("buildflag_header_h") {
+ sources = [
+ "buildflag.h",
+ ]
+}
diff --git a/chromium/build/android/BUILD.gn b/chromium/build/android/BUILD.gn
index dd501338b66..a935841f0a8 100644
--- a/chromium/build/android/BUILD.gn
+++ b/chromium/build/android/BUILD.gn
@@ -113,8 +113,8 @@ group("test_runner_py") {
# Filter out comments.
set_sources_assignment_filter([ "#*" ])
sources = _py_files
-
data = sources + [
+ "test_runner.pydeps",
"devil_chromium.json",
"pylib/gtest/filter/",
"pylib/instrumentation/render_test.html.jinja",
@@ -136,8 +136,7 @@ group("logdog_wrapper_py") {
# Filter out comments.
set_sources_assignment_filter([ "#*" ])
sources = _py_files
-
- data = sources
+ data = sources + [ "test_wrapper/logdog_wrapper.pydeps" ]
}
# Create wrapper scripts in out/bin that takes care of setting the
diff --git a/chromium/build/android/adb_gdb b/chromium/build/android/adb_gdb
index c8d223d6e83..5d928b4ea4a 100755
--- a/chromium/build/android/adb_gdb
+++ b/chromium/build/android/adb_gdb
@@ -487,6 +487,12 @@ get_ndk_host_arch () {
if [ -z "$NDK_HOST_ARCH" ]; then
HOST_OS=$(get_ndk_host_system)
HOST_ARCH=$(uname -p)
+ if [ "$HOST_ARCH" = "unknown" ]; then
+ # In case where "-p" returns "unknown" just use "-m" (machine hardware
+ # name). According to this patch from Fedora "-p" is equivalent to "-m"
+ # anyway: https://goo.gl/Pd47x3
+ HOST_ARCH=$(uname -m)
+ fi
case $HOST_ARCH in
i?86) NDK_HOST_ARCH=x86;;
x86_64|amd64) NDK_HOST_ARCH=x86_64;;
diff --git a/chromium/build/android/apk_operations.py b/chromium/build/android/apk_operations.py
index f3d4a20f7ff..670f21af108 100755
--- a/chromium/build/android/apk_operations.py
+++ b/chromium/build/android/apk_operations.py
@@ -92,7 +92,7 @@ def _NormalizeProcessName(debug_process_name, package_name):
def _LaunchUrl(devices, package_name, argv=None, command_line_flags_file=None,
url=None, apk=None, wait_for_java_debugger=False,
- debug_process_name=None):
+ debug_process_name=None, nokill=None):
if argv and command_line_flags_file is None:
raise Exception('This apk does not support any flags.')
if url:
@@ -110,20 +110,21 @@ def _LaunchUrl(devices, package_name, argv=None, command_line_flags_file=None,
def launch(device):
# --persistent is required to have Settings.Global.DEBUG_APP be set, which
# we currently use to allow reading of flags. https://crbug.com/784947
- cmd = ['am', 'set-debug-app', '--persistent', debug_process_name]
- if wait_for_java_debugger:
- cmd[-1:-1] = ['-w']
- # Ignore error since it will fail if apk is not debuggable.
- device.RunShellCommand(cmd, check_return=False)
-
- # The flags are first updated with input args.
- if command_line_flags_file:
- changer = flag_changer.FlagChanger(device, command_line_flags_file)
- flags = []
- if argv:
- flags = shlex.split(argv)
- changer.ReplaceFlags(flags)
- # Then launch the apk.
+ if not nokill:
+ cmd = ['am', 'set-debug-app', '--persistent', debug_process_name]
+ if wait_for_java_debugger:
+ cmd[-1:-1] = ['-w']
+ # Ignore error since it will fail if apk is not debuggable.
+ device.RunShellCommand(cmd, check_return=False)
+
+ # The flags are first updated with input args.
+ if command_line_flags_file:
+ changer = flag_changer.FlagChanger(device, command_line_flags_file)
+ flags = []
+ if argv:
+ flags = shlex.split(argv)
+ changer.ReplaceFlags(flags)
+
if url is None:
# Simulate app icon click if no url is present.
cmd = ['monkey', '-p', package_name, '-c',
@@ -890,6 +891,10 @@ class _LaunchCommand(_Command):
group.add_argument('--debug-process-name',
help='Name of the process to debug. '
'E.g. "privileged_process0", or "foo.bar:baz"')
+ group.add_argument('--nokill', action='store_true',
+ help='Do not set the debug-app, nor set command-line '
+ 'flags. Useful to load a URL without having the '
+ 'app restart.')
group.add_argument('url', nargs='?', help='A URL to launch with.')
def Run(self):
@@ -897,7 +902,8 @@ class _LaunchCommand(_Command):
command_line_flags_file=self.args.command_line_flags_file,
url=self.args.url, apk=self.apk_helper,
wait_for_java_debugger=self.args.wait_for_java_debugger,
- debug_process_name=self.args.debug_process_name)
+ debug_process_name=self.args.debug_process_name,
+ nokill=self.args.nokill)
class _StopCommand(_Command):
diff --git a/chromium/build/android/gradle/root.jinja b/chromium/build/android/gradle/root.jinja
index d3a259f7397..178d551243f 100644
--- a/chromium/build/android/gradle/root.jinja
+++ b/chromium/build/android/gradle/root.jinja
@@ -12,9 +12,9 @@ buildscript {
}
dependencies {
{% if canary %}
- classpath "com.android.tools.build:gradle:3.1.0-alpha04"
+ classpath "com.android.tools.build:gradle:3.1.0-beta1"
{% else %}
- classpath "com.android.tools.build:gradle:3.0.0"
+ classpath "com.android.tools.build:gradle:3.0.1"
{% endif %}
}
}
diff --git a/chromium/build/android/gyp/apkbuilder.py b/chromium/build/android/gyp/apkbuilder.py
index 1aadf2b2290..97a514a007d 100755
--- a/chromium/build/android/gyp/apkbuilder.py
+++ b/chromium/build/android/gyp/apkbuilder.py
@@ -242,9 +242,6 @@ def main(args):
def on_stale_md5():
tmp_apk = options.output_apk + '.tmp'
try:
- # TODO(agrieve): It would be more efficient to combine this step
- # with finalize_apk(), which sometimes aligns and uncompresses the
- # native libraries.
with zipfile.ZipFile(options.resource_apk) as resource_apk, \
zipfile.ZipFile(tmp_apk, 'w', zipfile.ZIP_DEFLATED) as out_apk:
def copy_resource(zipinfo):
diff --git a/chromium/build/android/gyp/create_test_runner_script.py b/chromium/build/android/gyp/create_test_runner_script.py
index 587416d28a8..c9b681e8cee 100755
--- a/chromium/build/android/gyp/create_test_runner_script.py
+++ b/chromium/build/android/gyp/create_test_runner_script.py
@@ -15,7 +15,7 @@ import sys
from util import build_utils
SCRIPT_TEMPLATE = """\
-#!/usr/bin/env python
+#!/usr/bin/env vpython
#
# This file was generated by build/android/gyp/create_test_runner_script.py
diff --git a/chromium/build/android/gyp/dist_aar.py b/chromium/build/android/gyp/dist_aar.py
index 51515fa6510..6dc38c488a6 100755
--- a/chromium/build/android/gyp/dist_aar.py
+++ b/chromium/build/android/gyp/dist_aar.py
@@ -72,13 +72,23 @@ def main(args):
'--android-manifest',
help='Path to AndroidManifest.xml to include.',
default=os.path.join(_ANDROID_BUILD_DIR, 'AndroidManifest.xml'))
+ parser.add_argument('--native-libraries', default='',
+ help='GN list of native libraries. If non-empty then '
+ 'ABI must be specified.')
+ parser.add_argument('--abi',
+ help='ABI (e.g. armeabi-v7a) for native libraries.')
options = parser.parse_args(args)
+
+ if options.native_libraries and not options.abi:
+ parser.error('You must provide --abi if you have native libs')
+
options.jars = build_utils.ParseGnList(options.jars)
options.dependencies_res_zips = build_utils.ParseGnList(
options.dependencies_res_zips)
options.r_text_files = build_utils.ParseGnList(options.r_text_files)
options.proguard_configs = build_utils.ParseGnList(options.proguard_configs)
+ options.native_libraries = build_utils.ParseGnList(options.native_libraries)
with tempfile.NamedTemporaryFile(delete=False) as staging_file:
try:
@@ -100,6 +110,12 @@ def main(args):
data=_MergeProguardConfigs(options.proguard_configs))
_AddResources(z, options.dependencies_res_zips)
+
+ for native_library in options.native_libraries:
+ libname = os.path.basename(native_library)
+ build_utils.AddToZipHermetic(
+ z, os.path.join('jni', options.abi, libname),
+ src_path=native_library)
except:
os.unlink(staging_file.name)
raise
diff --git a/chromium/build/android/gyp/finalize_apk.py b/chromium/build/android/gyp/finalize_apk.py
index ecb5ebfe765..694e4db1335 100755
--- a/chromium/build/android/gyp/finalize_apk.py
+++ b/chromium/build/android/gyp/finalize_apk.py
@@ -3,121 +3,59 @@
# Copyright 2013 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.
-"""Signs and zipaligns APK.
+"""Signs and aligns an APK."""
-"""
-
-import optparse
-import os
+import argparse
import shutil
-import sys
+import subprocess
import tempfile
-import zipfile
-
-# resource_sizes modifies zipfile for zip64 compatibility. See
-# https://bugs.python.org/issue14315.
-sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir))
-import resource_sizes # pylint: disable=unused-import
-
-from util import build_utils
-
-
-def JarSigner(key_path, key_name, key_passwd, unsigned_path, signed_path):
- shutil.copy(unsigned_path, signed_path)
- sign_cmd = [
- 'jarsigner',
- '-sigalg', 'MD5withRSA',
- '-digestalg', 'SHA1',
- '-keystore', key_path,
- '-storepass', key_passwd,
- signed_path,
- key_name,
- ]
- build_utils.CheckOutput(sign_cmd)
-
-
-def AlignApk(zipalign_path, unaligned_path, final_path):
- # Note -p will page align native libraries (files ending with .so), but
- # only those that are stored uncompressed.
- align_cmd = [
- zipalign_path,
- '-p',
- '-f',
- ]
-
-
- align_cmd += [
- '4', # 4 bytes
- unaligned_path,
- final_path,
- ]
- build_utils.CheckOutput(align_cmd)
-
-
-def main(args):
- args = build_utils.ExpandFileArgs(args)
-
- parser = optparse.OptionParser()
- build_utils.AddDepfileOption(parser)
-
- parser.add_option('--zipalign-path', help='Path to the zipalign tool.')
- parser.add_option('--unsigned-apk-path', help='Path to input unsigned APK.')
- parser.add_option('--final-apk-path',
- help='Path to output signed and aligned APK.')
- parser.add_option('--key-path', help='Path to keystore for signing.')
- parser.add_option('--key-passwd', help='Keystore password')
- parser.add_option('--key-name', help='Keystore name')
-
- options, _ = parser.parse_args()
-
- input_paths = [
- options.unsigned_apk_path,
- options.key_path,
- ]
-
- input_strings = [
- options.key_name,
- options.key_passwd,
- ]
-
- build_utils.CallAndWriteDepfileIfStale(
- lambda: FinalizeApk(options),
- options,
- record_path=options.unsigned_apk_path + '.finalize.md5.stamp',
- input_paths=input_paths,
- input_strings=input_strings,
- output_paths=[options.final_apk_path])
-
-
-def _NormalizeZip(path):
- with tempfile.NamedTemporaryFile(suffix='.zip') as hermetic_signed_apk:
- with zipfile.ZipFile(path, 'r') as zi:
- with zipfile.ZipFile(hermetic_signed_apk, 'w') as zo:
- for info in zi.infolist():
- # Ignore 'extended local file headers'. Python doesn't write them
- # properly (see https://bugs.python.org/issue1742205) which causes
- # zipalign to miscalculate alignment. Since we don't use them except
- # for alignment anyway, we write a stripped file here and let
- # zipalign add them properly later. eLFHs are controlled by 'general
- # purpose bit flag 03' (0x08) so we mask that out.
- info.flag_bits = info.flag_bits & 0xF7
-
- info.date_time = build_utils.HERMETIC_TIMESTAMP
- zo.writestr(info, zi.read(info.filename))
-
- shutil.copy(hermetic_signed_apk.name, path)
-
-def FinalizeApk(options):
- with tempfile.NamedTemporaryFile() as signed_apk_path_tmp:
- signed_apk_path = signed_apk_path_tmp.name
- JarSigner(options.key_path, options.key_name, options.key_passwd,
- options.unsigned_apk_path, signed_apk_path)
- # Make the newly added signing files hermetic.
- _NormalizeZip(signed_apk_path)
- AlignApk(options.zipalign_path, signed_apk_path, options.final_apk_path)
+def FinalizeApk(apksigner_path, zipalign_path, unsigned_apk_path,
+ final_apk_path, key_path, key_passwd, key_name):
+ # Use a tempfile so that Ctrl-C does not leave the file with a fresh mtime
+ # and a corrupted state.
+ with tempfile.NamedTemporaryFile() as staging_file:
+ # v2 signing requires that zipalign happen first.
+ subprocess.check_output([
+ zipalign_path, '-p', '-f', '4',
+ unsigned_apk_path, staging_file.name])
+ subprocess.check_output([
+ apksigner_path, 'sign',
+ '--in', staging_file.name,
+ '--out', staging_file.name,
+ '--ks', key_path,
+ '--ks-key-alias', key_name,
+ '--ks-pass', 'pass:' + key_passwd,
+ # Force SHA-1 (makes signing faster; insecure is fine for local builds).
+ '--min-sdk-version', '1',
+ ])
+ shutil.move(staging_file.name, final_apk_path)
+ staging_file.delete = False
+
+
+def main():
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('--apksigner-path', required=True,
+ help='Path to the apksigner executable.')
+ parser.add_argument('--zipalign-path', required=True,
+ help='Path to the zipalign executable.')
+ parser.add_argument('--unsigned-apk-path', required=True,
+ help='Path to input unsigned APK.')
+ parser.add_argument('--final-apk-path', required=True,
+ help='Path to output signed and aligned APK.')
+ parser.add_argument('--key-path', required=True,
+ help='Path to keystore for signing.')
+ parser.add_argument('--key-passwd', required=True,
+ help='Keystore password')
+ parser.add_argument('--key-name', required=True,
+ help='Keystore name')
+ options = parser.parse_args()
+ FinalizeApk(options.apksigner_path, options.zipalign_path,
+ options.unsigned_apk_path, options.final_apk_path,
+ options.key_path, options.key_passwd, options.key_name)
if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
+ main()
diff --git a/chromium/build/android/gyp/finalize_splits.py b/chromium/build/android/gyp/finalize_splits.py
deleted file mode 100755
index cb80d037457..00000000000
--- a/chromium/build/android/gyp/finalize_splits.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2015 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.
-"""Signs and zipaligns split APKs.
-
-This script is require only by GYP (not GN).
-"""
-
-import optparse
-import sys
-
-import finalize_apk
-from util import build_utils
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('--zipalign-path', help='Path to the zipalign tool.')
- parser.add_option('--resource-packaged-apk-path',
- help='Base path to input .ap_s.')
- parser.add_option('--base-output-path',
- help='Path to output .apk, minus extension.')
- parser.add_option('--key-path', help='Path to keystore for signing.')
- parser.add_option('--key-passwd', help='Keystore password')
- parser.add_option('--key-name', help='Keystore name')
- parser.add_option('--densities',
- help='Comma separated list of densities finalize.')
- parser.add_option('--languages',
- help='GYP list of language splits to finalize.')
-
- options, _ = parser.parse_args()
- options.load_library_from_zip = 0
-
- if options.densities:
- for density in options.densities.split(','):
- options.unsigned_apk_path = ("%s_%s" %
- (options.resource_packaged_apk_path, density))
- options.final_apk_path = ("%s-density-%s.apk" %
- (options.base_output_path, density))
- finalize_apk.FinalizeApk(options)
-
- if options.languages:
- for lang in build_utils.ParseGnList(options.languages):
- options.unsigned_apk_path = ("%s_%s" %
- (options.resource_packaged_apk_path, lang))
- options.final_apk_path = ("%s-lang-%s.apk" %
- (options.base_output_path, lang))
- finalize_apk.FinalizeApk(options)
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/chromium/build/android/gyp/jar.py b/chromium/build/android/gyp/jar.py
index 98eac0ae7db..6a5b91939ca 100755
--- a/chromium/build/android/gyp/jar.py
+++ b/chromium/build/android/gyp/jar.py
@@ -74,13 +74,29 @@ def JarDirectory(classes_dir, jar_path, manifest_file=None, predicate=None,
provider_configurations=None, additional_files=None):
all_files = build_utils.FindInDirectory(classes_dir, '*')
if predicate:
- all_files = [f for f in all_files if predicate(f)]
+ all_files = [
+ f for f in all_files if predicate(os.path.relpath(f, classes_dir))]
Jar(all_files, classes_dir, jar_path, manifest_file=manifest_file,
provider_configurations=provider_configurations,
additional_files=additional_files)
+def _CreateFilterPredicate(excluded_classes, included_classes):
+ if not excluded_classes and not included_classes:
+ return None
+
+ def predicate(f):
+ # Exclude filters take precidence over include filters.
+ if build_utils.MatchesGlob(f, excluded_classes):
+ return False
+ if included_classes and not build_utils.MatchesGlob(f, included_classes):
+ return False
+ return True
+
+ return predicate
+
+
def main():
parser = optparse.OptionParser()
parser.add_option('--classes-dir', help='Directory containing .class files.')
@@ -88,6 +104,8 @@ def main():
parser.add_option('--jar-path', help='Jar output path.')
parser.add_option('--excluded-classes',
help='GN list of .class file patterns to exclude from the jar.')
+ parser.add_option('--included-classes',
+ help='GN list of .class file patterns to include in the jar.')
parser.add_option('--strip-resource-classes-for',
help='GN list of java package names exclude R.class files in.')
parser.add_option('--stamp', help='Path to touch on success.')
@@ -100,16 +118,16 @@ def main():
excluded_classes = []
if options.excluded_classes:
excluded_classes = build_utils.ParseGnList(options.excluded_classes)
+ included_classes = []
+ if options.included_classes:
+ included_classes = build_utils.ParseGnList(options.included_classes)
if options.strip_resource_classes_for:
packages = build_utils.ParseGnList(options.strip_resource_classes_for)
excluded_classes.extend(p.replace('.', '/') + '/' + f
for p in packages for f in _RESOURCE_CLASSES)
- predicate = None
- if excluded_classes:
- predicate = lambda f: not build_utils.MatchesGlob(f, excluded_classes)
-
+ predicate = _CreateFilterPredicate(excluded_classes, included_classes)
with build_utils.TempDir() as temp_dir:
classes_dir = options.classes_dir
if options.input_jar:
diff --git a/chromium/build/android/gyp/javac.py b/chromium/build/android/gyp/javac.py
index 4ad1d35ce3c..f78a2848d8c 100755
--- a/chromium/build/android/gyp/javac.py
+++ b/chromium/build/android/gyp/javac.py
@@ -21,22 +21,26 @@ import colorama
ERRORPRONE_WARNINGS_TO_TURN_OFF = [
- # TODO(crbug.com/801208): Follow steps in bug.
- 'FloatingPointLiteralPrecision',
# TODO(crbug.com/801210): Follow steps in bug.
'SynchronizeOnNonFinalField',
- # TODO(crbug.com/801253): Follow steps in bug.
- 'JavaLangClash',
- # TODO(crbug.com/801256): Follow steps in bug.
- 'ParameterName',
# TODO(crbug.com/801261): Follow steps in bug
'ArgumentSelectionDefectChecker',
# TODO(crbug.com/801268): Follow steps in bug.
'NarrowingCompoundAssignment',
# TODO(crbug.com/802073): Follow steps in bug.
'TypeParameterUnusedInFormals',
- # TODO(crbug.com/802075): Follow steps in bug
+ # TODO(crbug.com/802075): Follow steps in bug.
'ReferenceEquality',
+ # TODO(crbug.com/803484): Follow steps in bug.
+ 'CatchFail',
+ # TODO(crbug.com/803485): Follow steps in bug.
+ 'JUnitAmbiguousTestClass',
+ # TODO(crbug.com/803486): Follow steps in bug.
+ 'AssertionFailureIgnored',
+ # TODO(crbug.com/803589): Follow steps in bug.
+ 'MissingFail',
+ # TODO(crbug.com/803625): Follow steps in bug.
+ 'StaticGuardedByInstance',
# Android platform default is always UTF-8.
# https://developer.android.com/reference/java/nio/charset/Charset.html#defaultCharset()
'DefaultCharset',
@@ -53,6 +57,8 @@ ERRORPRONE_WARNINGS_TO_TURN_OFF = [
# Alias of ParameterName warning.
'NamedParameters',
# Low priority corner cases with String.split.
+ # Linking Guava and using Splitter was rejected
+ # in the https://chromium-review.googlesource.com/c/chromium/src/+/871630.
'StringSplitter',
# Preferred to use another method since it propagates exceptions better.
'ClassNewInstance',
@@ -78,14 +84,28 @@ ERRORPRONE_WARNINGS_TO_TURN_OFF = [
'TypeParameterShadowing',
# Good to have immutable enums, also low priority.
'ImmutableEnumChecker',
+ # False positives for testing.
+ 'InputStreamSlowMultibyteRead',
+ # Nice to have better primitives.
+ 'BoxedPrimitiveConstructor',
+ # Not necessary for tests.
+ 'OverrideThrowableToString',
+ # Nice to have better type safety.
+ 'CollectionToArraySafeParameter',
]
ERRORPRONE_WARNINGS_TO_ERROR = [
# Add warnings to this after fixing/suppressing all instances in our codebase.
+ 'FloatingPointLiteralPrecision',
+ 'JavaLangClash',
+ 'MissingOverride',
+ 'ParameterName',
+ 'StaticQualifiedUsingExpression',
+ 'UseCorrectAssertInTests',
]
-def ColorJavacOutput(output):
+def ProcessJavacOutput(output):
fileline_prefix = r'(?P<fileline>(?P<file>[-.\w/\\]+.java):(?P<line>[0-9]+):)'
warning_re = re.compile(
fileline_prefix + r'(?P<full_message> warning: (?P<message>.*))$')
@@ -93,6 +113,14 @@ def ColorJavacOutput(output):
fileline_prefix + r'(?P<full_message> (?P<message>.*))$')
marker_re = re.compile(r'\s*(?P<marker>\^)\s*$')
+ # These warnings cannot be suppressed even for third party code. Deprecation
+ # warnings especially do not help since we must support older android version.
+ deprecated_re = re.compile(
+ r'(Note: .* uses? or overrides? a deprecated API.)$')
+ unchecked_re = re.compile(
+ r'(Note: .* uses? unchecked or unsafe operations.)$')
+ recompile_re = re.compile(r'(Note: Recompile with -Xlint:.* for details.)$')
+
warning_color = ['full_message', colorama.Fore.YELLOW + colorama.Style.DIM]
error_color = ['full_message', colorama.Fore.MAGENTA + colorama.Style.BRIGHT]
marker_color = ['marker', colorama.Fore.BLUE + colorama.Style.BRIGHT]
@@ -106,7 +134,12 @@ def ColorJavacOutput(output):
+ colorama.Fore.RESET + colorama.Style.RESET_ALL
+ line[end:])
- def ApplyColor(line):
+ def ApplyFilters(line):
+ return not (deprecated_re.match(line)
+ or unchecked_re.match(line)
+ or recompile_re.match(line))
+
+ def ApplyColors(line):
if warning_re.match(line):
line = Colorize(line, warning_re, warning_color)
elif error_re.match(line):
@@ -115,7 +148,7 @@ def ColorJavacOutput(output):
line = Colorize(line, marker_re, marker_color)
return line
- return '\n'.join(map(ApplyColor, output.split('\n')))
+ return '\n'.join(map(ApplyColors, filter(ApplyFilters, output.split('\n'))))
def _ExtractClassFiles(jar_path, dest_dir, java_files):
@@ -167,9 +200,9 @@ def _FixTempPathsInIncrementalMetadata(pdb_path, temp_dir):
fileobj.write(re.sub(r'/tmp/[^/]*', temp_dir, pdb_data))
-def _CheckPathMatchesClassName(java_file):
+def _ParsePackageAndClassNames(java_file):
package_name = ''
- class_name = None
+ class_names = []
with open(java_file) as f:
for l in f:
# Strip unindented comments.
@@ -185,17 +218,11 @@ def _CheckPathMatchesClassName(java_file):
# In order to not match nested classes, it just checks for lack of indent.
m = re.match(r'(?:\S.*?)?(?:class|@?interface|enum)\s+(.+?)\b', l)
if m:
- if class_name:
- raise Exception(('File defines multiple top-level classes:\n %s\n'
- 'This confuses compiles with '
- 'enable_incremental_javac=true.\n'
- 'classes=%s,%s\n') %
- (java_file, class_name, m.groups(1)))
- class_name = m.group(1)
+ class_names.append(m.group(1))
+ return package_name, class_names
- if class_name is None:
- raise Exception('Unable to find a class within %s' % java_file)
+def _CheckPathMatchesClassName(java_file, package_name, class_name):
parts = package_name.split('.') + [class_name + '.java']
expected_path_suffix = os.path.sep.join(parts)
if not java_file.endswith(expected_path_suffix):
@@ -204,17 +231,64 @@ def _CheckPathMatchesClassName(java_file):
(java_file, expected_path_suffix))
+def _ParseInfoFile(info_path):
+ info_data = dict()
+ if os.path.exists(info_path):
+ with open(info_path, 'r') as info_file:
+ for line in info_file:
+ line = line.strip()
+ if line:
+ fully_qualified_name, path = line.split(',', 1)
+ info_data[fully_qualified_name] = path
+ return info_data
+
+
+def _WriteInfoFile(info_path, info_data, srcjar_files):
+ with open(info_path, 'w') as info_file:
+ for fully_qualified_name, path in info_data.iteritems():
+ if path in srcjar_files:
+ path = srcjar_files[path]
+ assert not path.startswith('/tmp'), (
+ 'Java file path should not be in temp dir: {}'.format(path))
+ info_file.write('{},{}\n'.format(fully_qualified_name, path))
+
+
+def _CreateInfoFile(java_files, options, srcjar_files):
+ """Writes a .jar.info file.
+
+ This maps fully qualified names for classes to either the java file that they
+ are defined in or the path of the srcjar that they came from.
+
+ For apks this also produces a coalesced .apk.jar.info file combining all the
+ .jar.info files of its transitive dependencies.
+ """
+ info_data = dict()
+ for java_file in java_files:
+ package_name, class_names = _ParsePackageAndClassNames(java_file)
+ for class_name in class_names:
+ fully_qualified_name = '{}.{}'.format(package_name, class_name)
+ info_data[fully_qualified_name] = java_file
+ # Skip aidl srcjars since they don't indent code correctly.
+ source = srcjar_files.get(java_file, java_file)
+ if source.endswith('_aidl.srcjar'):
+ continue
+ assert not options.chromium_code or len(class_names) == 1, (
+ 'Chromium java files must only have one class: {}'.format(source))
+ if options.chromium_code:
+ _CheckPathMatchesClassName(java_file, package_name, class_names[0])
+ _WriteInfoFile(options.jar_path + '.info', info_data, srcjar_files)
+
+ # Collect all the info files for transitive dependencies of the apk.
+ if options.apk_jar_info_path:
+ for jar_path in options.full_classpath:
+ info_data.update(_ParseInfoFile(jar_path + '.info'))
+ _WriteInfoFile(options.apk_jar_info_path, info_data, srcjar_files)
+
+
def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
classpath):
- incremental = options.incremental
- # Don't bother enabling incremental compilation for third_party code, since
- # _CheckPathMatchesClassName() fails on some of it, and it's not really much
- # benefit.
- for java_file in java_files:
- if 'third_party' in java_file:
- incremental = False
- else:
- _CheckPathMatchesClassName(java_file)
+ # Don't bother enabling incremental compilation for non-chromium code.
+ incremental = options.incremental and options.chromium_code
with build_utils.TempDir() as temp_dir:
srcjars = options.java_srcjars
@@ -251,6 +325,7 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
if srcjars:
_FixTempPathsInIncrementalMetadata(pdb_path, temp_dir)
+ srcjar_files = dict()
if srcjars:
java_dir = os.path.join(temp_dir, 'java')
os.makedirs(java_dir)
@@ -258,7 +333,10 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
if changed_paths:
changed_paths.update(os.path.join(java_dir, f)
for f in changes.IterChangedSubpaths(srcjar))
- build_utils.ExtractAll(srcjar, path=java_dir, pattern='*.java')
+ extracted_files = build_utils.ExtractAll(
+ srcjar, path=java_dir, pattern='*.java')
+ for path in extracted_files:
+ srcjar_files[path] = srcjar
jar_srcs = build_utils.FindInDirectory(java_dir, '*.java')
java_files.extend(jar_srcs)
if changed_paths:
@@ -267,6 +345,8 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
for path in jar_srcs:
os.utime(path, (0, 0))
+ _CreateInfoFile(java_files, options, srcjar_files)
+
if java_files:
if changed_paths:
changed_java_files = [p for p in java_files if p in changed_paths]
@@ -290,10 +370,7 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
# Pass classpath and source paths as response files to avoid extremely
# long command lines that are tedius to debug.
if classpath:
- classpath_rsp_path = os.path.join(temp_dir, 'classpath.txt')
- with open(classpath_rsp_path, 'w') as f:
- f.write(':'.join(classpath))
- cmd += ['-classpath', '@' + classpath_rsp_path]
+ cmd += ['-classpath', ':'.join(classpath)]
java_files_rsp_path = os.path.join(temp_dir, 'files_list.txt')
with open(java_files_rsp_path, 'w') as f:
@@ -310,7 +387,7 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs,
cmd,
print_stdout=options.chromium_code,
stdout_filter=stdout_filter,
- stderr_filter=ColorJavacOutput)
+ stderr_filter=ProcessJavacOutput)
try:
attempt_build()
except build_utils.CalledProcessError as e:
@@ -358,7 +435,7 @@ def _ParseOptions(argv):
'--java-version',
help='Java language version to use in -source and -target args to javac.')
parser.add_option(
- '--classpath',
+ '--full-classpath',
action='append',
help='Classpath to use when annotation processors are present.')
parser.add_option(
@@ -411,12 +488,15 @@ def _ParseOptions(argv):
action='append',
default=[],
help='Additional arguments to pass to javac.')
+ parser.add_option(
+ '--apk-jar-info-path',
+ help='Coalesced jar.info files for the apk')
options, args = parser.parse_args(argv)
build_utils.CheckOptions(options, parser, required=('jar_path',))
options.bootclasspath = _ParseAndFlattenGnLists(options.bootclasspath)
- options.classpath = _ParseAndFlattenGnLists(options.classpath)
+ options.full_classpath = _ParseAndFlattenGnLists(options.full_classpath)
options.interface_classpath = _ParseAndFlattenGnLists(
options.interface_classpath)
options.processorpath = _ParseAndFlattenGnLists(options.processorpath)
@@ -486,7 +566,7 @@ def main(argv):
])
if options.chromium_code:
- javac_cmd.extend(['-Xlint:unchecked', '-Xlint:deprecation'])
+ javac_cmd.extend(['-Xlint:unchecked', '-Werror'])
else:
# XDignore.symbol.file makes javac compile against rt.jar instead of
# ct.sym. This means that using a java internal package/class will not
@@ -501,7 +581,8 @@ def main(argv):
# Annotation processors crash when given interface jars.
active_classpath = (
- options.classpath if options.processors else options.interface_classpath)
+ options.full_classpath
+ if options.processors else options.interface_classpath)
classpath = []
if active_classpath:
classpath.extend(active_classpath)
@@ -523,9 +604,12 @@ def main(argv):
output_paths = [
options.jar_path,
+ options.jar_path + '.info',
]
if options.incremental:
output_paths.append(options.jar_path + '.pdb')
+ if options.apk_jar_info_path:
+ output_paths.append(options.apk_jar_info_path)
# An escape hatch to be able to check if incremental compiles are causing
# problems.
diff --git a/chromium/build/android/gyp/jinja_template.py b/chromium/build/android/gyp/jinja_template.py
index af361b81f53..459565b292d 100755
--- a/chromium/build/android/gyp/jinja_template.py
+++ b/chromium/build/android/gyp/jinja_template.py
@@ -60,6 +60,14 @@ class JinjaProcessor(object):
def _ProcessFile(processor, input_filename, output_filename):
output = processor.Render(input_filename)
+
+ # If |output| is same with the file content, we skip update and
+ # ninja's restat will avoid rebuilding things that depend on it.
+ if os.path.isfile(output_filename):
+ with codecs.open(output_filename, 'r', 'utf-8') as f:
+ if f.read() == output:
+ return
+
with codecs.open(output_filename, 'w', 'utf-8') as output_file:
output_file.write(output)
diff --git a/chromium/build/android/gyp/merge_manifest.py b/chromium/build/android/gyp/merge_manifest.py
index 43fef824ca4..044c0d212b7 100755
--- a/chromium/build/android/gyp/merge_manifest.py
+++ b/chromium/build/android/gyp/merge_manifest.py
@@ -31,7 +31,7 @@ TOOLS_NAMESPACE = 'http://schemas.android.com/tools'
@contextlib.contextmanager
-def _PatchedManifest(manifest_path):
+def _ProcessManifest(manifest_path):
"""Patches an Android manifest to always include the 'tools' namespace
declaration, as it is not propagated by the manifest merger from the SDK.
@@ -41,6 +41,7 @@ def _PatchedManifest(manifest_path):
manifests = doc.getElementsByTagName('manifest')
assert len(manifests) == 1
manifest = manifests[0]
+ package = manifest.getAttribute('package')
manifest.setAttribute('xmlns:%s' % TOOLS_NAMESPACE_PREFIX, TOOLS_NAMESPACE)
@@ -48,7 +49,7 @@ def _PatchedManifest(manifest_path):
with tempfile.NamedTemporaryFile(prefix=tmp_prefix) as patched_manifest:
doc.writexml(patched_manifest)
patched_manifest.flush()
- yield patched_manifest.name
+ yield patched_manifest.name, package
def _BuildManifestMergerClasspath(build_vars):
@@ -90,8 +91,9 @@ def main(argv):
if extras:
cmd += ['--libs', ':'.join(extras)]
- with _PatchedManifest(args.root_manifest) as root_manifest:
- cmd += ['--main', root_manifest]
+ with _ProcessManifest(args.root_manifest) as tup:
+ root_manifest, package = tup
+ cmd += ['--main', root_manifest, '--property', 'PACKAGE=' + package]
build_utils.CheckOutput(cmd,
# https://issuetracker.google.com/issues/63514300: The merger doesn't set
# a nonzero exit code for failures.
diff --git a/chromium/build/android/gyp/process_resources.py b/chromium/build/android/gyp/process_resources.py
index 558ec5b4e95..602cea6c896 100755
--- a/chromium/build/android/gyp/process_resources.py
+++ b/chromium/build/android/gyp/process_resources.py
@@ -6,7 +6,7 @@
"""Process Android resources to generate R.java, and prepare for packaging.
-This will crunch images and generate v14 compatible resources
+This will crunch images with aapt2 and generate v14 compatible resources
(see generate_v14_compatible_resources.py).
"""
@@ -113,8 +113,8 @@ _PNG_WEBP_BLACKLIST_PATTERN = re.compile('|'.join([
r'.*star_gray\.png',
# Android requires pngs for 9-patch images.
r'.*\.9\.png',
- # Daydream (*.dd) requires pngs for icon files.
- r'.*\.dd\.png']))
+ # Daydream requires pngs for icon files.
+ r'.*daydream_icon_.*\.png']))
class _ResourceWhitelist(object):
@@ -454,58 +454,6 @@ public final class R {
non_final_resources=non_final_resources_by_type)
-def _CrunchDirectory(aapt, input_dir, output_dir):
- """Crunches the images in input_dir and its subdirectories into output_dir.
-
- If an image is already optimized, crunching often increases image size. In
- this case, the crunched image is overwritten with the original image.
- """
- aapt_cmd = [aapt,
- 'crunch',
- '-C', output_dir,
- '-S', input_dir,
- '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
- build_utils.CheckOutput(aapt_cmd, stderr_filter=_FilterCrunchStderr,
- fail_func=_DidCrunchFail)
-
- # Check for images whose size increased during crunching and replace them
- # with their originals (except for 9-patches, which must be crunched).
- for dir_, _, files in os.walk(output_dir):
- for crunched in files:
- if crunched.endswith('.9.png'):
- continue
- if not crunched.endswith('.png'):
- raise Exception('Unexpected file in crunched dir: ' + crunched)
- crunched = os.path.join(dir_, crunched)
- original = os.path.join(input_dir, os.path.relpath(crunched, output_dir))
- original_size = os.path.getsize(original)
- crunched_size = os.path.getsize(crunched)
- if original_size < crunched_size:
- shutil.copyfile(original, crunched)
-
-
-def _FilterCrunchStderr(stderr):
- """Filters out lines from aapt crunch's stderr that can safely be ignored."""
- filtered_lines = []
- for line in stderr.splitlines(True):
- # Ignore this libpng warning, which is a known non-error condition.
- # http://crbug.com/364355
- if ('libpng warning: iCCP: Not recognizing known sRGB profile that has '
- + 'been edited' in line):
- continue
- filtered_lines.append(line)
- return ''.join(filtered_lines)
-
-
-def _DidCrunchFail(returncode, stderr):
- """Determines whether aapt crunch failed from its return code and output.
-
- Because aapt's return code cannot be trusted, any output to stderr is
- an indication that aapt has failed (http://crbug.com/314885).
- """
- return returncode != 0 or stderr
-
-
def _GenerateGlobs(pattern):
# This function processes the aapt ignore assets pattern into a list of globs
# to be used to exclude files on the python side. It removes the '!', which is
@@ -773,7 +721,8 @@ def _CompileDeps(aapt_path, dep_subdirs, temp_dir):
partial_compile_command = [
aapt_path + '2',
'compile',
- '--no-crunch',
+ # TODO(wnwen): Turn this on once aapt2 forces 9-patch to be crunched.
+ # '--no-crunch',
]
pool = multiprocessing.pool.ThreadPool(10)
def compile_partial(directory):
@@ -881,20 +830,8 @@ def _PackageLibrary(options, dep_subdirs, temp_dir, gen_dir):
v14_dir)
# This is the list of directories with resources to put in the final .zip
- # file. The order of these is important so that crunched/v14 resources
- # override the normal ones.
zip_resource_dirs = input_resource_dirs + [v14_dir]
- base_crunch_dir = os.path.join(temp_dir, 'crunch')
- # Crunch image resources. This shrinks png files and is necessary for
- # 9-patch images to display correctly. 'aapt crunch' accepts only a single
- # directory at a time and deletes everything in the output directory.
- for idx, input_dir in enumerate(input_resource_dirs):
- crunch_dir = os.path.join(base_crunch_dir, str(idx))
- build_utils.MakeDirectory(crunch_dir)
- zip_resource_dirs.append(crunch_dir)
- _CrunchDirectory(options.aapt_path, input_dir, crunch_dir)
-
if options.resource_zip_out:
_ZipResources(zip_resource_dirs, options.resource_zip_out,
build_utils.AAPT_IGNORE_PATTERN)
@@ -1024,6 +961,9 @@ def main(args):
input_paths.extend(options.dependencies_res_zips)
input_paths.extend(options.extra_r_text_files)
+ if options.webp_binary:
+ input_paths.append(options.webp_binary)
+
# Resource files aren't explicitly listed in GN. Listing them in the depfile
# ensures the target will be marked stale when resource files are removed.
depfile_deps = []
diff --git a/chromium/build/android/gyp/proguard.py b/chromium/build/android/gyp/proguard.py
index b5b6ff9023a..77cff8300b9 100755
--- a/chromium/build/android/gyp/proguard.py
+++ b/chromium/build/android/gyp/proguard.py
@@ -40,8 +40,6 @@ def _ParseOptions(args):
parser.add_option('--is-test', action='store_true',
help='If true, extra proguard options for instrumentation tests will be '
'added.')
- parser.add_option('--tested-apk-info', help='Path to the proguard .info file '
- 'for the tested apk')
parser.add_option('--classpath', action='append',
help='Classpath for proguard.')
parser.add_option('--stamp', help='Path to touch on success.')
@@ -82,9 +80,6 @@ def main(args):
if options.mapping:
proguard.mapping(options.mapping)
- if options.tested_apk_info:
- proguard.tested_apk_info(options.tested_apk_info)
-
classpath = list(set(options.classpath))
proguard.libraryjars(classpath)
proguard.verbose(options.verbose)
diff --git a/chromium/build/android/gyp/util/proguard_util.py b/chromium/build/android/gyp/util/proguard_util.py
index 6b5b67ae513..171c35bfd80 100644
--- a/chromium/build/android/gyp/util/proguard_util.py
+++ b/chromium/build/android/gyp/util/proguard_util.py
@@ -46,8 +46,6 @@ class ProguardCmdBuilder(object):
def __init__(self, proguard_jar):
assert os.path.exists(proguard_jar)
self._proguard_jar_path = proguard_jar
- self._tested_apk_info_path = None
- self._tested_apk_info = None
self._mapping = None
self._libraries = None
self._injars = None
@@ -63,11 +61,6 @@ class ProguardCmdBuilder(object):
assert self._outjar is None
self._outjar = path
- def tested_apk_info(self, tested_apk_info_path):
- assert self._cmd is None
- assert self._tested_apk_info is None
- self._tested_apk_info_path = tested_apk_info_path
-
def mapping(self, path):
assert self._cmd is None
assert self._mapping is None
@@ -118,9 +111,6 @@ class ProguardCmdBuilder(object):
'java', '-jar', self._proguard_jar_path,
'-forceprocessing',
]
- if self._tested_apk_info_path:
- tested_apk_info = build_utils.ReadJson(self._tested_apk_info_path)
- self._configs += tested_apk_info['configs']
for path in self._config_exclusions:
self._configs.remove(path)
@@ -165,8 +155,6 @@ class ProguardCmdBuilder(object):
inputs = self._configs + self._injars
if self._libraries:
inputs += self._libraries
- if self._tested_apk_info_path:
- inputs += [self._tested_apk_info_path]
return inputs
def GetInputs(self):
diff --git a/chromium/build/android/gyp/write_build_config.py b/chromium/build/android/gyp/write_build_config.py
index b66e879f7d3..f1d8dbe683a 100755
--- a/chromium/build/android/gyp/write_build_config.py
+++ b/chromium/build/android/gyp/write_build_config.py
@@ -345,8 +345,6 @@ def main(argv):
help='Whether proguard is enabled for this apk.')
parser.add_option('--proguard-configs',
help='GN-list of proguard flag files to use in final apk.')
- parser.add_option('--proguard-info',
- help='Path to the proguard .info output for this apk.')
parser.add_option('--fail',
help='GN-list of error message lines to fail with.')
@@ -642,6 +640,22 @@ def main(argv):
if extra_jars:
deps_info['extra_classpath_jars'] = extra_jars
+ if options.proguard_configs:
+ deps_info['proguard_configs'] = (
+ build_utils.ParseGnList(options.proguard_configs))
+
+ if options.type in ('android_apk', 'dist_aar', 'dist_jar'):
+ all_configs = deps_info.get('proguard_configs', [])
+ extra_jars = []
+ for c in all_library_deps:
+ all_configs.extend(
+ p for p in c.get('proguard_configs', []) if p not in all_configs)
+ extra_jars.extend(
+ p for p in c.get('extra_classpath_jars', []) if p not in extra_jars)
+ deps_info['proguard_all_configs'] = all_configs
+ deps_info['proguard_all_extra_jars'] = extra_jars
+ deps_info['proguard_enabled'] = options.proguard_enabled
+
# The java code for an instrumentation test apk is assembled differently for
# ProGuard vs. non-ProGuard.
#
@@ -662,6 +676,11 @@ def main(argv):
if tested_apk_config['proguard_enabled']:
assert options.proguard_enabled, ('proguard must be enabled for '
'instrumentation apks if it\'s enabled for the tested apk.')
+ # Mutating lists, so no need to explicitly re-assign to dict.
+ all_configs.extend(p for p in tested_apk_config['proguard_all_configs']
+ if p not in all_configs)
+ extra_jars.extend(p for p in tested_apk_config['proguard_all_extra_jars']
+ if p not in extra_jars)
expected_tested_package = tested_apk_config['package_name']
AndroidManifest(options.android_manifest).CheckInstrumentationElements(
@@ -695,25 +714,6 @@ def main(argv):
deps_dex_files = [
p for p in deps_dex_files if not p in tested_apk_deps_dex_files]
- if options.proguard_configs:
- deps_info['proguard_configs'] = (
- build_utils.ParseGnList(options.proguard_configs))
-
- if options.type in ('android_apk', 'dist_aar', 'dist_jar'):
- deps_info['proguard_enabled'] = options.proguard_enabled
- deps_info['proguard_info'] = options.proguard_info
- config['proguard'] = {}
- proguard_config = config['proguard']
- extra_jars = []
- all_configs = deps_info.get('proguard_configs', [])
- for c in all_library_deps:
- extra_jars.extend(
- p for p in c.get('extra_classpath_jars', []) if p not in extra_jars)
- all_configs.extend(
- p for p in c.get('proguard_configs', []) if p not in all_configs)
- proguard_config['extra_jars'] = extra_jars
- proguard_config['all_configs'] = all_configs
-
# Dependencies for the final dex file of an apk.
if options.type == 'android_apk':
config['final_dex'] = {}
diff --git a/chromium/build/android/gyp/write_ordered_libraries.py b/chromium/build/android/gyp/write_ordered_libraries.py
index dda25b8d0bf..e5a23bf6d05 100755
--- a/chromium/build/android/gyp/write_ordered_libraries.py
+++ b/chromium/build/android/gyp/write_ordered_libraries.py
@@ -69,6 +69,8 @@ def main():
parser.add_option('--readelf', help='Path to the readelf binary.')
parser.add_option('--runtime-deps',
help='A file created for the target using write_runtime_deps.')
+ parser.add_option('--exclude-shared-libraries',
+ help='List of shared libraries to exclude from the output.')
parser.add_option('--output', help='Path to the generated .json file.')
parser.add_option('--stamp', help='Path to touch on success.')
@@ -77,10 +79,15 @@ def main():
SetReadelfPath(options.readelf)
unsorted_lib_paths = []
+ exclude_shared_libraries = []
+ if options.exclude_shared_libraries:
+ exclude_shared_libraries = options.exclude_shared_libraries.split(',')
for f in open(options.runtime_deps):
f = f[:-1]
if f.endswith('.so'):
p = f.replace('lib.unstripped/', '')
+ if os.path.basename(p) in exclude_shared_libraries:
+ continue
unsorted_lib_paths.append(p)
_library_path_map[os.path.basename(p)] = p
diff --git a/chromium/build/android/incremental_install/BUILD.gn b/chromium/build/android/incremental_install/BUILD.gn
index c0bb27e1720..3093c3a7107 100644
--- a/chromium/build/android/incremental_install/BUILD.gn
+++ b/chromium/build/android/incremental_install/BUILD.gn
@@ -16,4 +16,5 @@ android_library("bootstrap_java") {
"java/org/chromium/incrementalinstall/SecondInstrumentation.java",
]
emma_never_instrument = true
+ no_build_hooks = true
}
diff --git a/chromium/build/android/lighttpd_server.py b/chromium/build/android/lighttpd_server.py
index 15bc9969846..89a828ab54a 100755
--- a/chromium/build/android/lighttpd_server.py
+++ b/chromium/build/android/lighttpd_server.py
@@ -93,6 +93,7 @@ class LighttpdServer(object):
'Could not find lighttpd at %s.\n'
'It may need to be installed (e.g. sudo apt-get install lighttpd)'
% self.lighttpd_path)
+ # pylint: disable=no-member
self.process = pexpect.spawn(self.lighttpd_path,
['-D', '-f', self.config_path,
'-m', self.lighttpd_module_path],
@@ -137,6 +138,7 @@ class LighttpdServer(object):
except (httplib.HTTPException, socket.error) as client_error:
pass # Probably too quick connecting: try again
# Check for server startup error messages
+ # pylint: disable=no-member
ix = self.process.expect([pexpect.TIMEOUT, pexpect.EOF, '.+'],
timeout=timeout)
if ix == 2: # stdout spew from the server
diff --git a/chromium/build/android/lint/suppressions.xml b/chromium/build/android/lint/suppressions.xml
index 49d8aa0892f..2d4716d8ef4 100644
--- a/chromium/build/android/lint/suppressions.xml
+++ b/chromium/build/android/lint/suppressions.xml
@@ -25,7 +25,7 @@ Still reading?
<issue id="AllowBackup">
<ignore path="AndroidManifest.xml"/>
</issue>
- <!-- TODO(crbug.com/799070): File bugs to fix this -->
+ <!-- TODO(crbug.com/804427): Remove this suppression or add rationale. -->
<issue id="AppCompatResource" severity="ignore"/>
<!-- We use asserts in Chromium. See https://chromium.googlesource.com/chromium/src/+/master/styleguide/java/java.md#Asserts -->
<issue id="Assert" severity="ignore"/>
@@ -71,10 +71,10 @@ Still reading?
<ignore regexp="content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java"/>
<ignore regexp="content/public/android/java/src/org/chromium/content/browser/PopupZoomer.java"/>
</issue>
- <!-- TODO(crbug.com/799070): File bugs to fix this -->
+ <!-- TODO(crbug.com/804432): Remove this and fix the offending xml files. -->
<issue id="EllipsizeMaxLines" severity="ignore"/>
<issue id="ExifInterface">
- <!-- TODO(crbug.com/799070): Update android.support.media.ExifInterface and use it instead -->
+ <!-- TODO(crbug.com/804438): Cannot update until android.media.ExifInterface supports file descriptors -->
<ignore regexp="chrome/android/java/src/org/chromium/chrome/browser/photo_picker/BitmapUtils.java"/>
</issue>
<issue id="ExportedContentProvider">
@@ -91,10 +91,6 @@ Still reading?
<issue id="GoogleAppIndexingWarning" severity="Error">
<ignore regexp="AndroidManifest.xml"/>
</issue>
- <!-- TODO(crbug.com/799070): Fix for remoting -->
- <issue id="AppLinkUrlError">
- <ignore regexp="AndroidManifest.xml"/>
- </issue>
<issue id="HandlerLeak">
<ignore regexp="android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java" />
<ignore regexp="chromecast/internal" />
@@ -130,7 +126,7 @@ Still reading?
</issue>
<issue id="IconDipSize">
<ignore regexp="chromecast/internal"/>
- <!-- TODO(crbug.com/799070): File bugs to fix these icons -->
+ <!-- These only need to be 1px for all densities. See: crbug.com/804449 -->
<ignore regexp="chrome/android/java/res/.*tab_strip_fade"/>
</issue>
<issue id="IconDuplicates" severity="Error">
@@ -149,10 +145,12 @@ Still reading?
</issue>
<issue id="IconLocation">
<ignore regexp="chromecast/internal"/>
+ <!-- This is just for testing -->
+ <ignore regexp="chrome/test/chromedriver/test/webview_shell/java/res/drawable/icon.png"/>
+ <!-- Memconsumer is only for tooling -->
+ <ignore regexp="tools/android/memconsumer/java/res/drawable/"/>
<!-- It is OK for content_shell_apk to have missing assets. -->
<ignore regexp="content/shell/android/java/res/"/>
- <!-- Suppression for chrome/test/chromedriver/test/webview_shell/java/res/drawable/icon.png -->
- <ignore regexp="res/drawable/icon.png"/>
</issue>
<issue id="IconMissingDensityFolder">
<!-- see crbug.com/542435 -->
@@ -185,7 +183,7 @@ Still reading?
<issue id="LabelFor" severity="Error">
<ignore regexp="android_webview/tools/system_webview_shell/apk/res/layout/activity_webview_browser.xml"/>
</issue>
- <!-- TODO(crbug.com/799070): File bugs to fix this. -->
+ <!-- TODO(crbug.com/804453): Remove this after fixing. -->
<issue id="KeyboardInaccessibleWidget" severity="ignore"/>
<issue id="LintError" severity="Error"/>
<issue id="LogConditional" severity="ignore"/>
@@ -214,45 +212,24 @@ Still reading?
<ignore path="AndroidManifest.xml"/>
</issue>
<issue id="NewApi">
- <!-- This is rewritten by desugar after lint runs. -->
- <ignore regexp="Call requires API level 19.*`java.util.Objects#requireNonNull`"/>
- <!-- AutoCloseable has been available since API 15, just hidden. -->
+ <!-- Do not add new suppressions without rationale. -->
+ <!-- 2 AutoCloseable has been available since API 15, just hidden. -->
<ignore regexp="Class requires API level 19.*java.lang.AutoCloseable"/>
<ignore regexp="Call requires API level 19.*java.lang.AutoCloseable#close"/>
- <!-- We support try-with-resources via desugar. -->
+ <!-- 1 We support requireNonNull via desugar. -->
+ <ignore regexp="Call requires API level 19.*`java.util.Objects#requireNonNull`"/>
+ <!-- 2 We support try-with-resources via desugar. -->
<ignore regexp="Try-with-resources requires API level 19"/>
<ignore regexp="Call requires API level 19.*`java.lang.Throwable#addSuppressed`"/>
- <!-- We support default methods via desugar. -->
+ <!-- 1 We support default methods via desugar. -->
<ignore regexp="Default method requires API level 24"/>
- <!-- TODO(crbug.com/799070): Fix these after lint upgrade. -->
+ <!-- 1 We support static interface methods via desugar. -->
<ignore regexp="Static interface method requires API level 24"/>
- <ignore regexp="(current min is 1)"/>
- <!-- Suppressions below this line need rationale :( -->
- <ignore regexp="Attribute `paddingStart` referenced here can result in a crash on some specific devices older than API 17"/>
- <ignore regexp="chrome/android/java/res/values-v17/styles.xml"/>
- <ignore regexp="chromecast/internal"/>
- <ignore regexp="com/android/tv"/>
- <ignore regexp="com/android/webview/chromium/ServiceWorkerControllerAdapter.class"/>
- <ignore regexp="com/android/webview/chromium/ServiceWorkerSettingsAdapter.class"/>
- <ignore regexp="com/android/webview/chromium/WebViewChromium.class"/>
- <ignore regexp="com/android/webview/chromium/WebViewChromiumFactoryProvider.class"/>
- <ignore regexp="com/chrome/cloud/experimental/airspeed/BenchmarksTest.class"/>
- <ignore regexp="com/google/android/apps/cast"/>
- <ignore regexp="com/google/android/apps/mediashell"/>
- <ignore regexp="org/chromium/base/AnimationFrameTimeHistogram.*Recorder.class"/>
- <ignore regexp="org/chromium/base/JavaHandlerThread.class"/>
- <ignore regexp="org/chromium/base/SysUtils.class"/>
- <ignore regexp="org/chromium/chrome/browser/TtsPlatformImpl.class"/>
- <ignore regexp="org/chromium/chrome/browser/ntp/IncognitoNewTabPage.class"/>
- <ignore regexp="org/chromium/chrome/browser/ntp/NewTabPage.class"/>
- <ignore regexp="org/chromium/chromecast/base/CastSettingsManager.class"/>
- <ignore regexp="org/chromium/memconsumer/MemConsumer.*.class"/>
- <ignore regexp="org/chromium/memconsumer/ResidentService.class"/>
- <ignore regexp="org/chromium/mojo/bindings/ValidationTest.class"/>
- <!-- TODO(crbug.com/635567): Fix this properly. -->
- <ignore regexp="sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java"/>
+ <!-- 1 This is for testonly target android_support_chromium_java. -->
+ <ignore regexp="third_party/android_tools/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java"/>
+ <!-- Endnote: Please specify number of suppressions when adding more -->
</issue>
- <!-- TODO(crbug.com/799070): Re-enable this -->
+ <!-- This warning just adds a lot of false positives. -->
<issue id="ObsoleteSdkInt" severity="ignore"/>
<issue id="OldTargetApi">
<ignore path="AndroidManifest.xml"/>
@@ -299,7 +276,7 @@ Still reading?
<ignore regexp="chromecast/internal"/>
</issue>
<issue id="StaticFieldLeak">
- <!-- TODO(crbug.com/799070): Fix after upgrading lint. -->
+ <!-- Nice to fix, but not necessary or performance critical. -->
<ignore regexp="This AsyncTask class should be static or leaks might occur"/>
</issue>
<issue id="StringFormatCount" severity="Error">
@@ -341,15 +318,12 @@ Still reading?
</issue>
<!-- Our generated enums are allowed to have the same values. -->
<issue id="UniqueConstants" severity="ignore"/>
- <!-- Do not add new suppressions without very good rationale. -->
<issue id="UnusedResources">
+ <!-- Do not add new suppressions without rationale. -->
<!-- 3 raw resources are accessed by URL in various places -->
<ignore regexp="PRODUCT_DIR/gen/remoting/android/.*/res/raw/credits.html"/>
<ignore regexp="PRODUCT_DIR/gen/remoting/android/.*/res/raw/credits_css.css"/>
<ignore regexp="PRODUCT_DIR/gen/remoting/android/.*/res/raw/credits_js.js"/>
- <!-- 2 dimens override support library's res, will be changing soon -->
- <ignore regexp="R.dimen.design_bottom_navigation_text_size"/>
- <ignore regexp="R.dimen.design_bottom_navigation_active_text_size"/>
<!-- 1 string test only, used in CronetSmokeTestCase dynamically -->
<ignore regexp="R.string.TestSupportImplClass"/>
<!-- 1 string used by Android's policies system, pulled from app directly -->
@@ -361,24 +335,10 @@ Still reading?
<!-- 2 resources used by android webview glue layer, could be refactored -->
<ignore regexp="android_webview/java/res/drawable-hdpi/ic_play_circle_outline_black_48dp.png"/>
<ignore regexp="R.string.private_browsing_warning"/>
- <!-- 9 OMR1 SDK roll mystery. TODO(jbudorick): Remove this after rolling lint. -->
- <ignore regexp="chrome/android/chrome_strings_grd.resources.zip/values/android_chrome_strings.xml"/>
- <ignore regexp="chrome/android/java/res/layout/location_bar.xml"/>
- <ignore regexp="chrome/android/java/res/values/colors.xml"/>
- <ignore regexp="chrome/android/java/res/values/dimens.xml"/>
- <ignore regexp="chrome/android/java/res/drawable-hdpi/ic_omnibox_magnifier.png"/>
- <ignore regexp="chrome/android/java/res/drawable-hdpi/omnibox_https_invalid.png"/>
- <ignore regexp="chrome/android/java/res/drawable-hdpi/omnibox_info.png"/>
- <ignore regexp="clank/java/clank_strings_grd.resources.zip/values/android_internal_strings.xml"/>
- <ignore regexp="tools/android/audio_focus_grabber/java/res/drawable-hdpi/notification_icon.png"/>
- <!-- # TODO(crbug.com/799070): Fix these. -->
- <ignore regexp="ui/android/java/res/values/colors.xml"/>
- <ignore regexp="ui/android/java/res/values/dimens.xml"/>
- <ignore regexp="ui/android/java/res/values-v17/styles.xml"/>
- <ignore regexp="chrome/android/java/res/anim/fullscreen_notification_in.xml"/>
- <ignore regexp="chrome/android/java/res/values-v17/styles.xml"/>
- <ignore regexp="chrome/android/java/res/values-v21/styles.xml"/>
- <!-- Endnote: Please specify number of resources when adding more suppressions -->
+ <!-- 2 resource sets used by clank widgets for each channel -->
+ <ignore regexp="The resource `R.string.bookmark_widget_title.*` appears to be unused"/>
+ <ignore regexp="The resource `R.string.search_widget_title.*` appears to be unused"/>
+ <!-- Endnote: Please specify number of suppressions when adding more -->
</issue>
<issue id="UseCompoundDrawables">
<!-- Upscaling 24dp to 48dp doesn't work as expected with a TextView compound drawable. -->
@@ -393,6 +353,7 @@ Still reading?
<issue id="UsesMinSdkAttributes" severity="Error">
<ignore regexp="AndroidManifest.xml"/>
</issue>
+ <!-- TODO(crbug.com/807734): Investigate and possible remove this -->
<issue id="UseSparseArrays" severity="ignore"/>
<issue id="ValidFragment" severity="Error">
<ignore regexp="chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java"/>
diff --git a/chromium/build/android/pylib/constants/__init__.py b/chromium/build/android/pylib/constants/__init__.py
index e844a1ad4cf..f100211b9c9 100644
--- a/chromium/build/android/pylib/constants/__init__.py
+++ b/chromium/build/android/pylib/constants/__init__.py
@@ -96,7 +96,7 @@ DEVICE_PERF_OUTPUT_DIR = (
SCREENSHOTS_DIR = os.path.join(DIR_SOURCE_ROOT, 'out_screenshots')
ANDROID_SDK_VERSION = version_codes.O_MR1
-ANDROID_SDK_BUILD_TOOLS_VERSION = '27.0.1'
+ANDROID_SDK_BUILD_TOOLS_VERSION = '27.0.3'
ANDROID_SDK_ROOT = os.path.join(DIR_SOURCE_ROOT,
'third_party', 'android_tools', 'sdk')
ANDROID_SDK_TOOLS = os.path.join(ANDROID_SDK_ROOT,
diff --git a/chromium/build/android/pylib/gtest/filter/unit_tests_disabled b/chromium/build/android/pylib/gtest/filter/unit_tests_disabled
index 74c25fa3597..fde5faa8b06 100644
--- a/chromium/build/android/pylib/gtest/filter/unit_tests_disabled
+++ b/chromium/build/android/pylib/gtest/filter/unit_tests_disabled
@@ -37,37 +37,6 @@ ChromeSelectFilePolicyTest.ExpectAsynchronousListenerCall
# http://crbug.com/139033
ChromeDownloadManagerDelegateTest.StartDownload_PromptAlways
-# Extension support is limited on Android.
-# Some of these can be enabled if we register extension related prefs in
-# browser_prefs.cc
-ExtensionTest.*
-ExtensionAPI.*
-ExtensionFileUtilTest.*
-ExtensionPermissionsTest.*
-ExtensionUnpackerTest.*
-ActiveTabTest.*
-ExtensionAppsPromo.*
-ComponentLoaderTest.*
-ExtensionFromUserScript.*
-ExtensionFromWebApp.*
-ExtensionIconManagerTest.*
-ExtensionServiceTest.*
-ExtensionServiceTestSimple.*
-ExtensionSourcePriorityTest.*
-ExtensionSpecialStoragePolicyTest.*
-ExternalPolicyProviderTest.*
-ExternalProviderImplTest.*
-MenuManagerTest.*
-PageActionControllerTest.*
-PermissionsUpdaterTest.*
-ImageLoaderTest.*
-ImageLoadingTrackerTest.*
-ExtensionSettingsFrontendTest.*
-ExtensionSettingsSyncTest.*
-ExtensionUpdaterTest.*
-UserScriptListenerTest.*
-ExtensionActionIconFactoryTest.*
-
# crbug.com/139411
AutocompleteProviderTest.*
HistoryContentsProviderBodyOnlyTest.*
@@ -94,9 +63,6 @@ VariationsUtilTest.NoAssociation
AutofillManagerTest.UpdatePasswordSyncState
AutofillManagerTest.UpdatePasswordGenerationState
-# crbug.com/144227
-ExtensionIconImageTest.*
-
# crbug.com/145843
EntropyProviderTest.UseOneTimeRandomizationSHA1
EntropyProviderTest.UseOneTimeRandomizationPermuted
diff --git a/chromium/build/android/pylib/gtest/gtest_test_instance.py b/chromium/build/android/pylib/gtest/gtest_test_instance.py
index c3e7fb6cdc4..e9bf3cf4798 100644
--- a/chromium/build/android/pylib/gtest/gtest_test_instance.py
+++ b/chromium/build/android/pylib/gtest/gtest_test_instance.py
@@ -31,9 +31,8 @@ RUN_IN_SUB_THREAD_TEST_SUITES = [
'base_unittests', # file_locking_unittest.cc uses a child process.
'ipc_perftests',
'ipc_tests',
- 'mojo_message_pipe_perftests',
- 'mojo_public_bindings_perftests',
- 'mojo_system_unittests',
+ 'mojo_perftests',
+ 'mojo_unittests',
'net_unittests'
]
diff --git a/chromium/build/android/pylib/output/remote_output_manager.py b/chromium/build/android/pylib/output/remote_output_manager.py
index 1e624e1e3d3..425f14362e2 100644
--- a/chromium/build/android/pylib/output/remote_output_manager.py
+++ b/chromium/build/android/pylib/output/remote_output_manager.py
@@ -88,4 +88,4 @@ class GoogleStorageArchivedFile(output_manager.ArchivedFile):
if self._datatype == output_manager.Datatype.HTML:
content_type = 'text/html'
google_storage_helper.upload(
- self._upload_path, self.name, self._bucket, content_type)
+ self._upload_path, self.name, self._bucket, content_type=content_type)
diff --git a/chromium/build/build_config.h b/chromium/build/build_config.h
index 6b30422e096..7742dd721df 100644
--- a/chromium/build/build_config.h
+++ b/chromium/build/build_config.h
@@ -63,6 +63,8 @@
#define OS_QNX 1
#elif defined(_AIX)
#define OS_AIX 1
+#elif defined(__asmjs__)
+#define OS_ASMJS
#else
#error Please add support for your platform in build/build_config.h
#endif
@@ -77,10 +79,10 @@
// For access to standard POSIXish features, use OS_POSIX instead of a
// more specific macro.
-#if defined(OS_AIX) || defined(OS_ANDROID) || defined(OS_FREEBSD) || \
- defined(OS_FUCHSIA) || defined(OS_LINUX) || defined(OS_MACOSX) || \
- defined(OS_NACL) || defined(OS_NETBSD) || defined(OS_OPENBSD) || \
- defined(OS_QNX) || defined(OS_SOLARIS)
+#if defined(OS_AIX) || defined(OS_ANDROID) || defined(OS_ASMJS) || \
+ defined(OS_FREEBSD) || defined(OS_FUCHSIA) || defined(OS_LINUX) || \
+ defined(OS_MACOSX) || defined(OS_NACL) || defined(OS_NETBSD) || \
+ defined(OS_OPENBSD) || defined(OS_QNX) || defined(OS_SOLARIS)
#define OS_POSIX 1
#endif
@@ -143,7 +145,7 @@
#define ARCH_CPU_ARM64 1
#define ARCH_CPU_64_BITS 1
#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(__pnacl__)
+#elif defined(__pnacl__) || defined(__asmjs__)
#define ARCH_CPU_32_BITS 1
#define ARCH_CPU_LITTLE_ENDIAN 1
#elif defined(__MIPSEL__)
diff --git a/chromium/build/buildflag_header.gni b/chromium/build/buildflag_header.gni
index 1c97741c6d8..281c1646a90 100644
--- a/chromium/build/buildflag_header.gni
+++ b/chromium/build/buildflag_header.gni
@@ -79,8 +79,8 @@
#
# Example
#
-# buildflag_header("foo_features") {
-# header = "foo_features.h"
+# buildflag_header("foo_buildflags") {
+# header = "foo_buildflags.h"
#
# flags = [
# # This uses the GN build flag enable_doom_melon as the definition.
@@ -133,5 +133,9 @@ template("buildflag_header") {
"testonly",
"visibility",
])
+
+ public_deps = [
+ "//build:buildflag_header_h",
+ ]
}
}
diff --git a/chromium/build/check_gn_headers_whitelist.txt b/chromium/build/check_gn_headers_whitelist.txt
index c268ed13a64..e17b0a38596 100644
--- a/chromium/build/check_gn_headers_whitelist.txt
+++ b/chromium/build/check_gn_headers_whitelist.txt
@@ -244,7 +244,6 @@ skia/ext/convolver_mips_dspr2.h
skia/ext/skia_commit_hash.h
skia/ext/texture_handle.h
testing/gmock_mutant.h
-third_party/WebKit/common/feature_policy/feature_policy_feature.h
third_party/WebKit/Source/bindings/modules/v8/serialization/WebCryptoSubTags.h
third_party/WebKit/Source/core/animation/CSSInterpolationEnvironment.h
third_party/WebKit/Source/core/animation/SVGInterpolationEnvironment.h
diff --git a/chromium/build/ciopfs.sha1 b/chromium/build/ciopfs.sha1
new file mode 100644
index 00000000000..c1855a347e9
--- /dev/null
+++ b/chromium/build/ciopfs.sha1
@@ -0,0 +1 @@
+5454b3c4f1c9992047e7ae9d6d14d5b49b1b12f3 \ No newline at end of file
diff --git a/chromium/build/cipd/android/android.ensure b/chromium/build/cipd/android/android.ensure
index a6327b3357e..42e2bdaf3cf 100644
--- a/chromium/build/cipd/android/android.ensure
+++ b/chromium/build/cipd/android/android.ensure
@@ -35,7 +35,7 @@ chromium/third_party/apk-patch-size-estimator version:0.2-cr0
# endless merge conflicts
@Subdir third_party/bazel
-chromium/third_party/bazel version:0-cr0
+chromium/third_party/bazel version:0.10.0
# Three unchanging lines
# avoid the horror that is
diff --git a/chromium/build/config/BUILDCONFIG.gn b/chromium/build/config/BUILDCONFIG.gn
index 853c8492ce9..7d60dd92090 100644
--- a/chromium/build/config/BUILDCONFIG.gn
+++ b/chromium/build/config/BUILDCONFIG.gn
@@ -166,8 +166,7 @@ declare_args() {
#
# For more information see
# https://chromium.googlesource.com/chromium/src/+/master/docs/component_build.md
- is_component_build =
- is_debug && current_os != "ios" && current_os != "fuchsia"
+ is_component_build = is_debug && current_os != "ios"
}
assert(!(is_debug && is_official_build), "Can't do official debug builds")
@@ -373,6 +372,7 @@ if (current_os == "win" || current_os == "winrt_81" ||
} else if (current_os == "aix") {
is_android = false
is_chromeos = false
+ is_fuchsia = false
is_ios = false
is_linux = false
is_mac = false
@@ -516,6 +516,7 @@ set_sources_assignment_filter(sources_assignment_filter)
default_compiler_configs = [
"//build/config:feature_flags",
"//build/config/compiler:afdo",
+ "//build/config/compiler:afdo_optimize_size",
"//build/config/compiler:compiler",
"//build/config/compiler:clang_stackrealign",
"//build/config/compiler:compiler_arm_fpu",
diff --git a/chromium/build/config/OWNERS b/chromium/build/config/OWNERS
index bd53091f46a..f1592d3b1ae 100644
--- a/chromium/build/config/OWNERS
+++ b/chromium/build/config/OWNERS
@@ -1,6 +1,5 @@
-brettw@chromium.org
dpranke@chromium.org
scottmg@chromium.org
-per-file BUILDCONFIG.gn=brettw@chromium.org
+per-file BUILDCONFIG.gn=dpranke@chromium.org
per-file BUILDCONFIG.gn=set noparent
diff --git a/chromium/build/config/allocator.gni b/chromium/build/config/allocator.gni
index fc5000a3c23..92a2f341d24 100644
--- a/chromium/build/config/allocator.gni
+++ b/chromium/build/config/allocator.gni
@@ -5,9 +5,9 @@
import("//build/config/sanitizers/sanitizers.gni")
# Temporarily disable tcmalloc on arm64 linux to get rid of compilation errors.
-if (is_android || current_cpu == "mipsel" || is_mac || is_ios || is_asan ||
- is_lsan || is_tsan || is_msan || is_win || is_syzyasan || is_fuchsia ||
- (is_linux && target_cpu == "arm64")) {
+if (is_android || current_cpu == "mipsel" || is_mac || is_ios ||
+ is_asan || is_lsan || is_tsan || is_msan || is_win || is_syzyasan ||
+ is_fuchsia || (is_linux && target_cpu == "arm64")) {
_default_allocator = "none"
} else {
_default_allocator = "tcmalloc"
diff --git a/chromium/build/config/android/config.gni b/chromium/build/config/android/config.gni
index a533ce96135..cf339a2423c 100644
--- a/chromium/build/config/android/config.gni
+++ b/chromium/build/config/android/config.gni
@@ -39,16 +39,14 @@ if (is_android) {
# Android SDK release. Currently, only "o_mr1" is publicly supported.
android_sdk_release = default_android_sdk_release
}
+ }
- # This is the result of profiling Chromium. Blindly applying it to arbitrary
- # downstream projects and hoping it'll grant a speedup seems fragile. (Not
- # to mention that it resides in a Chromium-specific directory.)
- if (build_with_chromium) {
- # The default AFDO profile used by public builds. Value may differ in
- # internal builds.
- clang_default_afdo_profile =
- rebase_path("//chrome/android/profiles/chrome-profile-3309-text.prof")
- }
+ # This is the result of profiling Chromium. Blindly applying it to arbitrary
+ # downstream projects and hoping it'll grant a speedup seems fragile. (Not
+ # to mention that it resides in a Chromium-specific directory.)
+ if (build_with_chromium) {
+ clang_default_afdo_profile =
+ rebase_path("//chrome/android/profiles/afdo.prof")
}
if (!defined(extra_chrome_shared_library_configs)) {
@@ -70,7 +68,7 @@ if (is_android) {
if (android_sdk_release == "o_mr1") {
default_android_sdk_root = "//third_party/android_tools/sdk"
default_android_sdk_version = "27"
- default_android_sdk_build_tools_version = "27.0.1"
+ default_android_sdk_build_tools_version = "27.0.3"
default_android_sdk_tools_version_suffix = "-26.0.0-dev"
public_android_sdk = true
}
@@ -115,6 +113,11 @@ if (is_android) {
webview_framework_jar = webview_public_framework_jar
}
+ # TODO(crbug.com/807768): Remove this extra dependency.
+ if (!defined(android_extra_test_deps)) {
+ android_extra_test_deps = []
+ }
+
assert(defined(default_android_sdk_root),
"SDK release " + android_sdk_release + " not recognized.")
@@ -190,6 +193,11 @@ if (is_android) {
# When true, updates all android_aar_prebuilt() .info files during gn gen.
# Refer to android_aar_prebuilt() for more details.
update_android_aar_prebuilts = false
+
+ # When true, uses the third party libraries from //third_party/android_deps
+ # over the ones in other places. (instead of the support library from
+ # android_tools for example)
+ enable_android_deps_repository = false
}
# We need a second declare_args block to make sure we are using the overridden
@@ -255,8 +263,6 @@ if (is_android) {
# Path to the SDK's android.jar
android_sdk_jar = "$android_sdk/android.jar"
- zipalign_path = "$android_sdk_build_tools/zipalign"
-
# Subdirectories inside android_ndk_root that contain the sysroot for the
# associated platform.
x86_android_sysroot_subdir =
diff --git a/chromium/build/config/android/internal_rules.gni b/chromium/build/config/android/internal_rules.gni
index bcf42f48f70..365ec89502e 100644
--- a/chromium/build/config/android/internal_rules.gni
+++ b/chromium/build/config/android/internal_rules.gni
@@ -336,11 +336,7 @@ template("write_build_config") {
args += [ "--extra-classpath-jars=$_rebased_input_jars_paths" ]
}
if (defined(invoker.proguard_enabled) && invoker.proguard_enabled) {
- args += [
- "--proguard-enabled",
- "--proguard-info",
- rebase_path(invoker.proguard_info, root_build_dir),
- ]
+ args += [ "--proguard-enabled" ]
}
if (defined(invoker.proguard_configs)) {
_rebased_proguard_configs =
@@ -1186,9 +1182,14 @@ if (enable_java_templates) {
if (defined(invoker.jar_excluded_patterns)) {
_jar_excluded_patterns = invoker.jar_excluded_patterns
}
+ _jar_included_patterns = []
+ if (defined(invoker.jar_included_patterns)) {
+ _jar_included_patterns = invoker.jar_included_patterns
+ }
_strip_resource_classes = defined(invoker.strip_resource_classes) &&
invoker.strip_resource_classes
- _filter_jar = _jar_excluded_patterns != [] || _strip_resource_classes
+ _filter_jar = _jar_excluded_patterns != [] ||
+ _jar_included_patterns != [] || _strip_resource_classes
_deps = []
_previous_output_jar = _input_jar_path
@@ -1269,6 +1270,7 @@ if (enable_java_templates) {
action(_desugar_target) {
script = "//build/android/gyp/desugar.py"
+ depfile = "$target_gen_dir/$target_name.d"
deps = _deps
if (defined(invoker.deps)) {
deps += invoker.deps
@@ -1292,6 +1294,8 @@ if (enable_java_templates) {
}
inputs += [ _android_sdk_ijar ]
args = [
+ "--depfile",
+ rebase_path(depfile, root_build_dir),
"--input-jar",
rebase_path(_desugar_input_jar, root_build_dir),
"--output-jar",
@@ -1334,6 +1338,7 @@ if (enable_java_templates) {
"--jar-path",
rebase_path(_filter_output_jar, root_build_dir),
"--excluded-classes=$_jar_excluded_patterns",
+ "--included-classes=$_jar_included_patterns",
]
if (_strip_resource_classes) {
args += [ "--strip-resource-classes-for=@FileArg($_rebased_build_config:javac:resource_packages)" ]
@@ -1409,23 +1414,55 @@ if (enable_java_templates) {
}
}
- # Runs process_resources.py
+ template("merge_manifests") {
+ action(target_name) {
+ forward_variables_from(invoker,
+ [
+ "deps",
+ "testonly",
+ ])
+ script = "//build/android/gyp/merge_manifest.py"
+ depfile = "$target_gen_dir/$target_name.d"
+
+ inputs = [
+ invoker.build_config,
+ invoker.input_manifest,
+ ]
+
+ outputs = [
+ invoker.output_manifest,
+ ]
+ _rebased_build_config = rebase_path(invoker.build_config, root_build_dir)
+
+ args = [
+ "--depfile",
+ rebase_path(depfile, root_build_dir),
+ "--build-vars",
+ rebase_path(android_build_vars, root_build_dir),
+ "--root-manifest",
+ rebase_path(invoker.input_manifest, root_build_dir),
+ "--output",
+ rebase_path(invoker.output_manifest, root_build_dir),
+ "--extras",
+ "@FileArg($_rebased_build_config:extra_android_manifests)",
+ ]
+ }
+ }
+
template("process_resources") {
_process_resources_target_name = target_name
if (defined(invoker.srcjar_path)) {
_srcjar_path = invoker.srcjar_path
}
if (defined(invoker.output)) {
- _post_process = defined(invoker.post_process_script)
_packaged_resources_path = invoker.output
- if (_post_process) {
- _process_resources_target_name = "${target_name}__intermediate"
- _packaged_resources_path =
- get_path_info(_packaged_resources_path, "dir") + "/" +
- get_path_info(_packaged_resources_path, "name") +
- ".intermediate.ap_"
- _srcjar_path = "${_srcjar_path}.intermediate.srcjar"
- }
+ }
+ if (defined(invoker.post_process_script)) {
+ _process_resources_target_name = "${target_name}__intermediate"
+ _packaged_resources_path =
+ get_path_info(_packaged_resources_path, "dir") + "/" +
+ get_path_info(_packaged_resources_path, "name") + ".intermediate.ap_"
+ _srcjar_path = "${_srcjar_path}.intermediate.srcjar"
}
action(_process_resources_target_name) {
set_sources_assignment_filter([])
@@ -1632,12 +1669,13 @@ if (enable_java_templates) {
}
if (defined(invoker.png_to_webp) && invoker.png_to_webp) {
_webp_target = "//third_party/libwebp:cwebp($host_toolchain)"
+ _webp_binary = get_label_info(_webp_target, "root_out_dir") + "/cwebp"
deps += [ _webp_target ]
+ inputs += [ _webp_binary ]
args += [
"--png-to-webp",
"--webp-binary",
- rebase_path(get_label_info(_webp_target, "root_out_dir") + "/cwebp",
- root_build_dir),
+ rebase_path(_webp_binary, root_build_dir),
]
}
if (defined(invoker.exclude_xxxhdpi) && invoker.exclude_xxxhdpi) {
@@ -1656,22 +1694,30 @@ if (enable_java_templates) {
}
}
- if (defined(_packaged_resources_path) && _post_process) {
+ if (defined(invoker.post_process_script)) {
action(target_name) {
depfile = "${target_gen_dir}/${invoker.target_name}_2.d"
script = invoker.post_process_script
args = [
- "--depfile",
- rebase_path(depfile, root_build_dir),
- "--apk-path",
- rebase_path(_packaged_resources_path, root_build_dir),
- "--output",
- rebase_path(invoker.output, root_build_dir),
- "--srcjar-in",
- rebase_path(_srcjar_path, root_build_dir),
- "--srcjar-out",
- rebase_path(invoker.srcjar_path, root_build_dir),
- ] + invoker.post_process_args
+ "--depfile",
+ rebase_path(depfile, root_build_dir),
+ "--apk-path",
+ rebase_path(_packaged_resources_path, root_build_dir),
+ "--output",
+ rebase_path(invoker.output, root_build_dir),
+ "--srcjar-in",
+ rebase_path(_srcjar_path, root_build_dir),
+ "--srcjar-out",
+ rebase_path(invoker.srcjar_path, root_build_dir),
+ ]
+ if (defined(invoker.shared_resources_whitelist)) {
+ args += [
+ "--r-text-whitelist",
+ rebase_path(invoker.shared_resources_whitelist, root_build_dir),
+ "--r-text",
+ rebase_path(invoker.r_text_out_path, root_build_dir),
+ ]
+ }
inputs = [
_srcjar_path,
_packaged_resources_path,
@@ -1680,8 +1726,9 @@ if (enable_java_templates) {
invoker.output,
invoker.srcjar_path,
]
- public_deps =
- [ ":${_process_resources_target_name}" ] + invoker.post_process_deps
+ public_deps = [
+ ":${_process_resources_target_name}",
+ ]
}
}
}
@@ -1819,9 +1866,6 @@ if (enable_java_templates) {
# keystore_password: Keystore password.
template("finalize_apk") {
action(target_name) {
- deps = []
- script = "//build/android/gyp/finalize_apk.py"
- depfile = "$target_gen_dir/$target_name.d"
forward_variables_from(invoker,
[
"deps",
@@ -1830,10 +1874,13 @@ if (enable_java_templates) {
"testonly",
])
- sources = [
- invoker.input_apk_path,
- ]
+ script = "//build/android/gyp/finalize_apk.py"
+ _apksigner = "$android_sdk_build_tools/apksigner"
+ _zipalign = "$android_sdk_build_tools/zipalign"
inputs = [
+ _apksigner,
+ _zipalign,
+ invoker.input_apk_path,
invoker.keystore_path,
]
outputs = [
@@ -1844,14 +1891,14 @@ if (enable_java_templates) {
]
args = [
- "--depfile",
- rebase_path(depfile, root_build_dir),
- "--zipalign-path",
- rebase_path(zipalign_path, root_build_dir),
"--unsigned-apk-path",
rebase_path(invoker.input_apk_path, root_build_dir),
"--final-apk-path",
rebase_path(invoker.output_apk_path, root_build_dir),
+ "--apksigner-path",
+ rebase_path(_apksigner, root_build_dir),
+ "--zipalign-path",
+ rebase_path(_zipalign, root_build_dir),
"--key-path",
rebase_path(invoker.keystore_path, root_build_dir),
"--key-name",
@@ -1964,6 +2011,7 @@ if (enable_java_templates) {
package_apk(_package_target) {
forward_variables_from(invoker,
[
+ "apk_name",
"assets_build_config",
"native_lib_placeholders",
"native_libs_filearg",
@@ -1983,10 +2031,6 @@ if (enable_java_templates) {
dex_path = _dex_path
}
- if (defined(invoker.apk_name)) {
- apk_name = invoker.apk_name
- }
-
output_apk_path = _packaged_apk_path
}
@@ -2164,6 +2208,7 @@ if (enable_java_templates) {
outputs = [
invoker.javac_jar_path,
invoker.javac_jar_path + ".md5.stamp",
+ invoker.javac_jar_path + ".info",
]
inputs = invoker.java_files + _java_srcjars + [ _build_config ]
if (invoker.java_files != []) {
@@ -2181,7 +2226,7 @@ if (enable_java_templates) {
"--java-srcjars=$_rebased_java_srcjars",
"--java-srcjars=@FileArg($_rebased_build_config:javac:srcjars)",
"--java-version=1.8",
- "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)",
+ "--full-classpath=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)",
"--interface-classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)",
"--processorpath=@FileArg($_rebased_build_config:javac:processor_classpath)",
"--processors=@FileArg($_rebased_build_config:javac:processor_classes)",
@@ -2223,6 +2268,15 @@ if (enable_java_templates) {
"--processorpath=$_rebased_errorprone_processorpath",
]
}
+ if (defined(invoker.apk_name)) {
+ # The supersize tool will search in this directory for each apk.
+ _apk_jar_info_path = "size-info/${invoker.apk_name}.apk.jar.info"
+ args += [
+ "--apk-jar-info-path",
+ _apk_jar_info_path,
+ ]
+ outputs += [ "$root_build_dir/$_apk_jar_info_path" ]
+ }
foreach(e, _provider_configurations) {
args += [ "--provider-configuration=" + rebase_path(e, root_build_dir) ]
}
@@ -2411,7 +2465,6 @@ if (enable_java_templates) {
"incremental_apk_path",
"incremental_install_json_path",
"proguard_enabled",
- "proguard_info",
"non_native_packed_relocations",
"shared_libraries_runtime_deps_file",
"secondary_abi_shared_libraries_runtime_deps_file",
@@ -2430,6 +2483,9 @@ if (enable_java_templates) {
build_config = _build_config
is_prebuilt = _is_prebuilt
possible_config_deps = _accumulated_deps
+ if (defined(apk_under_test)) {
+ possible_config_deps += [ apk_under_test ]
+ }
supports_android = _supports_android
requires_android = _requires_android
bypass_platform_checks = defined(invoker.bypass_platform_checks) &&
@@ -2461,6 +2517,11 @@ if (enable_java_templates) {
}
}
_accumulated_deps += [ ":$_build_config_target_name" ]
+
+ # Don't need to depend on the apk-under-test to be packaged.
+ if (defined(invoker.apk_under_test)) {
+ _accumulated_deps += [ "${invoker.apk_under_test}__java" ]
+ }
if (defined(invoker.android_manifest_dep)) {
_accumulated_deps += [ invoker.android_manifest_dep ]
}
@@ -2499,6 +2560,9 @@ if (enable_java_templates) {
requires_android = _requires_android
deps = _accumulated_deps
javac_jar_path = _javac_jar_path
+ if (defined(invoker.apk_name)) {
+ apk_name = invoker.apk_name
+ }
}
_accumulated_deps += [ ":$_compile_java_target" ]
@@ -2541,6 +2605,7 @@ if (enable_java_templates) {
"alternative_android_sdk_ijar_dep",
"alternative_android_sdk_jar",
"jar_excluded_patterns",
+ "jar_included_patterns",
])
supports_android = _supports_android
enable_build_hooks = _enable_build_hooks
diff --git a/chromium/build/config/android/rules.gni b/chromium/build/config/android/rules.gni
index 0704250c7bc..7678f686f6e 100644
--- a/chromium/build/config/android/rules.gni
+++ b/chromium/build/config/android/rules.gni
@@ -1181,7 +1181,12 @@ if (enable_java_templates) {
if (!defined(srcjar_deps)) {
srcjar_deps = []
}
- srcjar_deps += [ ":$_process_resources_target" ]
+ srcjar_deps += [
+ ":$_process_resources_target",
+
+ # This dep is required for any targets that depend on //base:base_java.
+ "//base:base_build_config_gen",
+ ]
}
test_runner_script(_test_runner_target_name) {
@@ -1230,8 +1235,10 @@ if (enable_java_templates) {
# enable_incremental_javac_override: Overrides the global
# enable_incremental_javac.
#
- # jar_excluded_patterns: List of patterns of .class files to exclude from the
- # final jar.
+ # jar_excluded_patterns: List of patterns of .class files to exclude.
+ # jar_included_patterns: List of patterns of .class files to include.
+ # When omitted, all classes not matched by jar_excluded_patterns are
+ # included. When specified, all non-matching .class files are stripped.
#
# output_name: File name for the output .jar (not including extension).
# Defaults to the input .jar file name.
@@ -1268,7 +1275,7 @@ if (enable_java_templates) {
# ":foo_generated_enum"
# ]
# jar_excluded_patterns = [
- # "*/FooService.class", "*/FooService\$*.class"
+ # "*/FooService.class", "org/chromium/FooService\$*.class"
# ]
# }
template("java_library") {
@@ -1382,9 +1389,6 @@ if (enable_java_templates) {
requires_android = _requires_android
possible_config_deps = _deps
build_config = _build_config
- if (_proguard_enabled) {
- proguard_info = "${invoker.output}.info"
- }
}
_deps += [ ":$_build_config_target_name" ]
@@ -1406,9 +1410,9 @@ if (enable_java_templates) {
output_jar_path = invoker.output
args = [
- "--proguard-configs=@FileArg($_rebased_build_config:proguard:all_configs)",
+ "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
"--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)",
- "--classpath=@FileArg($_rebased_build_config:proguard:extra_jars)",
+ "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)",
]
if (defined(invoker.proguard_config_exclusions)) {
_rebased_proguard_config_exclusions =
@@ -1480,6 +1484,7 @@ if (enable_java_templates) {
# Currently supports:
# * AndroidManifest.xml
# * classes.jar
+ # * jni/
# * res/
# * R.txt
# * proguard.txt
@@ -1487,13 +1492,13 @@ if (enable_java_templates) {
# * public.txt
# * annotations.zip
# * assets/
- # * jni/
# See: https://developer.android.com/studio/projects/android-library.html#aar-contents
#
# Variables:
# output: Path to the output .aar.
# proguard_configs: List of proguard configs (optional).
# android_manifest: Path to AndroidManifest.xml (optional).
+ # native_libraries: list of native libraries (optional).
#
# Example
# dist_aar("my_aar") {
@@ -1546,7 +1551,7 @@ if (enable_java_templates) {
"--jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)",
"--dependencies-res-zips=@FileArg($_rebased_build_config:resources:dependency_zips)",
"--r-text-files=@FileArg($_rebased_build_config:resources:extra_r_text_files)",
- "--proguard-configs=@FileArg($_rebased_build_config:proguard:all_configs)",
+ "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
]
if (defined(invoker.android_manifest)) {
args += [
@@ -1554,6 +1559,16 @@ if (enable_java_templates) {
rebase_path(invoker.android_manifest, root_build_dir),
]
}
+ if (defined(invoker.native_libraries) && invoker.native_libraries != []) {
+ inputs += invoker.native_libraries
+ _rebased_native_libraries =
+ rebase_path(invoker.native_libraries, root_build_dir)
+
+ args += [
+ "--native-libraries=$_rebased_native_libraries",
+ "--abi=$android_app_abi",
+ ]
+ }
}
}
@@ -1593,7 +1608,7 @@ if (enable_java_templates) {
# ":foo_generated_enum"
# ]
# jar_excluded_patterns = [
- # "*/FooService.class", "*/FooService\$*.class"
+ # "*/FooService.class", "org/chromium/FooService\$*.class"
# ]
# }
template("android_library") {
@@ -1641,6 +1656,64 @@ if (enable_java_templates) {
}
}
+ # Creates org/chromium/base/BuildConfig.java
+ # This doesn't really belong in //build since it genates a file for //base.
+ # However, we don't currently have a better way to include this file in all
+ # apks that depend on //base:base_java.
+ #
+ # Variables:
+ # use_final_fields: True to use final fields. All other variables are
+ # ignored when this is false.
+ # build_config: Path to build_config used for locale list
+ # enable_multidex: Value for ENABLE_MULTIDEX.
+ # firebase_app_id: Value for FIREBASE_APP_ID.
+ #
+ template("generate_build_config_srcjar") {
+ java_cpp_template(target_name) {
+ package_path = "org/chromium/base"
+ sources = [
+ "//base/android/java/templates/BuildConfig.template",
+ ]
+ defines = []
+
+ # TODO(agrieve): These two are not target-specific and should be moved
+ # to BuildHooks.java.
+ # Set these even when !use_final_fields so that they have correct default
+ # values withnin junit_binary().
+ if (is_java_debug || dcheck_always_on) {
+ defines += [ "_DCHECK_IS_ON" ]
+ }
+ if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) {
+ defines += [ "_IS_UBSAN" ]
+ }
+
+ if (invoker.use_final_fields) {
+ forward_variables_from(invoker,
+ [
+ "deps",
+ "testonly",
+ ])
+ defines += [ "USE_FINAL" ]
+ if (invoker.enable_multidex) {
+ defines += [ "ENABLE_MULTIDEX" ]
+ }
+ inputs = [
+ invoker.build_config,
+ ]
+ _rebased_build_config = rebase_path(invoker.build_config)
+ defines += [
+ "COMPRESSED_LOCALE_LIST=" +
+ "@FileArg($_rebased_build_config:compressed_locales_java_list)",
+ "UNCOMPRESSED_LOCALE_LIST=" +
+ "@FileArg($_rebased_build_config:uncompressed_locales_java_list)",
+ ]
+ if (defined(invoker.firebase_app_id)) {
+ defines += [ "_FIREBASE_APP_ID=${invoker.firebase_app_id}" ]
+ }
+ }
+ }
+ }
+
# Declare an Android apk target
#
# This target creates an Android APK containing java code, resources, assets,
@@ -1680,6 +1753,8 @@ if (enable_java_templates) {
# generate_buildconfig_java: If defined and false, skip generating the
# BuildConfig java class describing the build configuration. The default
# is true for non-test APKs.
+ # firebase_app_id: The value for BuildConfig.FIREBASE_APP_ID (optional).
+ # Identifier is sent with crash reports to enable Java stack deobfuscation.
# requires_sdk_api_level_23: If defined and true, the apk is intended for
# installation only on Android M or later. In these releases the system
# linker does relocation unpacking, so we can enable it unconditionally.
@@ -1950,31 +2025,10 @@ if (enable_java_templates) {
_android_manifest =
"$target_gen_dir/${_template_name}_manifest/AndroidManifest.xml"
_merge_manifest_target = "${_template_name}__merge_manifests"
- action(_merge_manifest_target) {
- script = "//build/android/gyp/merge_manifest.py"
- depfile = "$target_gen_dir/$target_name.d"
-
- sources = [
- _android_root_manifest,
- ]
-
- outputs = [
- _android_manifest,
- ]
-
- args = [
- "--depfile",
- rebase_path(depfile, root_build_dir),
- "--build-vars",
- rebase_path(android_build_vars, root_build_dir),
- "--root-manifest",
- rebase_path(_android_root_manifest, root_build_dir),
- "--output",
- rebase_path(_android_manifest, root_build_dir),
- "--extras",
- "@FileArg($_rebased_build_config:extra_android_manifests)",
- ]
-
+ merge_manifests(_merge_manifest_target) {
+ input_manifest = _android_root_manifest
+ output_manifest = _android_manifest
+ build_config = _build_config
deps = _android_root_manifest_deps + [ ":$_build_config_target" ]
}
@@ -2004,8 +2058,6 @@ if (enable_java_templates) {
version_name = _version_name
if (defined(invoker.post_process_package_resources_script)) {
post_process_script = invoker.post_process_package_resources_script
- post_process_deps = invoker.post_process_package_resources_deps
- post_process_args = invoker.post_process_package_resources_args
}
srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
r_text_out_path = "${target_gen_dir}/${target_name}_R.txt"
@@ -2070,6 +2122,10 @@ if (enable_java_templates) {
"--output=$_rebased_ordered_libraries_json",
"--runtime-deps=" + rebase_path(_runtime_deps_file, root_build_dir),
]
+ if (defined(invoker.dont_load_shared_libraries)) {
+ args += [ "--exclude-shared-libraries=" +
+ invoker.dont_load_shared_libraries ]
+ }
}
java_cpp_template("${_template_name}__native_libraries_java") {
@@ -2115,31 +2171,14 @@ if (enable_java_templates) {
}
if (_generate_buildconfig_java) {
- java_cpp_template("${_template_name}__build_config_java") {
- package_path = "org/chromium/base"
- sources = [
- "//base/android/java/templates/BuildConfig.template",
- ]
+ generate_build_config_srcjar("${_template_name}__build_config_java") {
+ forward_variables_from(invoker, [ "firebase_app_id" ])
+ use_final_fields = true
+ build_config = _build_config
+ enable_multidex = _enable_multidex
deps = [
":$_build_config_target",
]
-
- defines = []
- if (_enable_multidex) {
- defines += [ "ENABLE_MULTIDEX" ]
- }
- if (is_java_debug || dcheck_always_on) {
- defines += [ "_DCHECK_IS_ON" ]
- }
- if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) {
- defines += [ "_IS_UBSAN" ]
- }
- defines += [
- "COMPRESSED_LOCALE_LIST=" +
- "@FileArg($_rebased_build_config:compressed_locales_java_list)",
- "UNCOMPRESSED_LOCALE_LIST=" +
- "@FileArg($_rebased_build_config:uncompressed_locales_java_list)",
- ]
}
_srcjar_deps += [ ":${_template_name}__build_config_java" ]
}
@@ -2148,6 +2187,7 @@ if (enable_java_templates) {
java_library_impl(_java_target) {
forward_variables_from(invoker,
[
+ "apk_name",
"android_manifest",
"android_manifest_dep",
"apk_under_test",
@@ -2169,16 +2209,12 @@ if (enable_java_templates) {
dex_path = _lib_dex_path
apk_path = _final_apk_path
- if (defined(invoker.apk_under_test)) {
- deps += [ "${invoker.apk_under_test}" ]
- }
incremental_allowed = _incremental_allowed
incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk"
incremental_install_json_path = _incremental_install_json_path
proguard_enabled = _proguard_enabled
if (_proguard_enabled) {
- proguard_info = "$_proguard_output_jar_path.info"
proguard_configs = [ _generated_proguard_config ]
if (defined(invoker.proguard_configs)) {
proguard_configs += invoker.proguard_configs
@@ -2241,9 +2277,9 @@ if (enable_java_templates) {
output_jar_path = _proguard_output_jar_path
args = [
- "--proguard-configs=@FileArg($_rebased_build_config:proguard:all_configs)",
+ "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
"--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)",
- "--classpath=@FileArg($_rebased_build_config:proguard:extra_jars)",
+ "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)",
]
if (defined(invoker.proguard_config_exclusions)) {
_rebased_proguard_config_exclusions =
@@ -2252,19 +2288,6 @@ if (enable_java_templates) {
"--proguard-config-exclusions=$_rebased_proguard_config_exclusions",
]
}
-
- if (defined(invoker.apk_under_test)) {
- deps += [
- "${invoker.apk_under_test}__build_config",
- "${invoker.apk_under_test}__proguard",
- ]
- _apk_under_test_build_config =
- get_label_info(invoker.apk_under_test, "target_gen_dir") + "/" +
- get_label_info(invoker.apk_under_test, "name") + ".build_config"
- _rebased_apk_under_test_build_config =
- rebase_path(_apk_under_test_build_config, root_build_dir)
- args += [ "--tested-apk-info=@FileArg($_rebased_apk_under_test_build_config:deps_info:proguard_info)" ]
- }
}
_dex_sources = [ _proguard_output_jar_path ]
_dex_deps = [ ":$_proguard_target" ]
@@ -2569,7 +2592,7 @@ if (enable_java_templates) {
_apk_operations = []
_incremental_apk_operations = []
- # Generate apk opeartion related script.
+ # Generate apk operation related script.
if (!defined(invoker.create_apk_script) || invoker.create_apk_script) {
_apk_operations_target_name = "${target_name}__apk_operations"
action(_apk_operations_target_name) {
@@ -2771,6 +2794,9 @@ if (enable_java_templates) {
"//tools/android/forwarder2",
"//tools/android/md5sum",
]
+ if (defined(invoker.apk_under_test)) {
+ data_deps += [ invoker.apk_under_test ]
+ }
if (defined(invoker.additional_apks)) {
data_deps += invoker.additional_apks
}
@@ -2922,7 +2948,6 @@ if (enable_java_templates) {
":${target_name}__runtime_deps",
":${target_name}__secondary_abi_runtime_deps",
"//base:base_java",
- "//testing/android/appurify_support:appurify_support_java",
"//testing/android/reporter:reporter_java",
]
data_deps += [
@@ -3246,6 +3271,7 @@ if (enable_java_templates) {
forward_variables_from(invoker,
[
"jar_excluded_patterns",
+ "jar_included_patterns",
"requires_android",
])
deps = [
@@ -3270,6 +3296,7 @@ if (enable_java_templates) {
"deps",
"input_jars_paths",
"jar_excluded_patterns",
+ "jar_included_patterns",
"proguard_configs",
"requires_android",
"testonly",
@@ -3318,3 +3345,44 @@ if (enable_java_templates) {
}
}
}
+
+# Compatibility wrapper to toggle android_deps usage for a dependency.
+#
+# This target creates a wrapper for a dependency allowing it to be loaded
+# either from //third_party/android_deps or from an existing //third_party
+# (or other) target.
+#
+# Variables
+# fallback_target: Target to use when the android_deps repo is not enabled.
+# android_deps_target_name: Name of the target from the android_deps repo to
+# use when the repo is enabled. Is not set, the wrapper's target name will
+# be used instead.
+#
+# Example
+# prebuilt_wrapper("android_support_multidex_java") {
+# android_deps_target_name = "com_android_support_multidex_java"
+# fallback_target = "$android_support_library_package:$target_name"
+# }
+template("prebuilt_wrapper") {
+ if (defined(invoker.android_deps_target_name)) {
+ _resolved_android_deps_target_name = invoker.android_deps_target_name
+ } else {
+ _resolved_android_deps_target_name = target_name
+ }
+
+ if (enable_android_deps_repository) {
+ _resolved_target =
+ "//third_party/android_deps:${_resolved_android_deps_target_name}"
+ assert(invoker.fallback_target != "") # Mark as used.
+ } else {
+ _resolved_target = "${invoker.fallback_target}"
+ assert(_resolved_android_deps_target_name != "") # Mark as used.
+ }
+
+ java_group(target_name) {
+ forward_variables_from(invoker, [ "testonly" ])
+ deps = [
+ _resolved_target,
+ ]
+ }
+}
diff --git a/chromium/build/config/arm.gni b/chromium/build/config/arm.gni
index 29434eba92f..abd4dd02fdc 100644
--- a/chromium/build/config/arm.gni
+++ b/chromium/build/config/arm.gni
@@ -3,6 +3,7 @@
# found in the LICENSE file.
import("//build/config/v8_target_cpu.gni")
+import("//build/secondary/third_party/catapult/devil/devil_arm.gni")
# These are primarily relevant in current_cpu == "arm" contexts, where
# ARM code is being compiled. But they can also be relevant in the
@@ -79,8 +80,15 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") {
}
if (arm_float_abi == "") {
- if (current_os == "android" || target_os == "android") {
+ if (current_os == "android") {
arm_float_abi = "softfp"
+ } else if (target_os == "android") {
+ if (build_devil_arm_deps) {
+ # Raspberry Pis require "hard"
+ arm_float_abi = "hard"
+ } else {
+ arm_float_abi = "softfp"
+ }
} else if (current_os == "linux" && target_cpu != v8_target_cpu) {
# Default to the same as Android for V8 simulator builds.
arm_float_abi = "softfp"
diff --git a/chromium/build/config/c++/c++.gni b/chromium/build/config/c++/c++.gni
index a9f627f997a..85ffde0ea00 100644
--- a/chromium/build/config/c++/c++.gni
+++ b/chromium/build/config/c++/c++.gni
@@ -36,7 +36,7 @@ declare_args() {
use_custom_libcxx =
use_custom_libcxx || (use_custom_libcxx_for_host && current_cpu == host_cpu)
+use_custom_libcxx = use_custom_libcxx && !is_nacl
libcxx_prefix = "//buildtools/third_party/libc++/trunk"
libcxxabi_prefix = "//buildtools/third_party/libc++abi/trunk"
-libunwind_prefix = "//buildtools/third_party/libunwind/trunk"
diff --git a/chromium/build/config/clang/clang.gni b/chromium/build/config/clang/clang.gni
index 7026f65207f..2c2d76fd4b2 100644
--- a/chromium/build/config/clang/clang.gni
+++ b/chromium/build/config/clang/clang.gni
@@ -4,10 +4,12 @@
import("//build/toolchain/toolchain.gni")
+default_clang_base_path = "//third_party/llvm-build/Release+Asserts"
+
declare_args() {
# Indicates if the build should use the Chrome-specific plugins for enforcing
# coding guidelines, etc. Only used when compiling with Clang.
clang_use_chrome_plugins = is_clang && !is_nacl && !use_xcode_clang
- clang_base_path = "//third_party/llvm-build/Release+Asserts"
+ clang_base_path = default_clang_base_path
}
diff --git a/chromium/build/config/compiler/BUILD.gn b/chromium/build/config/compiler/BUILD.gn
index 2673c6a7988..9a10137aa40 100644
--- a/chromium/build/config/compiler/BUILD.gn
+++ b/chromium/build/config/compiler/BUILD.gn
@@ -3,11 +3,14 @@
# found in the LICENSE file.
import("//build/config/android/config.gni")
+import("//build/config/c++/c++.gni")
import("//build/config/chrome_build.gni")
import("//build/config/chromecast_build.gni")
+import("//build/config/clang/clang.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/coverage/coverage.gni")
import("//build/config/host_byteorder.gni")
+import("//build/config/ui.gni")
import("//build/toolchain/cc_wrapper.gni")
import("//build/toolchain/toolchain.gni")
import("//build_overrides/build.gni")
@@ -104,21 +107,12 @@ declare_args() {
# Path to an AFDO profile to use while building with clang, if any. Empty
# implies none.
- #
- # Please note that you need to be very careful about changing your profile at
- # the moment. See the `BUG(gbiv)` comment later in this file.
clang_sample_profile_path = ""
# Some configurations have default sample profiles. If this is true and
# clang_sample_profile_path is empty, we'll fall back to the default.
clang_use_default_sample_profile =
is_official_build && defined(clang_default_afdo_profile)
-
- # Whether to assert to the compiler that the AFDO profiles are accurate.
- # True will cause the compiler to optimize uncovered functions for size
- # (despite passing -O2 or -O3), which reduces binary size by quite a bit,
- # potentially at the cost of some performance.
- clang_sample_profile_is_accurate = true
}
declare_args() {
@@ -126,13 +120,25 @@ declare_args() {
use_cxx11_on_android = use_cxx11
}
-if (is_clang) {
- update_args = [ "--print-revision" ]
- if (llvm_force_head_revision) {
- update_args += [ "--llvm-force-head-revision" ]
- }
- clang_revision =
- exec_script("//tools/clang/scripts/update.py", update_args, "trim string")
+declare_args() {
+ # Set to true to use icf, Identical Code Folding.
+ #
+ # icf=all is broken in older golds, see
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=17704
+ # See also https://crbug.com/663886
+ # `linux_use_bundled_binutils` is to avoid breaking Linux distros which may
+ # still have a buggy gold.
+ # chromeos binutils has been patched with the fix, so always use icf there.
+ # The bug only affects x86 and x64, so we can still use ICF when targeting
+ # other architectures.
+ #
+ # lld doesn't have the bug.
+ use_icf =
+ is_posix && !using_sanitizer && !(is_android && use_order_profiling) &&
+ ((use_lld && !is_nacl) ||
+ (use_gold &&
+ ((!is_android && linux_use_bundled_binutils) || is_chromeos ||
+ !(current_cpu == "x86" || current_cpu == "x64"))))
}
# Apply the default logic for these values if they were not set explicitly.
@@ -179,6 +185,7 @@ config("compiler") {
ldflags = []
defines = []
configs = []
+ inputs = []
# System-specific flags. If your compiler flags apply to one of the
# categories here, add it to the associated file to keep this shared config
@@ -215,34 +222,6 @@ config("compiler") {
# --------------------------------
cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204
- # AFDO on clang. Clang doesn't seem to suffer from the bug that caused GCC's
- # AFDO to be split into its own config, so this isn't part of that config.
- #
- # Since we only profile the browser, skip it if we're building host tools.
- #
- # XXX(gbiv): There is currently *no* dependency between the profile we use
- # and the compilations/links that we do. So, if the profile gets updated,
- # the user has to manually clean build artifacts. CL:827560 should fix this
- # by allowing us to specify `inputs` here, but until then, the only "good"
- # workaround is changing your profile name each time you update the profile.
- if (is_clang && current_toolchain == default_toolchain) {
- _sample_path = ""
- if (clang_sample_profile_path != "") {
- _sample_path = clang_sample_profile_path
- } else if (clang_use_default_sample_profile) {
- assert(defined(clang_default_afdo_profile),
- "This platform has no default sample profiles")
- _sample_path = clang_default_afdo_profile
- }
-
- if (_sample_path != "") {
- cflags += [ "-fprofile-sample-use=${_sample_path}" ]
- if (clang_sample_profile_is_accurate) {
- cflags += [ "-fprofile-sample-accurate" ]
- }
- }
- }
-
# Stack protection.
if (is_mac) {
# The strong variant of the stack protector significantly increases
@@ -433,20 +412,8 @@ config("compiler") {
ldflags += [ "-fuse-ld=bfd" ]
}
- if (is_posix && (use_gold || (use_lld && !is_nacl)) && !using_sanitizer &&
- !(is_android && use_order_profiling)) {
- # TODO(thakis): Remove `!is_android` below once NDK gold has been rolled
- # with the fix for https://sourceware.org/bugzilla/show_bug.cgi?id=17704
- # merged. See also https://crbug.com/663886
- # `linux_use_bundled_binutils` is to avoid breaking Linux distros which may
- # still have a buggy gold.
- # chromeos binutils has been patched with the fix, so always use icf there.
- # The bug only affects x86 and x64, so we can still use ICF when targeting
- # other architectures.
- if ((!is_android && linux_use_bundled_binutils) || is_chromeos ||
- !(current_cpu == "x86" || current_cpu == "x64")) {
- ldflags += [ "-Wl,--icf=all" ]
- }
+ if (use_icf) {
+ ldflags += [ "-Wl,--icf=all" ]
}
if (linux_use_bundled_binutils) {
@@ -489,8 +456,17 @@ config("compiler") {
# clang-cl (used if is_win) doesn't expose this flag.
# Currently disabled for nacl since its toolchain lacks this flag (too old).
# TODO(zforman): Once nacl's toolchain is updated, remove check.
- if (is_clang && is_linux && strip_absolute_paths_from_debug_symbols) {
- absolute_path = rebase_path("//.")
+ if (is_clang && !is_nacl && !is_win && !is_mac && !is_ios &&
+ strip_absolute_paths_from_debug_symbols) {
+ # This is resolved to path like "$HOME/chromium/src/out/Release".
+ # If debug option is given, clang includes $cwd in debug info.
+ # In such build, this flag generates reproducible obj files
+ # even we use build directory like "out/feature_a" and "out/feature_b" if
+ # we build same files with same compile flag other than this.
+ # Other paths are already givne in relative, no need to normalize it by
+ # using -fdebug-prefix-map.
+ absolute_path = rebase_path(root_out_dir)
+
cflags += [ "-fdebug-prefix-map=$absolute_path=." ]
}
@@ -562,6 +538,13 @@ config("compiler") {
"gold plugin only supported with ChromeOS")
cflags += [ "-flto=thin" ]
+
+ # Limit the size of the ThinLTO cache to the lesser of 10% of available disk
+ # space, 10GB and 100000 files.
+ if (use_lld) {
+ cache_policy =
+ "cache_size=10%:cache_size_bytes=10g:cache_size_files=100000"
+ }
if (is_win) {
# This is a straight translation of the non-Windows flags below.
ldflags += [
@@ -569,7 +552,7 @@ config("compiler") {
"/opt:lldltojobs=8",
"/lldltocache:" +
rebase_path("$root_out_dir/thinlto-cache", root_build_dir),
- "/lldltocachepolicy:cache_size=10%",
+ "/lldltocachepolicy:$cache_policy",
]
} else {
ldflags += [ "-flto=thin" ]
@@ -582,20 +565,17 @@ config("compiler") {
"-Wl,--thinlto-jobs=8",
"-Wl,--thinlto-cache-dir=" +
rebase_path("$root_out_dir/thinlto-cache", root_build_dir),
-
- # Limit the size of the ThinLTO cache to 10% of available disk space
- # TODO(pcc): Change the limit from a percentage to an absolute size
- # (10-20GB) once that feature lands in LLVM.
- "-Wl,--thinlto-cache-policy,cache_size=10%",
+ "-Wl,--thinlto-cache-policy,$cache_policy",
]
} else {
ldflags += [ "-Wl,-plugin-opt,jobs=8" ]
+ not_needed([ "cache_policy" ])
}
}
# Disable optimization for now because they increase binary size by too
# much.
- if (use_lld && (is_android || is_linux)) {
+ if (use_lld && (is_android || (is_linux && !is_chromeos))) {
ldflags += [ "-Wl,--lto-O0" ]
}
@@ -608,6 +588,15 @@ config("compiler") {
if (is_mac) {
ldflags += [ "-Wl,-all_load" ]
}
+
+ # This flag causes LTO to create an .ARM.attributes section with the correct
+ # architecture. This is necessary because LLD will refuse to link a program
+ # unless the architecture revision in .ARM.attributes is sufficiently new.
+ # TODO(pcc): The contents of .ARM.attributes should be based on the
+ # -march flag passed at compile time (see llvm.org/pr36291).
+ if (current_cpu == "arm") {
+ ldflags += [ "-march=$arm_arch" ]
+ }
}
# Pass the same C/C++ flags to the objective C/C++ compiler.
@@ -841,11 +830,18 @@ config("compiler_cpu_abi") {
]
}
} else if (mips_arch_variant == "r2") {
- cflags += [
- "-mips64r2",
- "-Wa,-mips64r2",
- ]
ldflags += [ "-mips64r2" ]
+ if (is_clang) {
+ cflags += [
+ "-march=mips64el",
+ "-mcpu=mips64r2",
+ ]
+ } else {
+ cflags += [
+ "-mips64r2",
+ "-Wa,-mips64r2",
+ ]
+ }
} else if (mips_arch_variant == "loongson3") {
defines += [ "_MIPS_ARCH_LOONGSON" ]
cflags += [
@@ -923,8 +919,13 @@ config("compiler_cpu_abi") {
cflags += [ "-m32" ]
ldflags += [ "-m32" ]
} else if (v8_current_cpu == "ppc64") {
- cflags += [ "-m64" ]
- ldflags += [ "-m64" ]
+ if (current_os == "aix") {
+ cflags += [ "-maix64" ]
+ ldflags += [ "-maix64" ]
+ } else {
+ cflags += [ "-m64" ]
+ ldflags += [ "-m64" ]
+ }
}
} else if (current_cpu == "s390x") {
if (v8_current_cpu == "s390" && host_byteorder == "little") {
@@ -998,7 +999,18 @@ config("clang_stackrealign") {
}
config("clang_revision") {
- if (is_clang) {
+ if (is_clang && clang_base_path == default_clang_base_path) {
+ update_args = [
+ "--print-revision",
+ "--verify-version=$clang_version",
+ ]
+ if (llvm_force_head_revision) {
+ update_args += [ "--llvm-force-head-revision" ]
+ }
+ clang_revision = exec_script("//tools/clang/scripts/update.py",
+ update_args,
+ "trim string")
+
# This is here so that all files get recompiled after a clang roll and
# when turning clang on or off. (defines are passed via the command line,
# and build system rebuild things when their commandline changes). Nothing
@@ -1326,18 +1338,8 @@ config("default_warnings") {
# TODO(thakis): https://crbug.com/753973
"-Wno-enum-compare-switch",
- # TODO(hans): https://crbug.com/763392
- "-Wno-tautological-unsigned-zero-compare",
-
# TODO(hans): https://crbug.com/766891
"-Wno-null-pointer-arithmetic",
-
- # TODO(hans): https://crbug.com/767059
- # Disable -Wtautological-constant-compare (and implicitly also
- # -Wtautological-unsigned-enum-zero-compare), but re-enable
- # useful sub-diagnostics in that group.
- "-Wno-tautological-constant-compare",
- "-Wtautological-constant-out-of-range-compare",
]
} else if (use_xcode_clang) {
cflags += [
@@ -1370,7 +1372,7 @@ config("chromium_code") {
ldflags = [ "-Werror" ]
}
if (is_clang) {
- # Enable -Wextra for chromium_code when we control the compiler.
+ # Enable extra warnings for chromium_code when we control the compiler.
cflags += [ "-Wextra" ]
}
@@ -1403,6 +1405,19 @@ config("chromium_code") {
}
}
+ if (is_clang) {
+ cflags += [
+ # Warn on missing break statements at the end of switch cases.
+ # For intentional fallthrough, use FALLTHROUGH; from
+ # base/compiler_specific.h
+ "-Wimplicit-fallthrough",
+
+ # Thread safety analysis. See base/thread_annotations.h and
+ # https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
+ "-Wthread-safety",
+ ]
+ }
+
configs = [ ":default_warnings" ]
}
@@ -1491,7 +1506,9 @@ config("no_rtti") {
config("exceptions") {
if (is_win) {
# Enables exceptions in the STL.
- defines = [ "_HAS_EXCEPTIONS=1" ]
+ if (!use_custom_libcxx) {
+ defines = [ "_HAS_EXCEPTIONS=1" ]
+ }
cflags_cc = [ "/EHsc" ]
} else {
cflags_cc = [ "-fexceptions" ]
@@ -1502,7 +1519,14 @@ config("exceptions") {
config("no_exceptions") {
if (is_win) {
# Disables exceptions in the STL.
- defines = [ "_HAS_EXCEPTIONS=0" ]
+ # libc++ uses the __has_feature macro to control whether to use exceptions,
+ # so defining this macro is unnecessary. Defining _HAS_EXCEPTIONS to 0 also
+ # breaks libc++ because it depends on MSVC headers that only provide certain
+ # declarations if _HAS_EXCEPTIONS is 1. Those MSVC headers do not use
+ # exceptions, despite being conditional on _HAS_EXCEPTIONS.
+ if (!use_custom_libcxx) {
+ defines = [ "_HAS_EXCEPTIONS=0" ]
+ }
} else {
cflags_cc = [ "-fno-exceptions" ]
cflags_objcc = cflags_cc
@@ -1571,7 +1595,6 @@ if (is_win) {
common_optimize_on_cflags = [
"/Ob2", # Both explicit and auto inlining.
"/Oy-", # Disable omitting frame pointers, must be after /O2.
- "/d2Zi+", # Improve debugging of optimized code.
"/Zc:inline", # Remove unreferenced COMDAT (faster links).
]
if (!is_asan) {
@@ -1656,7 +1679,8 @@ if (is_win) {
common_optimize_on_ldflags += [
# Specifically tell the linker to perform optimizations.
# See http://lwn.net/Articles/192624/ .
- "-Wl,-O1",
+ # -O2 enables string tail merge optimization in gold and lld.
+ "-Wl,-O2",
"-Wl,--gc-sections",
]
}
@@ -1877,15 +1901,44 @@ config("default_optimization") {
}
}
-# GCC supports a form of profile-guided optimization called AFDO, which
-# is used by ChromeOS in their official builds. However,
-# //base/allocator:tcmalloc currently doesn't work correctly with AFDO
-# so we provide separate config so that the flag can be disabled per-target.
-# TODO(crbug.com/633719): Remove this config once tcmalloc works with AFDO
-# or we remove tcmalloc or we stop using AFDO.
+_clang_sample_profile = ""
+if (is_clang && current_toolchain == default_toolchain) {
+ if (clang_sample_profile_path != "") {
+ _clang_sample_profile = clang_sample_profile_path
+ } else if (clang_use_default_sample_profile) {
+ assert(defined(clang_default_afdo_profile),
+ "This platform has no default sample profiles")
+ _clang_sample_profile = clang_default_afdo_profile
+ }
+}
+
+# Clang offers a way to assert that AFDO profiles are accurate, which causes it
+# to optimize functions not represented in a profile more aggressively for size.
+# This config can be toggled in cases where shaving off binary size hurts
+# performance too much.
+config("afdo_optimize_size") {
+ if (_clang_sample_profile != "" && sample_profile_is_accurate) {
+ cflags = [ "-fprofile-sample-accurate" ]
+ }
+}
+
+# GCC and clang support a form of profile-guided optimization called AFDO.
+# There are some targeted places that AFDO regresses (and an icky interaction
+# between //base/allocator:tcmalloc and AFDO on GCC), so we provide a separate
+# config to allow AFDO to be disabled per-target.
config("afdo") {
- if (auto_profile_path != "" && current_toolchain == default_toolchain) {
+ if (is_clang) {
+ if (_clang_sample_profile != "") {
+ cflags = [ "-fprofile-sample-use=${_clang_sample_profile}" ]
+ inputs = [
+ _clang_sample_profile,
+ ]
+ }
+ } else if (auto_profile_path != "" && current_toolchain == default_toolchain) {
cflags = [ "-fauto-profile=${auto_profile_path}" ]
+ inputs = [
+ auto_profile_path,
+ ]
}
}
@@ -1911,6 +1964,8 @@ config("symbols") {
}
if (is_win_fastlink) {
+ assert(!use_lld, "is_win_fastlink=true cannot be used with use_lld=true.")
+
# Tell VS 2015+ to create a PDB that references debug
# information in .obj and .lib files instead of copying
# it all. This flag is incompatible with /PROFILE
@@ -1980,6 +2035,8 @@ config("symbols") {
}
# Minimal symbols.
+# This config guarantees to hold symbol for stack trace which are shown to user
+# when crash happens in unittests running on buildbot.
config("minimal_symbols") {
if (is_win) {
# Linker symbols for backtraces only.
diff --git a/chromium/build/config/compiler/compiler.gni b/chromium/build/config/compiler/compiler.gni
index 6fddf3d0526..5fb5a3c91d2 100644
--- a/chromium/build/config/compiler/compiler.gni
+++ b/chromium/build/config/compiler/compiler.gni
@@ -54,22 +54,15 @@ declare_args() {
# Windows build.
use_incremental_wpo = false
- # Root directory that will store the MSVC link repro. This should only be
- # used for debugging purposes on the builders where a MSVC linker flakyness
- # has been observed. The targets for which a link repro should be generated
- # should add somethink like this to their configuration:
- # if (linkrepro_root_dir != "") {
- # ldflags = ["/LINKREPRO:" + linkrepro_root_dir + "/" + target_name]
- # }
- #
- # Note that doing a link repro uses a lot of disk space and slows down the
- # build, so this shouldn't be enabled on too many targets.
- #
- # See crbug.com/669854.
- linkrepro_root_dir = ""
-
# Whether or not we should use position independent code.
use_pic = true
+
+ # Whether we're using a sample profile collected on an architecture different
+ # than the one we're compiling for.
+ #
+ # It's currently not possible to collect AFDO profiles on anything but
+ # x86{,_64}.
+ using_mismatched_sample_profile = current_cpu != "x64" && current_cpu != "x86"
}
assert(!is_cfi || use_thin_lto, "CFI requires ThinLTO")
@@ -89,6 +82,14 @@ exclude_unwind_tables =
# explore favoring size over speed in this case as well.
optimize_for_size = is_android || is_ios
+declare_args() {
+ # Whether we should consider the profile we're using to be accurate. Accurate
+ # profiles have the benefit of (potentially substantial) binary size
+ # reductions, by instructing the compiler to optimize cold and uncovered
+ # functions heavily for size. This often comes at the cost of performance.
+ sample_profile_is_accurate = optimize_for_size
+}
+
# Determine whether to enable or disable frame pointers, based on the platform
# and build arguments.
if (is_mac || is_ios || is_linux) {
@@ -155,11 +156,12 @@ declare_args() {
# Linux or Fuchsia.
# TODO(pcc): Enable lld on more architectures on Linux. E.g. we probably need
# to fix some of crbug.com/742655 to enable it on ARM.
- # TODO(pcc): Remove !is_msan once crbug.com/772559 is fixed.
- use_lld = is_clang && !is_msan &&
+ use_lld = is_clang &&
((is_win && host_os != "win") || is_fuchsia ||
(use_thin_lto && target_os != "chromeos") ||
- (is_linux && current_cpu == "x64" && target_os != "chromeos"))
+ (is_linux && current_cpu == "x64" && target_os != "chromeos") ||
+ (is_android && (current_cpu != "arm" || arm_version >= 7) &&
+ current_cpu != "mipsel" && current_cpu != "mips64el"))
}
declare_args() {
@@ -167,8 +169,9 @@ declare_args() {
use_gold =
(!use_lld && !(is_chromecast && is_linux &&
(current_cpu == "arm" || current_cpu == "mipsel")) &&
- (is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
- current_cpu == "arm" || current_cpu == "mipsel"))) ||
+ (is_linux &&
+ (current_cpu == "x64" || current_cpu == "x86" || current_cpu == "arm" ||
+ current_cpu == "mipsel" || current_cpu == "mips64el"))) ||
(is_android && (current_cpu == "x86" || current_cpu == "x64" ||
current_cpu == "arm" || current_cpu == "arm64"))
}
diff --git a/chromium/build/config/coverage/BUILD.gn b/chromium/build/config/coverage/BUILD.gn
index 36f2e66cf1a..6a6ec8877e2 100644
--- a/chromium/build/config/coverage/BUILD.gn
+++ b/chromium/build/config/coverage/BUILD.gn
@@ -10,6 +10,13 @@ config("default_coverage") {
"-fprofile-instr-generate",
"-fcoverage-mapping",
"-fno-use-cxa-atexit",
+
+ # Following experimental flags removes unused header functions from the
+ # coverage mapping data embedded in the test binaries, and the reduction
+ # of binary size enables building Chrome's large unit test targets on
+ # MacOS. Please refer to crbug.com/796290 for more details.
+ "-mllvm",
+ "-limited-coverage-experimental=true",
]
ldflags = [ "-fprofile-instr-generate" ]
}
diff --git a/chromium/build/config/coverage/coverage.gni b/chromium/build/config/coverage/coverage.gni
index 4ee7bedb81a..ee4734cfea9 100644
--- a/chromium/build/config/coverage/coverage.gni
+++ b/chromium/build/config/coverage/coverage.gni
@@ -16,11 +16,10 @@ declare_args() {
assert(!use_clang_coverage || is_clang,
"Clang Source-based Code Coverage requires clang.")
-assert(!(use_clang_coverage && is_debug && is_component_build),
- "If use_clang_coverage is true and is_debug is true (is_debug " +
- "defaults to true), then is_component_build must be false.$0x0A" +
- "Try adding is_component_build=false to your GN args.")
-
assert(
!(use_clang_coverage && is_component_build),
- "Clang Source-based Code Coverage is incompatible with is_component_build.")
+ "Clang Source-based Code Coverage requires \"is_component_build=false\" " +
+ "flag because: There will be no coverage info for libraries in " +
+ "component builds and \"is_component_build\" is set to true by " +
+ "\"is_debug\" unless it is explicitly set to false.$0x0ATry adding " +
+ "\"is_component_build=false\" to your GN args.")
diff --git a/chromium/build/config/fuchsia/BUILD.gn b/chromium/build/config/fuchsia/BUILD.gn
index b346cc05150..14c5b218813 100644
--- a/chromium/build/config/fuchsia/BUILD.gn
+++ b/chromium/build/config/fuchsia/BUILD.gn
@@ -33,11 +33,11 @@ config("compiler") {
# patches, we might want to make tools/clang/scripts/update.py build it
# and bundle it with the clang package instead of using the library from
# the SDK, https://crbug.com/724204
- # Note: Intentionally 6.0.0 instead of $clang_version because the clang
+ # Note: Intentionally 7.0.0 instead of $clang_version because the clang
# version of the toolchain_libs directory in the Fuchsia SDK can be
# different from the version of Chromium's clang.
"-resource-dir",
- rebase_path(fuchsia_sdk, root_build_dir) + "/toolchain_libs/clang/6.0.0",
+ rebase_path(fuchsia_sdk, root_build_dir) + "/toolchain_libs/clang/7.0.0",
# The stack defaults to 256k on Fuchsia (see
# https://fuchsia.googlesource.com/zircon/+/master/system/private/zircon/stack.h#9),
diff --git a/chromium/build/config/fuchsia/build_manifest.py b/chromium/build/config/fuchsia/build_manifest.py
new file mode 100644
index 00000000000..15f9cc1c47d
--- /dev/null
+++ b/chromium/build/config/fuchsia/build_manifest.py
@@ -0,0 +1,141 @@
+# Copyright 2018 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.
+
+"""Creates a archive manifest used for Fuchsia package generation.
+
+Arguments:
+ root_dir: The absolute path to the Chromium source tree root.
+
+ out_dir: The absolute path to the Chromium build directory.
+
+ app_name: The filename of the package's executable target.
+
+ runtime_deps: The path to the GN runtime deps file.
+
+ output_path: The path of the manifest file which will be written.
+"""
+
+import json
+import os
+import sys
+import tempfile
+
+
+# Path to file describing the services to be made available to the process.
+SANDBOX_POLICY_PATH = 'build/config/fuchsia/sandbox_policy'
+
+
+def MakePackagePath(file_path, roots):
+ """Computes a path for |file_path| that is relative to one of the directory
+ paths in |roots|.
+
+ file_path: The absolute file path to relativize.
+ roots: A list of absolute directory paths which may serve as a relative root
+ for |file_path|. At least one path must contain |file_path|.
+ Overlapping roots are permitted; the deepest matching root will be
+ chosen.
+
+ Examples:
+
+ >>> MakePackagePath('/foo/bar.txt', ['/foo/'])
+ 'bar.txt'
+
+ >>> MakePackagePath('/foo/dir/bar.txt', ['/foo/'])
+ 'dir/bar.txt'
+
+ >>> MakePackagePath('/foo/out/Debug/bar.exe', ['/foo/', '/foo/out/Debug/'])
+ 'bar.exe'
+ """
+
+ # Prevents greedily matching against a shallow path when a deeper, better
+ # matching path exists.
+ roots.sort(key=len, reverse=True)
+
+ for next_root in roots:
+ if not next_root.endswith(os.sep):
+ next_root += os.sep
+
+ if file_path.startswith(next_root):
+ relative_path = file_path[len(next_root):]
+
+ # TODO(fuchsia): The requirements for finding/loading .so are in flux, so
+ # this ought to be reconsidered at some point.
+ # See https://crbug.com/732897.
+ if file_path.endswith('.so'):
+ relative_path = 'lib/' + os.path.basename(relative_path)
+
+ return relative_path
+
+ raise Exception('Error: no matching root paths found for \'%s\'.' % file_path)
+
+
+def _GetStrippedPath(bin_path):
+ """Finds the stripped version of the binary |bin_path| in the build
+ output directory."""
+
+ if not '.unstripped' in bin_path:
+ raise Exception('File "%s" is not in an .unstripped directory.' % bin_path)
+
+ return os.path.normpath(os.path.join(bin_path,
+ os.path.pardir,
+ os.path.pardir,
+ os.path.basename(bin_path)))
+
+
+def _IsBinary(path):
+ """Checks if the file at |path| is an ELF executable by inspecting its FourCC
+ header."""
+
+ with open(path, 'rb') as f:
+ file_tag = f.read(4)
+ return file_tag == '\x7fELF'
+
+
+def BuildManifest(root_dir, out_dir, app_name, runtime_deps_file, output_path):
+ with open(output_path, 'w') as output:
+ # Process the runtime deps file for file paths, recursively walking
+ # directories as needed.
+ # runtime_deps may contain duplicate paths, so use a set for
+ # de-duplication.
+ expanded_files = set()
+ for next_path in open(runtime_deps_file, 'r'):
+ next_path = next_path.strip()
+ if os.path.isdir(next_path):
+ for root, _, files in os.walk(next_path):
+ for next_file in files:
+ if next_file.startswith('.'):
+ continue
+ expanded_files.add(os.path.abspath(os.path.join(root, next_file)))
+ else:
+ expanded_files.add(os.path.abspath(next_path))
+
+ # Format and write out the manifest contents.
+ app_found = False
+ for next_file in expanded_files:
+ if _IsBinary(next_file):
+ next_file = _GetStrippedPath(next_file)
+
+ in_package_path = MakePackagePath(os.path.join(out_dir, next_file),
+ [root_dir, out_dir])
+ if in_package_path == app_name:
+ in_package_path = 'bin/app'
+ app_found = True
+
+ # The source path is relativized so that it can be used on multiple
+ # environments with differing parent directory structures,
+ # e.g. builder bots and swarming clients.
+ output.write('%s=%s\n' % (in_package_path,
+ os.path.relpath(next_file, out_dir)))
+ if not app_found:
+ raise Exception('Could not locate executable inside runtime_deps.')
+ output.write('meta/sandbox=' +
+ os.path.relpath(os.path.join(root_dir, SANDBOX_POLICY_PATH),
+ out_dir))
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(BuildManifest(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4],
+ sys.argv[5]))
diff --git a/chromium/build/config/fuchsia/package.gni b/chromium/build/config/fuchsia/package.gni
new file mode 100644
index 00000000000..36effa60ee6
--- /dev/null
+++ b/chromium/build/config/fuchsia/package.gni
@@ -0,0 +1,85 @@
+# Copyright 2018 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.
+
+# Creates a Fuchsia .far package file.
+#
+# Parameters are:
+# package_name: The name of the package to build.
+# binary: The name of the executable which should be launched by the package.
+# Will be renamed as "bin/app" in the package contents.
+# deps: A list of targets whose output will be included in the package.
+template("package") {
+ pkg = {
+ package_name = target_name
+ forward_variables_from(invoker, "*")
+ }
+ assert(defined(pkg.binary))
+
+ _pkg_out_dir = "$root_out_dir/gen/" + get_label_info(pkg.package_name, "dir")
+ _runtime_deps_file = "$_pkg_out_dir/${pkg.package_name}.runtime_deps"
+ _manifest_file = "$_pkg_out_dir/${pkg.package_name}.archive_manifest"
+ _archive_file = "$_pkg_out_dir/${pkg.package_name}.far"
+ _write_manifest_target = "${pkg.package_name}__write_manifest"
+
+ # Generates a manifest file based on the GN runtime deps
+ # suitable for "far" tool consumption.
+ action(_write_manifest_target) {
+ forward_variables_from(invoker,
+ [
+ "deps",
+ "public_deps",
+ "testonly",
+ ])
+
+ script = "//build/config/fuchsia/build_manifest.py"
+
+ inputs = [
+ _runtime_deps_file,
+ ]
+
+ outputs = [
+ _manifest_file,
+ ]
+
+ data_deps = pkg.deps
+
+ args = [
+ rebase_path("//"),
+ rebase_path(root_out_dir),
+ pkg.binary,
+ rebase_path(_runtime_deps_file),
+ rebase_path(_manifest_file),
+ ]
+
+ write_runtime_deps = _runtime_deps_file
+ }
+
+ # Packages an executable target and its dependencies into a Fuchsia archive
+ # file (.far).
+ action(target_name) {
+ forward_variables_from(invoker, [ "testonly" ])
+
+ far_tool_path = "//third_party/fuchsia-sdk/tools/far"
+ script = "//build/gn_run_binary.py"
+
+ deps = [
+ ":$_write_manifest_target",
+ ]
+
+ outputs = [
+ _archive_file,
+ ]
+
+ data = [
+ _archive_file,
+ ]
+
+ args = [
+ rebase_path(far_tool_path, root_build_dir),
+ "create",
+ "--archive=" + rebase_path(_archive_file),
+ "--manifest=" + rebase_path(_manifest_file),
+ ]
+ }
+}
diff --git a/chromium/build/config/fuchsia/rules.gni b/chromium/build/config/fuchsia/rules.gni
index 4ecf71a89eb..8db998fd992 100644
--- a/chromium/build/config/fuchsia/rules.gni
+++ b/chromium/build/config/fuchsia/rules.gni
@@ -1,98 +1,150 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
+# Copyright 2018 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.
assert(is_fuchsia)
+import("//build/config/chromecast_build.gni")
+import("//build/config/fuchsia/package.gni")
+
template("generate_runner_script") {
# This runtime_deps file is used at runtime and thus cannot go in
# target_gen_dir.
- _target_dir_name = get_label_info(invoker.exe_target, "dir")
- _target_shortname = get_label_info(invoker.exe_target, "name")
- _runtime_deps_file = "$root_out_dir/gen.runtime/$_target_dir_name/$_target_shortname.runtime_deps"
- _runtime_deps_target = "${target_name}__write_deps"
+ _runtime_deps_target = "${target_name}__deps"
+ _runtime_deps_file =
+ "$root_out_dir/gen.runtime/" +
+ get_label_info(invoker.root_target_name, "dir") + "/" +
+ get_label_info(invoker.root_target_name, "name") + ".runtime_deps"
+ _pkg_dir = "$root_out_dir/gen/" + get_label_info(invoker.package_name, "dir")
+ _manifest_path = "$_pkg_dir/${invoker.package_name}.archive_manifest"
+ _package_path = "$_pkg_dir/${invoker.package_name}.far"
+ _runner_target = "${target_name}_runner"
+ _legacy_runner_target = "${target_name}_legacy_runner"
+
group(_runtime_deps_target) {
forward_variables_from(invoker,
[
- "data",
- "data_deps",
"deps",
- "public_deps",
"testonly",
])
+ data_deps = deps
write_runtime_deps = _runtime_deps_file
}
- action(target_name) {
+ # Build both types of runner scripts until the legacy scripts can be removed.
+ # TODO(crbug.com/805057): delete legacy runner scripts.
+ group(target_name) {
+ forward_variables_from(invoker, [ "testonly" ])
+ data_deps = [
+ ":${_legacy_runner_target}",
+ ]
+ data_deps += [ ":${_runner_target}" ]
+ }
+
+ action(_legacy_runner_target) {
forward_variables_from(invoker,
[
- "data_deps",
"deps",
"runner_script",
"target",
"testonly",
])
- if (!defined(deps)) {
- deps = []
- }
- if (!defined(data_deps)) {
- data_deps = []
- }
script = "//build/fuchsia/create_runner_script.py"
depfile = "$target_gen_dir/$target_name.d"
- data = []
- runner_args = []
-
outputs = [
invoker.generated_script,
]
- data += [
+
+ data = [
invoker.generated_script,
- "//build/fuchsia/exe_runner.py",
- "//build/fuchsia/test_runner.py",
- "//build/fuchsia/runner_common.py",
+ "//build/fuchsia/",
"//build/util/lib/",
"//third_party/fuchsia-sdk/",
+ _runtime_deps_file,
+ ]
+ data_deps = [
+ "//testing/buildbot/filters:fuchsia_filters",
+ ]
+
+ # Arguments used at build time by the runner script generator.
+ args = [
+ "--depfile",
+ rebase_path(depfile, root_build_dir),
+ "--script-output-path",
+ rebase_path(invoker.generated_script, root_build_dir),
+ "--exe-name",
+ rebase_path(invoker.exe_path, root_build_dir),
]
- runner_args += [
+ # Arguments used at runtime by the test runner.
+ if (defined(invoker.use_test_server) && invoker.use_test_server) {
+ args += [ "--enable-test-server" ]
+ }
+ args += [
"--runner-script",
runner_script,
"--output-directory",
rebase_path(root_build_dir, root_build_dir),
"--target-cpu",
target_cpu,
+ "--runtime-deps-path",
+ rebase_path(_runtime_deps_file, root_build_dir),
]
+ }
- deps += [
- ":$_runtime_deps_target",
+ action(_runner_target) {
+ forward_variables_from(invoker,
+ [
+ "runner_script",
+ "target",
+ "testonly",
+ ])
+
+ deps = [
"//testing/buildbot/filters:fuchsia_filters",
]
- data += [ _runtime_deps_file ]
- runner_args += [
- "--runtime-deps-path",
- rebase_path(_runtime_deps_file, root_build_dir),
+
+ _generated_script = "${invoker.generated_script}_v2"
+
+ script = "//build/fuchsia/runner_v2/create_runner_script.py"
+
+ outputs = [
+ _generated_script,
]
- if (defined(args)) {
- args = []
- }
+ data = [
+ _generated_script,
+ _manifest_path,
+ "//build/fuchsia/runner_v2/",
+ "//build/util/lib/",
+ "//third_party/fuchsia-sdk/",
+ ]
+
+ # Arguments used at build time by the runner script generator.
args = [
- "--depfile",
- rebase_path(depfile, root_build_dir),
"--script-output-path",
- rebase_path(invoker.generated_script, root_build_dir),
- "--exe-name",
- _target_shortname,
+ rebase_path(_generated_script, root_build_dir, root_out_dir),
+ "--package",
+ rebase_path(_package_path, root_out_dir, root_build_dir),
+ "--package-manifest",
+ rebase_path(_manifest_path, root_out_dir, root_build_dir),
]
if (defined(invoker.use_test_server) && invoker.use_test_server) {
args += [ "--enable-test-server" ]
}
- args += runner_args
+ # Arguments used at runtime by the test runner.
+ args += [
+ "--runner-script",
+ runner_script,
+ "--output-directory",
+ rebase_path(root_build_dir, root_build_dir),
+ "--target-cpu",
+ target_cpu,
+ ]
}
}
@@ -102,55 +154,84 @@ template("test_runner_script") {
generate_runner_script(target_name) {
testonly = true
runner_script = "test_runner.py"
- exe_target = invoker.test_name
+ exe_path = invoker.exe_path
+ root_target_name = invoker.test_name
generated_script =
- "$root_build_dir/bin/run_" + get_label_info(exe_target, "name")
+ "$root_build_dir/bin/run_" + get_label_info(invoker.test_name, "name")
forward_variables_from(invoker, "*")
}
}
# This template is used to generate a runner script for arbitrary executables
# into the build dir for Fuchsia. The template should reference an "executable"
-# target using the "exe_target" attribute.
+# path using the "exe_path" attribute.
#
# Example usage:
#
+# _exe_path = "$root_out_dir/foo_fuchsia"
# executable("foo") {
# sources = [ "foo_main.cc" ]
+# output_name = _exe_path
# }
# fuchsia_executable_runner("foo_fuchsia") {
-# exe_target = ":foo"
+# exe_path = _exe_path
# }
template("fuchsia_executable_runner") {
- generate_runner_script(target_name) {
- forward_variables_from(invoker,
- [
- "testonly",
- "exe_target",
- "data_deps",
- ])
+ forward_variables_from(invoker, [ "exe_target" ])
+
+ _pkg_target = "${target_name}_pkg"
+ _gen_runner_target = "${target_name}_runner"
+ _archive_target = "${target_name}_archive"
+ _exe_name = get_label_info(exe_target, "name")
+ _exe_path = "${root_out_dir}/${_exe_name}"
+
+ # Define the target dependencies as the union of the executable target
+ # and the invoker's deps.
+ if (defined(invoker.deps)) {
+ _combined_deps = invoker.deps + [ exe_target ]
+ } else {
+ _combined_deps = [ exe_target ]
+ }
+
+ package(_pkg_target) {
+ forward_variables_from(invoker, [ "testonly" ])
+ package_name = _exe_name
+ binary = _exe_name
+ deps = _combined_deps
+ }
+
+ generate_runner_script(_gen_runner_target) {
+ forward_variables_from(invoker, [ "testonly" ])
runner_script = "exe_runner.py"
- generated_script =
- "$root_build_dir/bin/run_" + get_label_info(exe_target, "name")
- if (!defined(data_deps)) {
- data_deps = []
+ generated_script = "$root_build_dir/bin/run_${_exe_name}"
+ deps = _combined_deps
+ exe_path = _exe_path
+ root_target_name = invoker.target_name
+ package_name = _exe_name
+ }
+
+ group(target_name) {
+ forward_variables_from(invoker, [ "testonly" ])
+ deps = [
+ ":${_archive_target}",
+ ":${_gen_runner_target}",
+ ":${_pkg_target}",
+ ]
+
+ # Disable packaging for Chromecast builds. (https://crbug.com/810069)
+ if (is_chromecast) {
+ deps -= [ ":${_pkg_target}" ]
}
- data_deps += [ exe_target ]
}
- generate_runner_script(target_name + "_archive") {
- forward_variables_from(invoker,
- [
- "testonly",
- "exe_target",
- "data_deps",
- ])
+ generate_runner_script(_archive_target) {
+ forward_variables_from(invoker, [ "testonly" ])
runner_script = "archive_builder.py"
generated_script =
"$root_build_dir/bin/archive_" + get_label_info(exe_target, "name")
- if (!defined(data_deps)) {
- data_deps = []
- }
- data_deps += [ exe_target ]
+ deps = _combined_deps
+ exe_path = _exe_path
+ root_target_name = invoker.target_name
+ package_name = _exe_name
}
}
diff --git a/chromium/build/config/fuchsia/sandbox_policy b/chromium/build/config/fuchsia/sandbox_policy
new file mode 100644
index 00000000000..e3352a0e5b1
--- /dev/null
+++ b/chromium/build/config/fuchsia/sandbox_policy
@@ -0,0 +1,6 @@
+{
+ "features": [ "persistent-storage",
+ "shell",
+ "system-temp" ]
+}
+
diff --git a/chromium/build/config/gcc/BUILD.gn b/chromium/build/config/gcc/BUILD.gn
index f1950bfec32..4b4d6fe795c 100644
--- a/chromium/build/config/gcc/BUILD.gn
+++ b/chromium/build/config/gcc/BUILD.gn
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//build/config/c++/c++.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/sysroot.gni")
@@ -110,7 +111,7 @@ config("executable_ldconfig") {
} else {
# See the rpath_for... config above for why this is necessary for component
# builds. Sanitizers use a custom libc++ where this is also necessary.
- if (is_component_build || using_sanitizer) {
+ if (is_component_build || using_sanitizer || !libcpp_is_static) {
configs = [ ":rpath_for_built_shared_libraries" ]
}
if (current_cpu == "mipsel" || current_cpu == "mips64el") {
@@ -127,7 +128,7 @@ config("executable_ldconfig") {
_rpath_link += "/$shlib_subdir"
}
if (is_android) {
- _rebased_sysroot = rebase_path(sysroot, root_build_dir)
+ _rebased_sysroot = rebase_path(link_sysroot, root_build_dir)
_rpath_link += ":$_rebased_sysroot/usr/lib"
}
diff --git a/chromium/build/config/ios/BUILD.gn b/chromium/build/config/ios/BUILD.gn
index e768343cc20..47d36fc2fb9 100644
--- a/chromium/build/config/ios/BUILD.gn
+++ b/chromium/build/config/ios/BUILD.gn
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//build/config/coverage/coverage.gni")
import("//build/config/ios/ios_sdk.gni")
import("//build/config/sysroot.gni")
import("//build/toolchain/toolchain.gni")
@@ -97,8 +98,8 @@ config("runtime_library") {
cflags = common_flags
ldflags = common_flags
- if (ios_enable_coverage) {
- configs = [ ":enable_coverage" ]
+ if (use_clang_coverage) {
+ configs = [ "//build/config/coverage:default_coverage" ]
}
}
@@ -124,16 +125,6 @@ config("xctest_config") {
]
}
-# This enables support for LLVM code coverage. See
-# http://llvm.org/docs/CoverageMappingFormat.html.
-config("enable_coverage") {
- cflags = [
- "-fprofile-instr-generate",
- "-fcoverage-mapping",
- ]
- ldflags = [ "-fprofile-instr-generate" ]
-}
-
group("xctest") {
public_configs = [ ":xctest_config" ]
}
diff --git a/chromium/build/config/ios/ios_sdk.gni b/chromium/build/config/ios/ios_sdk.gni
index 82ffac8be8a..35de13b28ef 100644
--- a/chromium/build/config/ios/ios_sdk.gni
+++ b/chromium/build/config/ios/ios_sdk.gni
@@ -36,10 +36,6 @@ declare_args() {
# to avoid running out of certificates if using a free account.
ios_automatically_manage_certs = true
- # Enabling this option makes clang compile for profiling to gather code
- # coverage metrics.
- ios_enable_coverage = false
-
# If non-empty, this list must contain valid cpu architecture, and the final
# build will be a multi-architecture build (aka fat build) supporting the
# main $target_cpu architecture and all of $additional_target_cpus.
diff --git a/chromium/build/config/ios/rules.gni b/chromium/build/config/ios/rules.gni
index 95f72f72f53..f820ef36e26 100644
--- a/chromium/build/config/ios/rules.gni
+++ b/chromium/build/config/ios/rules.gni
@@ -1274,7 +1274,9 @@ template("ios_framework_bundle") {
deps = []
}
deps += [ ":$_arch_shared_library_source" ]
-
+ if (_has_public_headers) {
+ deps += [ ":$_framework_headers_target($default_toolchain)" ]
+ }
if (!defined(ldflags)) {
ldflags = []
}
@@ -1399,9 +1401,11 @@ template("ios_framework_bundle") {
forward_variables_from(invoker, [ "testonly" ])
deps = [
":$_compile_headers_map_target",
- ":$_copy_public_headers_target",
":$_create_module_map_target",
]
+ public_deps = [
+ ":$_copy_public_headers_target",
+ ]
}
}
@@ -1633,7 +1637,9 @@ template("ios_xctest_bundle") {
if (ios_automatically_manage_certs) {
# Use a fixed bundle identifier for EarlGrey tests when using Xcode to
# manage the certificates as the number of free certs is limited.
- extra_substitutions = [ "MODULE_BUNDLE_ID=gtest.${ios_generic_test_bundle_id_suffix}-module" ]
+ extra_substitutions = [
+ "MODULE_BUNDLE_ID=gtest.${ios_generic_test_bundle_id_suffix}-module",
+ ]
} else {
extra_substitutions = [ "MODULE_BUNDLE_ID=gtest.$_output_name" ]
}
diff --git a/chromium/build/config/jumbo.gni b/chromium/build/config/jumbo.gni
index 427bb1fb541..6b146d9a764 100644
--- a/chromium/build/config/jumbo.gni
+++ b/chromium/build/config/jumbo.gni
@@ -84,31 +84,7 @@ template("internal_jumbo_target") {
invoker_sources = []
}
- if (invoker_sources != []) {
- gen_target_dir = get_path_info(invoker_sources[0], "gen_dir")
- assert(excluded_sources != [] || true) # Prevent "unused variable".
-
- # Find the gen_target_dir directory with shortest path. Short paths
- # are nice in themselves since they mean shorter error messages and
- # fewer bytes to parse, but the currently deployed version of ninja
- # also has a limitation where it only allows 32 path components in
- # Windows.
- # See https://crbug.com/738186 and
- # https://github.com/ninja-build/ninja/issues/1161
- foreach(source_file, invoker_sources) {
- possibly_better_gen_target_dir = get_path_info(gen_target_dir, "dir")
- possibly_better_gen_target_dir_2 =
- get_path_info(possibly_better_gen_target_dir, "dir")
- alt_gen_target_dir = get_path_info(source_file, "gen_dir")
- if (alt_gen_target_dir == possibly_better_gen_target_dir ||
- alt_gen_target_dir == possibly_better_gen_target_dir_2) {
- gen_target_dir = alt_gen_target_dir
- }
- }
- } else {
- gen_target_dir = "<will not be used>" # Will not result in
- # anything used anyway.
- }
+ gen_target_dir = invoker.target_gen_dir
assert(gen_target_dir != "") # Prevent "unused variable".
diff --git a/chromium/build/config/linux/OWNERS b/chromium/build/config/linux/OWNERS
new file mode 100644
index 00000000000..280ba478dca
--- /dev/null
+++ b/chromium/build/config/linux/OWNERS
@@ -0,0 +1 @@
+thomasanderson@chromium.org
diff --git a/chromium/build/config/linux/pkg-config.py b/chromium/build/config/linux/pkg-config.py
index 5ef73227df0..a3339f8e2ad 100755
--- a/chromium/build/config/linux/pkg-config.py
+++ b/chromium/build/config/linux/pkg-config.py
@@ -224,7 +224,8 @@ def main():
# Output a GN array, the first one is the cflags, the second are the libs. The
# JSON formatter prints GN compatible lists when everything is a list of
# strings.
- print json.dumps([includes, cflags, libs, lib_dirs, ldflags])
+ cflags += map(lambda dir: "-isystem" + dir, includes)
+ print json.dumps([cflags, libs, lib_dirs, ldflags])
return 0
diff --git a/chromium/build/config/linux/pkg_config.gni b/chromium/build/config/linux/pkg_config.gni
index 7358f8e763c..8f95457e928 100644
--- a/chromium/build/config/linux/pkg_config.gni
+++ b/chromium/build/config/linux/pkg_config.gni
@@ -101,13 +101,12 @@ template("pkg_config") {
}
pkgresult = exec_script(pkg_config_script, args, "value")
- include_dirs = pkgresult[0]
- cflags = pkgresult[1]
+ cflags = pkgresult[0]
if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) {
- libs = pkgresult[2]
- lib_dirs = pkgresult[3]
- ldflags = pkgresult[4]
+ libs = pkgresult[1]
+ lib_dirs = pkgresult[2]
+ ldflags = pkgresult[3]
}
forward_variables_from(invoker,
diff --git a/chromium/build/config/merge_for_jumbo.py b/chromium/build/config/merge_for_jumbo.py
index 4892c07e231..573b7472522 100755
--- a/chromium/build/config/merge_for_jumbo.py
+++ b/chromium/build/config/merge_for_jumbo.py
@@ -15,20 +15,6 @@ import argparse
import cStringIO
import os
-# Files that appear in sources lists but have no effect and are
-# ignored by the build system. We warn for unexpected files in the
-# sources list, but these are ok.
-NOOP_FILE_SUFFIXES = (
- ".css",
- ".g",
- ".idl",
- ".inc",
- ".js",
- ".json",
- ".py",
-)
-
-
def write_jumbo_files(inputs, outputs, written_input_set, written_output_set):
output_count = len(outputs)
input_count = len(inputs)
@@ -93,15 +79,7 @@ def main():
write_jumbo_files(inputs, outputs, written_input_set, written_output_set)
- header_files = set([x for x in all_inputs if x.endswith(".h")])
assert set(args.outputs) == written_output_set, "Did not fill all outputs"
- random_files_to_ignore = set([x for x in all_inputs
- if x.endswith(NOOP_FILE_SUFFIXES)])
- files_not_included = set(all_inputs) - (written_input_set |
- header_files |
- random_files_to_ignore)
- assert not files_not_included, ("Jumbo build left out files: %s" %
- files_not_included)
if args.verbose:
print("Generated %s (%d files) based on %s" % (
str(args.outputs), len(written_input_set), args.file_list))
diff --git a/chromium/build/config/posix/BUILD.gn b/chromium/build/config/posix/BUILD.gn
index ae4a1bff8f0..55860cff103 100644
--- a/chromium/build/config/posix/BUILD.gn
+++ b/chromium/build/config/posix/BUILD.gn
@@ -49,14 +49,6 @@ config("runtime_library") {
"-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir),
]
- # This condition should match the one in buildtools/third_party/libc++abi.
- if ((is_linux && current_cpu == "arm") || is_fuchsia) {
- cflags_c += [ "-isystem" +
- rebase_path("$libunwind_prefix/include", root_build_dir) ]
- cflags_cc += [ "-isystem" +
- rebase_path("$libunwind_prefix/include", root_build_dir) ]
- }
-
# Make sure we don't link against libc++ or libstdc++.
if (is_clang) {
ldflags += [ "-nostdlib++" ]
@@ -79,28 +71,6 @@ config("runtime_library") {
if (!is_mac && !is_ios && sysroot != "") {
# Pass the sysroot to all C compiler variants, the assembler, and linker.
sysroot_flags = [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
-
- # Android uses unified headers in NDK r16 and later, meaning that the
- # compile time sysroot and link time sysroot are different
- link_sysroot = sysroot
- if (is_android) {
- if (current_cpu == "arm") {
- link_sysroot = "$android_ndk_root/$arm_android_sysroot_subdir"
- } else if (current_cpu == "arm64") {
- link_sysroot = "$android_ndk_root/$arm64_android_sysroot_subdir"
- } else if (current_cpu == "x86") {
- link_sysroot = "$android_ndk_root/$x86_android_sysroot_subdir"
- } else if (current_cpu == "x64") {
- link_sysroot = "$android_ndk_root/$x86_64_android_sysroot_subdir"
- } else if (current_cpu == "mipsel") {
- link_sysroot = "$android_ndk_root/$mips_android_sysroot_subdir"
- } else if (current_cpu == "mips64el") {
- link_sysroot = "$android_ndk_root/$mips64_android_sysroot_subdir"
- } else {
- assert(false, "No android link sysroot for cpu: $target_cpu")
- }
- }
-
asmflags += sysroot_flags
link_sysroot_flags =
diff --git a/chromium/build/config/sanitizers/BUILD.gn b/chromium/build/config/sanitizers/BUILD.gn
index 6e651a6f5e8..0b136843b76 100644
--- a/chromium/build/config/sanitizers/BUILD.gn
+++ b/chromium/build/config/sanitizers/BUILD.gn
@@ -255,16 +255,18 @@ config("common_sanitizer_flags") {
assert(is_clang, "sanitizers only supported with clang")
assert(!is_official_build, "sanitizers not supported in official builds")
- if (!sanitizer_keep_symbols) {
- cflags += [ "-gline-tables-only" ]
- }
+ if (!sanitizer_no_symbols) {
+ if (!sanitizer_keep_symbols) {
+ cflags += [ "-gline-tables-only" ]
+ }
- cflags += [
- # Column info in debug data confuses Visual Studio's debugger, so don't
- # use this by default. However, clusterfuzz needs it for good attribution
- # of reports to CLs, so turn it on there.
- "-gcolumn-info",
- ]
+ cflags += [
+ # Column info in debug data confuses Visual Studio's debugger, so don't
+ # use this by default. However, clusterfuzz needs it for good
+ # attribution of reports to CLs, so turn it on there.
+ "-gcolumn-info",
+ ]
+ }
# Frame pointers are controlled in //build/config/compiler:default_stack_frames
}
diff --git a/chromium/build/config/sanitizers/sanitizers.gni b/chromium/build/config/sanitizers/sanitizers.gni
index efea1d48b62..73441af5d8f 100644
--- a/chromium/build/config/sanitizers/sanitizers.gni
+++ b/chromium/build/config/sanitizers/sanitizers.gni
@@ -107,6 +107,10 @@ declare_args() {
# necessary, overriding any other symbol level arguments that may be set.
# Setting this to true prevents this.
sanitizer_keep_symbols = false
+
+ # Builds fuzzer/sanitizers without symbols. Use with symbol_level=0.
+ # Useful for reducing binary size when building with use_clang_coverage=true.
+ sanitizer_no_symbols = false
}
# Disable sanitizers for non-default toolchains.
diff --git a/chromium/build/config/sysroot.gni b/chromium/build/config/sysroot.gni
index daab5f87b12..d5daf2df2e4 100644
--- a/chromium/build/config/sysroot.gni
+++ b/chromium/build/config/sysroot.gni
@@ -15,9 +15,9 @@ declare_args() {
# The absolute path to directory containing linux sysroot images
target_sysroot_dir = "//build/linux"
- use_sysroot =
- current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
- current_cpu == "arm64" || current_cpu == "mipsel"
+ use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+ current_cpu == "mipsel" || current_cpu == "mips64el"
}
if (current_os == target_os && current_cpu == target_cpu &&
@@ -32,15 +32,17 @@ if (current_os == target_os && current_cpu == target_cpu &&
# By default build against a sysroot image downloaded from Cloud Storage
# during gclient runhooks.
if (current_cpu == "x64") {
- sysroot = "$target_sysroot_dir/debian_stretch_amd64-sysroot"
+ sysroot = "$target_sysroot_dir/debian_sid_amd64-sysroot"
} else if (current_cpu == "x86") {
- sysroot = "$target_sysroot_dir/debian_stretch_i386-sysroot"
+ sysroot = "$target_sysroot_dir/debian_sid_i386-sysroot"
} else if (current_cpu == "mipsel") {
- sysroot = "$target_sysroot_dir/debian_stretch_mips-sysroot"
+ sysroot = "$target_sysroot_dir/debian_sid_mips-sysroot"
+ } else if (current_cpu == "mips64el") {
+ sysroot = "$target_sysroot_dir/debian_sid_mips64el-sysroot"
} else if (current_cpu == "arm") {
- sysroot = "$target_sysroot_dir/debian_stretch_arm-sysroot"
+ sysroot = "$target_sysroot_dir/debian_sid_arm-sysroot"
} else if (current_cpu == "arm64") {
- sysroot = "$target_sysroot_dir/debian_stretch_arm64-sysroot"
+ sysroot = "$target_sysroot_dir/debian_sid_arm64-sysroot"
} else {
assert(false, "No linux sysroot for cpu: $target_cpu")
}
@@ -76,3 +78,26 @@ if (current_os == target_os && current_cpu == target_cpu &&
} else {
sysroot = ""
}
+
+if (is_android) {
+ # Android uses unified headers in NDK r16 and later, meaning that the
+ # compile time sysroot and link time sysroot are different
+ link_sysroot = sysroot
+ if (current_cpu == "arm") {
+ link_sysroot = "$android_ndk_root/$arm_android_sysroot_subdir"
+ } else if (current_cpu == "arm64") {
+ link_sysroot = "$android_ndk_root/$arm64_android_sysroot_subdir"
+ } else if (current_cpu == "x86") {
+ link_sysroot = "$android_ndk_root/$x86_android_sysroot_subdir"
+ } else if (current_cpu == "x64") {
+ link_sysroot = "$android_ndk_root/$x86_64_android_sysroot_subdir"
+ } else if (current_cpu == "mipsel") {
+ link_sysroot = "$android_ndk_root/$mips_android_sysroot_subdir"
+ } else if (current_cpu == "mips64el") {
+ link_sysroot = "$android_ndk_root/$mips64_android_sysroot_subdir"
+ } else {
+ assert(false, "No android link sysroot for cpu: $target_cpu")
+ }
+} else {
+ link_sysroot = sysroot
+}
diff --git a/chromium/build/config/win/BUILD.gn b/chromium/build/config/win/BUILD.gn
index 80bfa75f2e1..1f6bc13e087 100644
--- a/chromium/build/config/win/BUILD.gn
+++ b/chromium/build/config/win/BUILD.gn
@@ -3,6 +3,7 @@
# found in the LICENSE file.
import("//build/config/chrome_build.gni")
+import("//build/config/c++/c++.gni")
import("//build/config/clang/clang.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/sanitizers/sanitizers.gni")
@@ -61,8 +62,6 @@ config("compiler") {
"/Zc:sizedDealloc-",
]
- # Building with Clang on Windows is a work in progress and very
- # experimental. See crbug.com/82385.
if (is_clang) {
cflags += [ "-fmsc-version=1911" ]
@@ -85,6 +84,14 @@ config("compiler") {
lib_dirs = [ "$clang_base_path/lib/clang/$clang_version/lib/windows" ]
}
+ if (use_lld) {
+ # /Brepro lets the compiler not write the mtime field in the .obj output.
+ # link.exe /incremental relies on this field to work correctly, but lld
+ # never looks at this timestamp, so it's safe to pass this flag with
+ # lld and get more deterministic compiler output in return.
+ cflags += [ "/Brepro" ]
+ }
+
# /PROFILE ensures that the PDB file contains FIXUP information (growing the
# PDB file by about 5%) but does not otherwise alter the output binary. This
# information is used by the Syzygy optimization tool when decomposing the
@@ -217,13 +224,26 @@ config("runtime_library") {
# However it is prohibited when using /analyze
defines += [ "_USING_V110_SDK71_" ]
}
+
+ if (use_custom_libcxx) {
+ cflags_cc = [ "-I" + rebase_path("$libcxx_prefix/include", root_build_dir) ]
+ if (libcpp_is_static) {
+ defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
+ }
+
+ # Prevent libc++ from embedding linker flags to try to automatically link
+ # against its runtime library. This is unnecessary with our build system,
+ # and can also result in build failures if libc++'s name for a library does
+ # not match ours.
+ defines += [ "_LIBCPP_NO_AUTO_LINK" ]
+ }
}
# Sets the default Windows build version. This is separated because some
# targets need to manually override it for their compiles.
config("winver") {
defines = [
- "NTDDI_VERSION=0x0A000000",
+ "NTDDI_VERSION=0x0A000002",
"_WIN32_WINNT=0x0A00",
"WINVER=0x0A00",
]
@@ -262,20 +282,9 @@ config("common_linker_setup") {
"/ignore:4199",
"/ignore:4221",
"/NXCOMPAT",
+ "/DYNAMICBASE",
]
- # ASLR makes debugging with windbg difficult because Chrome.exe and
- # Chrome.dll share the same base name. As result, windbg will name the
- # Chrome.dll module like chrome_<base address>, where <base address>
- # typically changes with each launch. This in turn means that breakpoints in
- # Chrome.dll don't stick from one launch to the next. For this reason, we
- # turn ASLR off in debug builds.
- if (is_debug) {
- ldflags += [ "/DYNAMICBASE:NO" ]
- } else {
- ldflags += [ "/DYNAMICBASE" ]
- }
-
if (win_linker_timing) {
ldflags += [
"/time",
@@ -289,8 +298,9 @@ config("cfi_linker") {
# https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx
# /DYNAMICBASE (ASLR) is turned off in debug builds, therefore CFG can’t be
# turned on either.
- # TODO(thakis): Turn this on with lld once supported, https://crbug.com/693709
- if (!is_debug && !use_lld) {
+ # CFG seems to lead to random corruption with incremental linking so turn off
+ # CFG in component builds. https://crbug.com/812421
+ if (!is_debug && !is_component_build) {
# Turn on CFG in msvc linker, regardless of compiler used. Turn off CFG for
# longjmp (new in VS 2017) because it relies on compiler support which we do
# not have enabled.
@@ -373,6 +383,9 @@ config("windowed") {
incremental_linking_on_switch = [ "/INCREMENTAL" ]
incremental_linking_off_switch = [ "/INCREMENTAL:NO" ]
+if (use_lld) {
+ incremental_linking_on_switch += [ "/OPT:NOREF" ]
+}
# Disable incremental linking for syzyasan, enable for debug builds and all
# component builds - any builds where performance is not job one.
diff --git a/chromium/build/dotfile_settings.gni b/chromium/build/dotfile_settings.gni
index 4afdbf80bf5..8382c75f24f 100644
--- a/chromium/build/dotfile_settings.gni
+++ b/chromium/build/dotfile_settings.gni
@@ -24,6 +24,7 @@ build_dotfile_settings = {
"//build/config/sysroot.gni",
"//build/config/win/BUILD.gn",
"//build/config/win/visual_studio_version.gni",
+ "//build/toolchain/BUILD.gn",
"//build/toolchain/concurrent_links.gni",
"//build/toolchain/mac/BUILD.gn",
"//build/toolchain/nacl/BUILD.gn",
diff --git a/chromium/build/fuchsia/create_runner_script.py b/chromium/build/fuchsia/create_runner_script.py
index f50064b9b53..a879dfbf708 100755
--- a/chromium/build/fuchsia/create_runner_script.py
+++ b/chromium/build/fuchsia/create_runner_script.py
@@ -19,10 +19,25 @@ SCRIPT_TEMPLATE = """\
#
# This file was generated by build/fuchsia/create_runner_script.py
+import argparse
import os
import sys
def main():
+ # Redirect execution to the new scripts, if requested.
+ # Suppress -h/-help behavior so that we don't interfere with the help text
+ # output of the runner scripts.
+ parser = argparse.ArgumentParser(add_help=False)
+ parser.add_argument('--use-new-test-runner', action='store_true',
+ default=False,
+ help='Uses the runner_v2 scripts for execution.')
+ args, unknown_args = parser.parse_known_args()
+ if args.use_new_test_runner:
+ v2_test_path = sys.argv[0] + '_v2'
+ os.execv(v2_test_path,
+ [v2_test_path] + unknown_args)
+ return 1
+
script_directory = os.path.dirname(__file__)
def ResolvePath(path):
diff --git a/chromium/build/fuchsia/exe_runner.py b/chromium/build/fuchsia/exe_runner.py
index 7fde4dbd39e..25ee738eb89 100755
--- a/chromium/build/fuchsia/exe_runner.py
+++ b/chromium/build/fuchsia/exe_runner.py
@@ -53,7 +53,8 @@ def main():
return 2
return RunFuchsia(bootfs, args.device, args.kernel, args.dry_run,
- forward_ssh_port=args.forward_ssh_port)
+ forward_ssh_port=args.forward_ssh_port,
+ vm_cpu_cores=args.vm_cpu_cores)
if __name__ == '__main__':
diff --git a/chromium/build/fuchsia/layout_test_proxy/BUILD.gn b/chromium/build/fuchsia/layout_test_proxy/BUILD.gn
new file mode 100644
index 00000000000..43ed152187b
--- /dev/null
+++ b/chromium/build/fuchsia/layout_test_proxy/BUILD.gn
@@ -0,0 +1,27 @@
+# Copyright 2018 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.
+
+assert(is_fuchsia)
+
+import("//testing/test.gni")
+
+# Binary used to proxy TCP connections from a Fuchsia process. Potentially SSH
+# can be used to forward TCP, but this feature is currently broken on Fuchsia,
+# see ZX-1555. layout_test_proxy can be removed once that issue with sshd is
+# fixed and layout tests are updated to use SSH.
+executable("layout_test_proxy") {
+ testonly = true
+ sources = [
+ "layout_test_proxy.cc",
+ ]
+ deps = [
+ "//net",
+ "//net:test_support",
+ ]
+}
+
+fuchsia_executable_runner("layout_test_proxy_runner") {
+ testonly = true
+ exe_target = ":layout_test_proxy"
+}
diff --git a/chromium/build/fuchsia/layout_test_proxy/DEPS b/chromium/build/fuchsia/layout_test_proxy/DEPS
new file mode 100644
index 00000000000..b2f6f8ed02e
--- /dev/null
+++ b/chromium/build/fuchsia/layout_test_proxy/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+net",
+] \ No newline at end of file
diff --git a/chromium/build/fuchsia/layout_test_proxy/layout_test_proxy.cc b/chromium/build/fuchsia/layout_test_proxy/layout_test_proxy.cc
new file mode 100644
index 00000000000..1d14df99ea4
--- /dev/null
+++ b/chromium/build/fuchsia/layout_test_proxy/layout_test_proxy.cc
@@ -0,0 +1,78 @@
+// Copyright 2018 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.
+
+#include "base/command_line.h"
+#include "base/message_loop/message_loop.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
+#include "net/base/ip_endpoint.h"
+#include "net/test/tcp_socket_proxy.h"
+
+const char kPortsSwitch[] = "ports";
+const char kRemoteAddressSwitch[] = "remote-address";
+
+int main(int argc, char** argv) {
+ base::CommandLine::Init(argc, argv);
+
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+
+ if (!command_line->HasSwitch(kPortsSwitch)) {
+ LOG(ERROR) << "--" << kPortsSwitch << " was not specified.";
+ return 1;
+ }
+
+ std::vector<std::string> ports_strings =
+ base::SplitString(command_line->GetSwitchValueASCII(kPortsSwitch), ",",
+ base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+ if (ports_strings.empty()) {
+ LOG(ERROR) << "At least one port must be specified with --" << kPortsSwitch;
+ return 1;
+ }
+
+ std::vector<int> ports;
+ for (auto& port_string : ports_strings) {
+ int port;
+ if (!base::StringToInt(port_string, &port) || port <= 0 || port > 65535) {
+ LOG(ERROR) << "Invalid value specified for --" << kPortsSwitch << ": "
+ << port_string;
+ return 1;
+ }
+ ports.push_back(port);
+ }
+
+ if (!command_line->HasSwitch(kRemoteAddressSwitch)) {
+ LOG(ERROR) << "--" << kRemoteAddressSwitch << " was not specified.";
+ return 1;
+ }
+
+ std::string remote_address_str =
+ command_line->GetSwitchValueASCII(kRemoteAddressSwitch);
+ net::IPAddress remote_address;
+ if (!remote_address.AssignFromIPLiteral(remote_address_str)) {
+ LOG(ERROR) << "Invalid value specified for --" << kRemoteAddressSwitch
+ << ": " << remote_address_str;
+ return 1;
+ }
+
+ base::MessageLoopForIO message_loop;
+
+ std::vector<std::unique_ptr<net::TcpSocketProxy>> proxies;
+
+ for (int port : ports) {
+ auto test_server_proxy =
+ std::make_unique<net::TcpSocketProxy>(message_loop.task_runner());
+ if (!test_server_proxy->Initialize(port)) {
+ LOG(ERROR) << "Can't bind proxy to port " << port;
+ return 1;
+ }
+ LOG(INFO) << "Listening on port " << test_server_proxy->local_port();
+ test_server_proxy->Start(net::IPEndPoint(remote_address, port));
+ proxies.push_back(std::move(test_server_proxy));
+ }
+
+ // Run the message loop indefinitely.
+ base::RunLoop().Run();
+
+ return 0;
+} \ No newline at end of file
diff --git a/chromium/build/fuchsia/runner_common.py b/chromium/build/fuchsia/runner_common.py
index 6494a7e0166..e64a9fcf0c6 100755
--- a/chromium/build/fuchsia/runner_common.py
+++ b/chromium/build/fuchsia/runner_common.py
@@ -107,10 +107,17 @@ def _MakeTargetImageName(common_prefix, output_directory, location):
loc = location[len(common_prefix):]
if loc.startswith(output_dir_no_common_prefix):
loc = loc[len(output_dir_no_common_prefix)+1:]
- # TODO(fuchsia): The requirements for finding/loading .so are in flux, so this
- # ought to be reconsidered at some point. See https://crbug.com/732897.
- if location.endswith('.so'):
- loc = 'lib/' + loc
+
+ if loc.startswith('lib.unstripped'):
+ # TODO(fuchsia): The requirements for finding/loading .so are in flux, so this
+ # ought to be reconsidered at some point. See https://crbug.com/732897.
+ loc = 'lib/' + loc[len('lib.unstripped') + 1:]
+
+ if loc.startswith('exe.unstripped'):
+ # TODO(fuchsia): The requirements for finding/loading .so are in flux, so this
+ # ought to be reconsidered at some point. See https://crbug.com/732897.
+ loc = loc[len('lib.unstripped') + 1:]
+
return loc
@@ -211,6 +218,9 @@ def AddRunnerCommandLineArguments(parser):
'one from the SDK')
parser.add_argument('--device', '-d', action='store_true', default=False,
help='Run on hardware device instead of QEMU.')
+ parser.add_argument('--vm-cpu-cores', type=int, default=4,
+ help='Sets the number of CPU cores to provide if '
+ 'launching in a VM with QEMU.')
parser.add_argument('--dry-run', '-n', action='store_true', default=False,
help='Just print commands, don\'t execute them.')
parser.add_argument('--kernel', type=os.path.realpath,
@@ -613,7 +623,8 @@ def _HandleOutputFromProcess(process, symbols_mapping):
def RunFuchsia(bootfs_data, use_device, kernel_path, dry_run,
- test_launcher_summary_output=None, forward_ssh_port=None):
+ test_launcher_summary_output=None, forward_ssh_port=None,
+ vm_cpu_cores=4):
if not kernel_path:
# TODO(wez): Parameterize this on the |target_cpu| from GN.
kernel_path = os.path.join(_TargetCpuToSdkBinPath(bootfs_data.target_cpu),
@@ -655,7 +666,7 @@ def RunFuchsia(bootfs_data, use_device, kernel_path, dry_run,
'-nographic',
'-kernel', kernel_path,
'-initrd', bootfs_data.bootfs,
- '-smp', '4',
+ '-smp', str(vm_cpu_cores),
# Use stdio for the guest OS only; don't attach the QEMU interactive
# monitor.
diff --git a/chromium/build/fuchsia/runner_v2/__init__.py b/chromium/build/fuchsia/runner_v2/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/__init__.py
diff --git a/chromium/build/fuchsia/runner_v2/boot_data.py b/chromium/build/fuchsia/runner_v2/boot_data.py
new file mode 100644
index 00000000000..215cfbb9e7d
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/boot_data.py
@@ -0,0 +1,151 @@
+# Copyright 2018 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.
+
+"""Functions used to provision Fuchsia boot images."""
+
+import common
+import logging
+import os
+import subprocess
+import tempfile
+import time
+import uuid
+
+_SSH_CONFIG_TEMPLATE = """
+Host *
+ CheckHostIP no
+ StrictHostKeyChecking no
+ ForwardAgent no
+ ForwardX11 no
+ GSSAPIDelegateCredentials no
+ UserKnownHostsFile {known_hosts}
+ User fuchsia
+ IdentitiesOnly yes
+ IdentityFile {identity}
+ ServerAliveInterval 1
+ ServerAliveCountMax 1"""
+
+
+def _TargetCpuToSdkBinPath(target_arch):
+ """Returns the path to the kernel & bootfs .bin files for |target_cpu|."""
+
+ return os.path.join(common.SDK_ROOT, 'target', target_arch)
+
+
+def _ProvisionSSH(output_dir):
+ """Provisions the key files used by the SSH daemon, and generates a
+ configuration file used by clients for connecting to SSH.
+
+ Returns a tuple with:
+ #0: the client configuration file
+ #1: a list of file path pairs: (<path in image>, <path on build filesystem>).
+ """
+
+ host_key_path = output_dir + '/ssh_key'
+ host_pubkey_path = host_key_path + '.pub'
+ id_key_path = output_dir + '/id_ed25519'
+ id_pubkey_path = id_key_path + '.pub'
+ known_hosts_path = output_dir + '/known_hosts'
+ ssh_config_path = GetSSHConfigPath(output_dir)
+
+ logging.debug('Generating SSH credentials.')
+ if not os.path.isfile(host_key_path):
+ subprocess.check_call(['ssh-keygen', '-t', 'ed25519', '-h', '-f',
+ host_key_path, '-P', '', '-N', ''],
+ stdout=open(os.devnull))
+ if not os.path.isfile(id_key_path):
+ subprocess.check_call(['ssh-keygen', '-t', 'ed25519', '-f', id_key_path,
+ '-P', '', '-N', ''], stdout=open(os.devnull))
+
+ with open(ssh_config_path, "w") as ssh_config:
+ ssh_config.write(
+ _SSH_CONFIG_TEMPLATE.format(identity=id_key_path,
+ known_hosts=known_hosts_path))
+
+ if os.path.exists(known_hosts_path):
+ os.remove(known_hosts_path)
+
+ return (
+ ssh_config_path,
+ (('ssh/ssh_host_ed25519_key', host_key_path),
+ ('ssh/ssh_host_ed25519_key.pub', host_pubkey_path),
+ ('ssh/authorized_keys', id_pubkey_path))
+ )
+
+
+def GetTargetFile(target_arch, filename):
+ """Computes a path to |filename| in the Fuchsia target directory specific to
+ |target_arch|."""
+
+ return os.path.join(_TargetCpuToSdkBinPath(target_arch), filename)
+
+
+def GetSSHConfigPath(output_dir):
+ return output_dir + '/ssh_config'
+
+
+def ConfigureDataFVM(output_dir, sparse):
+ """Builds the FVM image for the persistent /data volume and prepopulates it
+ with SSH keys.
+
+ output_dir: Path to the output directory which will contain the FVM file.
+ sparse: If true, then a netboot-friendly sparse file will be generated.
+
+ Returns the path to the new FVM file."""
+
+ logging.debug('Building persistent data FVM file.')
+ data_file = os.path.join(output_dir, 'data.minfs.bin')
+ try:
+ # Build up the minfs partition data and install keys into it.
+ ssh_config, ssh_data = _ProvisionSSH(output_dir)
+ manifest = tempfile.NamedTemporaryFile()
+ for dest, src in ssh_data:
+ manifest.write('%s=%s\n' % (dest, src))
+ manifest.flush()
+ minfs_path = os.path.join(common.SDK_ROOT, 'tools', 'minfs')
+ subprocess.check_call([minfs_path, '%s@10m' % data_file, 'create'])
+ subprocess.check_call([minfs_path, data_file, 'manifest', manifest.name])
+
+ # Wrap the minfs partition in a FVM container.
+ fvm_path = os.path.join(common.SDK_ROOT, 'tools', 'fvm')
+ fvm_output_path = os.path.join(output_dir, 'fvm.data.blk')
+ if os.path.exists(fvm_output_path):
+ os.remove(fvm_output_path)
+
+ if sparse:
+ cmd = [fvm_path, fvm_output_path, 'sparse', '--compress', 'lz4',
+ '--data', data_file]
+ else:
+ cmd = [fvm_path, fvm_output_path, 'create', '--data', data_file]
+
+ logging.debug(' '.join(cmd))
+
+ subprocess.check_call(cmd)
+ return fvm_output_path
+
+ finally:
+ os.remove(data_file)
+
+
+def GetNodeName(output_dir):
+ """Returns the cached Zircon node name, or generates one if it doesn't
+ already exist. The node name is used by Discover to find the prior
+ deployment on the LAN."""
+
+ nodename_file = os.path.join(output_dir, 'nodename')
+ if not os.path.exists(nodename_file):
+ nodename = uuid.uuid4()
+ f = open(nodename_file, 'w')
+ f.write(str(nodename))
+ f.flush()
+ f.close()
+ return str(nodename)
+ else:
+ f = open(nodename_file, 'r')
+ return f.readline()
+
+
+def GetKernelArgs(output_dir):
+ return ['devmgr.epoch=%d' % time.time(),
+ 'zircon.nodename=' + GetNodeName(output_dir)]
diff --git a/chromium/build/fuchsia/runner_v2/boot_image.py b/chromium/build/fuchsia/runner_v2/boot_image.py
deleted file mode 100644
index 6cab62bd527..00000000000
--- a/chromium/build/fuchsia/runner_v2/boot_image.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright 2018 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.
-
-"""Functions used to provision Fuchsia boot images."""
-
-import common
-import os
-import subprocess
-import tempfile
-
-_SSH_CONFIG_TEMPLATE = """
-Host *
- CheckHostIP no
- StrictHostKeyChecking no
- ForwardAgent no
- ForwardX11 no
- GSSAPIDelegateCredentials no
- UserKnownHostsFile {known_hosts}
- User fuchsia
- IdentitiesOnly yes
- IdentityFile {identity}
- ServerAliveInterval 1
- ServerAliveCountMax 1"""
-
-
-def _GetKernelPath(target_arch):
- return os.path.join(_TargetCpuToSdkBinPath(target_arch), 'zircon.bin')
-
-
-def _TargetCpuToSdkBinPath(target_arch):
- """Returns the path to the kernel & bootfs .bin files for |target_cpu|."""
- return os.path.join(common.SDK_ROOT, 'target', target_arch)
-
-
-def _ProvisionSSH(output_dir):
- """Provisions the key files used by the SSH daemon, and generates a
- configuration file used by clients for connecting to SSH.
-
- Returns a tuple with:
- #0: the client configuration file
- #1: a list of file path pairs: (<path in image>, <path on build filesystem>).
- """
-
- host_key_path = output_dir + '/ssh_key'
- host_pubkey_path = host_key_path + '.pub'
- id_key_path = output_dir + '/id_ed25519'
- id_pubkey_path = id_key_path + '.pub'
- known_hosts_path = output_dir + '/known_hosts'
- ssh_config_path = output_dir + '/ssh_config'
-
- if not os.path.isfile(host_key_path):
- subprocess.check_call(['ssh-keygen', '-t', 'ed25519', '-h', '-f',
- host_key_path, '-P', '', '-N', ''],
- stdout=open(os.devnull))
- if not os.path.isfile(id_key_path):
- subprocess.check_call(['ssh-keygen', '-t', 'ed25519', '-f', id_key_path,
- '-P', '', '-N', ''], stdout=open(os.devnull))
-
- with open(ssh_config_path, "w") as ssh_config:
- ssh_config.write(
- _SSH_CONFIG_TEMPLATE.format(identity=id_key_path,
- known_hosts=known_hosts_path))
-
- return (
- ssh_config_path,
- (('data/ssh/ssh_host_ed25519_key', host_key_path),
- ('data/ssh/ssh_host_ed25519_key.pub', host_pubkey_path),
- ('data/ssh/authorized_keys', id_pubkey_path))
- )
-
-
-def CreateBootFS(output_dir, target_arch):
- """Creates a bootfs image provisoned with the credentials necessary
- for SSH remote access.
-
- Returns a tuple with the path to SSH config and the path to the boot
- image."""
-
- boot_image = os.path.join(
- _TargetCpuToSdkBinPath(target_arch), 'bootdata.bin')
- ssh_manifest = tempfile.NamedTemporaryFile(delete=False)
- ssh_config, ssh_data = _ProvisionSSH(output_dir)
- for key, val in ssh_data:
- ssh_manifest.write("%s=%s\n" % (key, val))
- ssh_manifest.close()
- mkbootfs_path = os.path.join(common.SDK_ROOT, 'tools', 'mkbootfs')
- bootfs_name = output_dir + '/image.bootfs'
- args = [mkbootfs_path, '-o', bootfs_name,
- '--target=boot', boot_image,
- '--target=system', ssh_manifest.name]
-
- subprocess.check_call(args)
- os.remove(ssh_manifest.name)
-
- return ssh_config, bootfs_name
diff --git a/chromium/build/fuchsia/runner_v2/common_args.py b/chromium/build/fuchsia/runner_v2/common_args.py
new file mode 100644
index 00000000000..367491f1d5a
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/common_args.py
@@ -0,0 +1,76 @@
+# Copyright 2018 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.
+
+import logging
+import os
+import sys
+
+from device_target import DeviceTarget
+from qemu_target import QemuTarget
+
+
+def AddCommonArgs(arg_parser):
+ """Adds command line arguments to |arg_parser| for options which are shared
+ across test and executable target types."""
+
+ common_args = arg_parser.add_argument_group('common', 'Common arguments')
+ common_args.add_argument('--package',
+ type=os.path.realpath, required=True,
+ help='Path to the package to execute.')
+ common_args.add_argument('--package-manifest',
+ type=os.path.realpath, required=True,
+ help='Path to the Fuchsia package manifest file.')
+ common_args.add_argument('--output-directory',
+ type=os.path.realpath, required=True,
+ help=('Path to the directory in which build files are'
+ ' located (must include build type).'))
+ common_args.add_argument('--target-cpu', required=True,
+ help='GN target_cpu setting for the build.')
+ common_args.add_argument('--device', '-d', action='store_true', default=False,
+ help='Run on hardware device instead of QEMU.')
+ common_args.add_argument('--host', help='The IP of the target device. ' +
+ 'Optional.')
+ common_args.add_argument('--port', '-p', type=int, default=22,
+ help='The port of the SSH service running on the ' +
+ 'device. Optional.')
+ common_args.add_argument('--ssh-config', '-F',
+ help='The path to the SSH configuration used for '
+ 'connecting to the target device.')
+ common_args.add_argument('--verbose', '-v', default=False, action='store_true',
+ help='Show more logging information.')
+ common_args.add_argument('--really-verbose', '-vv', default=False,
+ action='store_true',
+ help='Show even more logging information, ' +
+ 'including SCP logs.')
+
+
+def ConfigureLogging(args):
+ """Configures the logging level based on command line |args|."""
+
+ if args.really_verbose:
+ args.verbose = True
+
+ logging.basicConfig(level=(logging.DEBUG if args.verbose else logging.INFO),
+ format='%(asctime)s:%(levelname)s:%(name)s:%(message)s')
+
+ # The test server spawner is too noisy with INFO level logging, so tweak
+ # its verbosity a bit by adjusting its logging level.
+ logging.getLogger('chrome_test_server_spawner').setLevel(
+ logging.DEBUG if args.verbose else logging.WARN)
+
+ # Verbose SCP output can be useful at times but oftentimes is just too noisy.
+ # Only enable it if -vv is passed.
+ logging.getLogger('ssh').setLevel(
+ logging.DEBUG if args.really_verbose else logging.WARN)
+
+
+def GetDeploymentTargetForArgs(args):
+ """Constructs a deployment target object using parameters taken from
+ command line arguments."""
+
+ if not args.device:
+ return QemuTarget(args.output_directory, args.target_cpu)
+ else:
+ return DeviceTarget(args.output_directory, args.target_cpu,
+ args.host, args.port, args.ssh_config)
diff --git a/chromium/build/fuchsia/runner_v2/create_runner_script.py b/chromium/build/fuchsia/runner_v2/create_runner_script.py
new file mode 100755
index 00000000000..80fd16dc242
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/create_runner_script.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+#
+# Copyright 2018 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.
+
+"""Creates a script to run a Fushsia executable by delegating to
+build/fuchsia/(exe|test)_runner.py.
+"""
+
+import argparse
+import os
+import re
+import sys
+
+
+SCRIPT_TEMPLATE = """\
+#!/usr/bin/env python
+#
+# This file was generated by build/fuchsia/runner_v2/create_runner_script.py
+
+import os
+import sys
+
+def main():
+ script_directory = os.path.dirname(__file__)
+
+ def ResolvePath(path):
+ \"\"\"Returns an absolute filepath given a path relative to this script.
+ \"\"\"
+ return os.path.abspath(os.path.join(script_directory, path))
+
+ runner_path = ResolvePath('{runner_path}')
+ runner_args = {runner_args}
+ runner_path_args = {runner_path_args}
+ for arg, path in runner_path_args:
+ runner_args.extend([arg, ResolvePath(path)])
+
+ os.execv(runner_path,
+ [runner_path] + runner_args + sys.argv[1:])
+
+if __name__ == '__main__':
+ sys.exit(main())
+"""
+
+
+def main(args):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--runner-script',
+ help='Name of the runner script to use.')
+ parser.add_argument('--script-output-path',
+ help='Output path for executable script.')
+ parser.add_argument('--test-runner-path',
+ help='Path to test_runner.py (optional).')
+ group = parser.add_argument_group('Test runner path arguments.')
+ group.add_argument('--output-directory')
+ group.add_argument('--package')
+ group.add_argument('--package-manifest')
+ args, runner_args = parser.parse_known_args(args)
+
+ def RelativizePathToScript(path):
+ """Returns the path relative to the output script directory."""
+ return os.path.relpath(path, os.path.dirname(args.script_output_path))
+
+ runner_path = args.test_runner_path or os.path.join(
+ os.path.dirname(__file__), args.runner_script)
+ runner_path = RelativizePathToScript(runner_path)
+
+ runner_path_args = []
+ runner_path_args.append(
+ ('--output-directory', RelativizePathToScript(args.output_directory)))
+ runner_path_args.append(
+ ('--package', RelativizePathToScript(args.package)))
+ runner_path_args.append(
+ ('--package-manifest', RelativizePathToScript(args.package_manifest)))
+
+ with open(args.script_output_path, 'w') as script:
+ script.write(SCRIPT_TEMPLATE.format(
+ runner_path=str(runner_path),
+ runner_args=repr(runner_args),
+ runner_path_args=repr(runner_path_args)))
+
+ # Sets the mode of the generated script so that it is executable by the
+ # current user.
+ os.chmod(args.script_output_path, 0750)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
diff --git a/chromium/build/fuchsia/runner_v2/device_target.py b/chromium/build/fuchsia/runner_v2/device_target.py
new file mode 100644
index 00000000000..8e8fc678eea
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/device_target.py
@@ -0,0 +1,112 @@
+# Copyright 2018 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 devices."""
+
+import boot_data
+import common
+import logging
+import os
+import subprocess
+import target
+import time
+import uuid
+
+CONNECT_RETRY_COUNT = 20
+CONNECT_RETRY_WAIT_SECS = 1
+
+class DeviceTarget(target.Target):
+ def __init__(self, output_dir, target_cpu, host=None, port=None,
+ ssh_config=None):
+ """output_dir: The directory which will contain the files that are
+ generated to support the deployment.
+ target_cpu: The CPU architecture of the deployment target. Can be
+ "x64" or "arm64".
+ host: The address of the deployment target device.
+ port: The port of the SSH service on the deployment target device.
+ ssh_config: The path to SSH configuration data."""
+
+ super(DeviceTarget, self).__init__(output_dir, target_cpu)
+
+ self._port = 22
+ self._auto = not host or not ssh_config
+ self._new_instance = True
+
+ if self._auto:
+ self._ssh_config_path = boot_data.GetSSHConfigPath(output_dir)
+ else:
+ self._ssh_config_path = os.path.expanduser(ssh_config)
+ self._host = host
+ if port:
+ self._port = port
+
+ def __Discover(self, node_name):
+ """Returns the IP address and port of a Fuchsia instance discovered on
+ the local area network."""
+
+ netaddr_path = os.path.join(common.SDK_ROOT, 'tools', 'netaddr')
+ command = [netaddr_path, '--fuchsia', '--nowait', node_name]
+ logging.debug(' '.join(command))
+ proc = subprocess.Popen(command,
+ stdout=subprocess.PIPE,
+ stderr=open(os.devnull, 'w'))
+ proc.wait()
+ if proc.returncode == 0:
+ return proc.stdout.readlines()[0].strip()
+ return None
+
+ def Start(self):
+ if self._auto:
+ logging.debug('Starting automatic device deployment.')
+ node_name = boot_data.GetNodeName(self._output_dir)
+ self._host = self.__Discover(node_name)
+ if self._host and self._WaitUntilReady(retries=0):
+ logging.info('Connected to an already booted device.')
+ self._new_instance = False
+ return
+
+ logging.info('Netbooting Fuchsia. ' +
+ 'Please ensure that your device is in bootloader mode.')
+ bootserver_path = os.path.join(common.SDK_ROOT, 'tools', 'bootserver')
+ data_fvm_path = boot_data.ConfigureDataFVM(self._output_dir, True)
+ bootserver_command = [bootserver_path,
+ '-1',
+ '--efi',
+ boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'local.esp.blk'),
+ '--fvm',
+ boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'fvm.sparse.blk'),
+ '--fvm',
+ data_fvm_path,
+ boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'zircon.bin'),
+ boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'bootdata-blobstore.bin'),
+ '--'] + \
+ boot_data.GetKernelArgs(self._output_dir)
+ logging.debug(' '.join(bootserver_command))
+ subprocess.check_call(bootserver_command)
+
+ logging.debug('Waiting for device to join network.')
+ for _ in xrange(CONNECT_RETRY_COUNT):
+ self._host = self.__Discover(node_name)
+ if self._host:
+ break
+ time.sleep(CONNECT_RETRY_WAIT_SECS)
+ if not self._host:
+ raise Exception('Couldn\'t connect to device.')
+
+ logging.debug('host=%s, port=%d' % (self._host, self._port))
+
+ self._WaitUntilReady();
+
+ def IsNewInstance(self):
+ return self._new_instance
+
+ def _GetEndpoint(self):
+ return (self._host, self._port)
+
+ def _GetSshConfigPath(self):
+ return self._ssh_config_path
diff --git a/chromium/build/fuchsia/runner_v2/exe_runner.py b/chromium/build/fuchsia/runner_v2/exe_runner.py
new file mode 100755
index 00000000000..a8edb7a8a6a
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/exe_runner.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+#
+# Copyright 2018 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.
+
+"""Packages a user.bootfs for a Fuchsia boot image, pulling in the runtime
+dependencies of a test binary, and then uses either QEMU from the Fuchsia SDK
+to run, or starts the bootserver to allow running on a hardware device."""
+
+import argparse
+import logging
+import sys
+
+from common_args import AddCommonArgs, ConfigureLogging, \
+ GetDeploymentTargetForArgs
+from run_package import RunPackage
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ AddCommonArgs(parser)
+ parser.add_argument('child_args', nargs='*',
+ help='Arguments for the test process.')
+ args = parser.parse_args()
+ ConfigureLogging(args)
+
+ with GetDeploymentTargetForArgs(args) as target:
+ target.Start()
+ RunPackage(args.output_directory, target, args.package,
+ args.child_args, args.package_manifest)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/chromium/build/fuchsia/runner_v2/net_test_server.py b/chromium/build/fuchsia/runner_v2/net_test_server.py
new file mode 100644
index 00000000000..10d7d4aebf2
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/net_test_server.py
@@ -0,0 +1,124 @@
+# Copyright 2018 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.
+
+import json
+import logging
+import os
+import re
+import select
+import socket
+import sys
+import subprocess
+import tempfile
+import time
+
+DIR_SOURCE_ROOT = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir))
+sys.path.append(os.path.join(DIR_SOURCE_ROOT, 'build', 'util', 'lib', 'common'))
+import chrome_test_server_spawner
+
+PORT_MAP_RE = re.compile('Allocated port (?P<port>\d+) for remote')
+GET_PORT_NUM_TIMEOUT_SECS = 5
+
+
+def _ConnectPortForwardingTask(target, local_port):
+ """Establishes a port forwarding SSH task to a localhost TCP endpoint hosted
+ at port |local_port|. Blocks until port forwarding is established.
+
+ Returns a tuple containing the remote port and the SSH task Popen object."""
+
+ forwarding_flags = ['-NT', # Don't execute command; don't allocate terminal.
+ '-R', '0:localhost:%d' % local_port]
+ task = target.RunCommandPiped([],
+ ssh_args=forwarding_flags,
+ stderr=subprocess.PIPE)
+
+ # SSH reports the remote dynamic port number over stderr.
+ # Unfortunately, the output is incompatible with Python's line buffered
+ # input (or vice versa), so we have to build our own buffered input system to
+ # pull bytes over the pipe.
+ poll_obj = select.poll()
+ poll_obj.register(task.stderr, select.POLLIN)
+ line = ''
+ timeout = time.time() + GET_PORT_NUM_TIMEOUT_SECS
+ while time.time() < timeout:
+ poll_result = poll_obj.poll(max(0, timeout - time.time()))
+ if poll_result:
+ next_char = task.stderr.read(1)
+ if not next_char:
+ break
+ line += next_char
+ if line.endswith('\n'):
+ line.strip()
+ matched = PORT_MAP_RE.match(line)
+ if matched:
+ device_port = int(matched.group('port'))
+ logging.debug('Port forwarding established (local=%d, device=%d)' %
+ (local_port, device_port))
+ return (device_port, task)
+ line = ''
+
+ raise Exception('Could not establish a port forwarding connection.')
+
+
+# Implementation of chrome_test_server_spawner.PortForwarder that uses SSH's
+# remote port forwarding feature to forward ports.
+class SSHPortForwarder(chrome_test_server_spawner.PortForwarder):
+ def __init__(self, target):
+ self._target = target
+
+ # Maps the host (server) port to a tuple consisting of the device port
+ # number and a subprocess.Popen object for the forwarding SSH process.
+ self._port_mapping = {}
+
+ def Map(self, port_pairs):
+ for p in port_pairs:
+ _, host_port = p
+ self._port_mapping[host_port] = \
+ _ConnectPortForwardingTask(self._target, host_port)
+
+ def GetDevicePortForHostPort(self, host_port):
+ return self._port_mapping[host_port][0]
+
+ def Unmap(self, device_port):
+ for host_port, entry in self._port_mapping.iteritems():
+ if entry[0] == device_port:
+ entry[1].terminate()
+ entry[1].wait()
+ del self._port_mapping[host_port]
+ return
+
+ raise Exception('Unmap called for unknown port: %d' % device_port)
+
+
+def SetupTestServer(target, test_concurrency):
+ """Provisions a forwarding test server and configures |target| to use it.
+
+ Returns a tuple with a Popen opbject for the test server process,
+ and a Popen object for the port forwarding connection."""
+
+ logging.debug('Starting test server.')
+ spawning_server = chrome_test_server_spawner.SpawningServer(
+ 0, SSHPortForwarder(target), test_concurrency)
+ forwarded_port, forwarding_process = _ConnectPortForwardingTask(
+ target, spawning_server.server_port)
+ spawning_server.Start()
+
+ logging.debug('Test server listening for connections (port=%d)' %
+ spawning_server.server_port)
+ logging.debug('Forwarded port is %d' % forwarded_port)
+
+ config_file = tempfile.NamedTemporaryFile(delete=True)
+
+ # Clean up the config JSON to only pass ports. See https://crbug.com/810209 .
+ config_file.write(json.dumps({
+ 'name': 'testserver',
+ 'address': '127.0.0.1',
+ 'spawner_url_base': 'http://localhost:%d' % forwarded_port
+ }))
+
+ config_file.flush()
+ target.PutFile(config_file.name, '/system/net-test-server-config')
+
+ return spawning_server, forwarding_process
diff --git a/chromium/build/fuchsia/runner_v2/qemu_target.py b/chromium/build/fuchsia/runner_v2/qemu_target.py
index d5ffb449bd3..0c1a14d944c 100644
--- a/chromium/build/fuchsia/runner_v2/qemu_target.py
+++ b/chromium/build/fuchsia/runner_v2/qemu_target.py
@@ -4,8 +4,9 @@
"""Implements commands for running and interacting with Fuchsia on QEMU."""
-import boot_image
+import boot_data
import common
+import logging
import target
import os
import platform
@@ -31,13 +32,14 @@ def _GetAvailableTcpPort():
class QemuTarget(target.Target):
- def __init__(self, output_dir, target_cpu, verbose=True):
+ def __init__(self, output_dir, target_cpu, ram_size_mb=2048):
"""output_dir: The directory which will contain the files that are
generated to support the QEMU deployment.
- target_cpu: The emulated target CPU architecture. Can be 'x64' or 'arm64'.
- verbose: If true, emits extra non-error logging data for diagnostics."""
- super(QemuTarget, self).__init__(output_dir, target_cpu, verbose)
+ target_cpu: The emulated target CPU architecture.
+ Can be 'x64' or 'arm64'."""
+ super(QemuTarget, self).__init__(output_dir, target_cpu)
self._qemu_process = None
+ self._ram_size_mb = ram_size_mb
def __enter__(self):
return self
@@ -49,20 +51,32 @@ class QemuTarget(target.Target):
self.Shutdown()
def Start(self):
- self._ssh_config_path, boot_image_path = boot_image.CreateBootFS(
- self._output_dir, self._GetTargetSdkArch())
qemu_path = os.path.join(
common.SDK_ROOT, 'qemu', 'bin',
'qemu-system-' + self._GetTargetSdkArch())
- kernel_args = ['devmgr.epoch=%d' % time.time()]
+ kernel_args = boot_data.GetKernelArgs(self._output_dir)
qemu_command = [qemu_path,
- '-m', '2048',
+ '-m', str(self._ram_size_mb),
'-nographic',
- '-kernel', boot_image._GetKernelPath(self._GetTargetSdkArch()),
- '-initrd', boot_image_path,
+ '-kernel', boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'zircon.bin'),
+ '-initrd', boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'bootdata-blobstore.bin'),
'-smp', '4',
+ # Attach the blobstore and data volumes. Use snapshot mode to discard
+ # any changes.
+ '-snapshot',
+ '-drive', 'file=%s,format=qcow2,if=none,id=data,snapshot=on' %
+ boot_data.GetTargetFile(self._GetTargetSdkArch(),
+ 'fvm.blk.qcow2'),
+ '-drive', 'file=%s,format=qcow2,if=none,id=blobstore,snapshot=on' %
+ self._MakeQcowDisk(boot_data.ConfigureDataFVM(self._output_dir,
+ False)),
+ '-device', 'virtio-blk-pci,drive=data',
+ '-device', 'virtio-blk-pci,drive=blobstore',
+
# Use stdio for the guest OS only; don't attach the QEMU interactive
# monitor.
'-serial', 'stdio',
@@ -110,18 +124,34 @@ class QemuTarget(target.Target):
# Python script panicking and aborting.
# The precise root cause is still nebulous, but this fix works.
# See crbug.com/741194.
+ logging.debug('Launching QEMU.')
+ logging.debug(' '.join(qemu_command))
self._qemu_process = subprocess.Popen(
- qemu_command, stdout=subprocess.PIPE, stdin=open(os.devnull))
+ qemu_command, stdout=open(os.devnull), stdin=open(os.devnull),
+ stderr=open(os.devnull))
- self._Attach();
+ self._WaitUntilReady();
def Shutdown(self):
+ logging.info('Shutting down QEMU.')
self._qemu_process.kill()
+ def GetQemuStdout(self):
+ return self._qemu_process.stdout
+
def _GetEndpoint(self):
- return ('127.0.0.1', self._host_ssh_port)
+ return ('localhost', self._host_ssh_port)
def _GetSshConfigPath(self):
- return self._ssh_config_path
-
-
+ return boot_data.GetSSHConfigPath(self._output_dir)
+
+ def _MakeQcowDisk(self, disk_path):
+ """Creates a QEMU copy-on-write version of |disk_path| in the output
+ directory."""
+
+ qimg_path = os.path.join(common.SDK_ROOT, 'qemu', 'bin', 'qemu-img')
+ output_path = os.path.join(self._output_dir,
+ os.path.basename(disk_path) + '.qcow2')
+ subprocess.check_call([qimg_path, 'create', '-q', '-f', 'qcow2',
+ '-b', disk_path, output_path])
+ return output_path
diff --git a/chromium/build/fuchsia/runner_v2/qemu_target_test.py b/chromium/build/fuchsia/runner_v2/qemu_target_test.py
index ab287684246..cefd8f1ccba 100755
--- a/chromium/build/fuchsia/runner_v2/qemu_target_test.py
+++ b/chromium/build/fuchsia/runner_v2/qemu_target_test.py
@@ -5,6 +5,7 @@
import qemu_target
import shutil
+import subprocess
import tempfile
import time
import unittest
@@ -31,10 +32,10 @@ with qemu_target.QemuTarget(tmpdir, 'x64') as target:
tmp_path = tmpdir + "/payload"
with open(tmp_path, "w") as tmpfile:
tmpfile.write(TEST_PAYLOAD)
- target.CopyTo(tmp_path, '/tmp/payload')
+ target.PutFile(tmp_path, '/tmp/payload')
tmp_path_roundtrip = tmp_path + ".roundtrip"
- target.CopyFrom('/tmp/payload', tmp_path_roundtrip)
+ target.GetFile('/tmp/payload', tmp_path_roundtrip)
with open(tmp_path_roundtrip) as roundtrip:
self.assertEqual(TEST_PAYLOAD, roundtrip.read())
@@ -45,7 +46,9 @@ with qemu_target.QemuTarget(tmpdir, 'x64') as target:
self.assertEqual(1, target.RunCommand(['false']))
def testRunCommandPiped(self):
- proc = target.RunCommandPiped(['cat'])
+ proc = target.RunCommandPiped(['cat'],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE)
proc.stdin.write(TEST_PAYLOAD)
proc.stdin.flush()
proc.stdin.close()
diff --git a/chromium/build/fuchsia/runner_v2/remote_cmd.py b/chromium/build/fuchsia/runner_v2/remote_cmd.py
index 8d7ad3a9e56..67d107f9f54 100644
--- a/chromium/build/fuchsia/runner_v2/remote_cmd.py
+++ b/chromium/build/fuchsia/runner_v2/remote_cmd.py
@@ -5,16 +5,23 @@
"""Helper functions for remotely executing and copying files over a SSH
connection."""
+import logging
import os
import subprocess
+import sys
_SSH = ['ssh']
-_SCP = ['scp']
+_SCP = ['scp', '-C'] # Use gzip compression.
+_SSH_LOGGER = logging.getLogger('ssh')
COPY_TO_TARGET = 0
COPY_FROM_TARGET = 1
+def _IsLinkLocalIPv6(hostname):
+ return hostname.startswith('fe80::')
+
+
def RunSsh(config_path, host, port, command, silent):
"""Executes an SSH command on the remote host and blocks until completion.
@@ -29,6 +36,7 @@ def RunSsh(config_path, host, port, command, silent):
ssh_command = _SSH + ['-F', config_path,
host,
'-p', str(port)] + command
+ _SSH_LOGGER.debug('ssh exec: ' + ' '.join(ssh_command))
if silent:
devnull = open(os.devnull, 'w')
return subprocess.call(ssh_command, stderr=devnull, stdout=devnull)
@@ -36,7 +44,8 @@ def RunSsh(config_path, host, port, command, silent):
return subprocess.call(ssh_command)
-def RunPipedSsh(config_path, host, port, command):
+def RunPipedSsh(config_path, host, port, command = None, ssh_args = None,
+ **kwargs):
"""Executes an SSH command on the remote host and returns a process object
with access to the command's stdio streams. Does not block.
@@ -44,42 +53,57 @@ def RunPipedSsh(config_path, host, port, command):
host: The hostname or IP address of the remote host.
port: The port to connect to.
command: A list of strings containing the command and its arguments.
- silent: If true, suppresses all output from 'ssh'.
+ ssh_args: Arguments that will be passed to SSH.
+ kwargs: A dictionary of parameters to be passed to subprocess.Popen().
+ The parameters can be used to override stdin and stdout, for example.
Returns a Popen object for the command."""
+ if not command:
+ command = []
+ if not ssh_args:
+ ssh_args = []
+
ssh_command = _SSH + ['-F', config_path,
host,
- '-p', str(port)] + command
- return subprocess.Popen(ssh_command,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- stdin=subprocess.PIPE)
+ '-p', str(port)] + ssh_args + ['--'] + command
+ _SSH_LOGGER.debug(' '.join(ssh_command))
+ return subprocess.Popen(ssh_command, **kwargs)
-def RunScp(config_path, host, port, source, dest, direction):
+def RunScp(config_path, host, port, sources, dest, direction, recursive=False):
"""Copies a file to or from a remote host using SCP and blocks until
completion.
config_path: Full path to SSH configuration.
host: The hostname or IP address of the remote host.
port: The port to connect to.
- source: The path of the file to be copied.
+ sources: Paths of the files to be copied.
dest: The path that |source| will be copied to.
direction: Indicates whether the file should be copied to
or from the remote side.
Valid values are COPY_TO_TARGET or COPY_FROM_TARGET.
+ recursive: If true, performs a recursive copy.
Function will raise an assertion if a failure occurred."""
+ scp_command = _SCP[:]
+ if ':' in host:
+ scp_command.append('-6')
+ host = '[' + host + ']'
+ if _SSH_LOGGER.getEffectiveLevel() == logging.DEBUG:
+ scp_command.append('-v')
+ if recursive:
+ scp_command.append('-r')
+
if direction == COPY_TO_TARGET:
dest = "%s:%s" % (host, dest)
else:
- source = "%s:%s" % (host, source)
-
- scp_command = _SCP + ['-F', config_path,
- '-P', str(port),
- source,
- dest]
- devnull = open('/dev/null', 'w')
- subprocess.check_call(scp_command, stdout=devnull)
+ sources = ["%s:%s" % (host, source) for source in sources]
+
+ scp_command += ['-F', config_path, '-P', str(port)]
+ scp_command += sources
+ scp_command += [dest]
+
+ _SSH_LOGGER.debug(' '.join(scp_command))
+ subprocess.check_call(scp_command, stdout=open(os.devnull, 'w'))
diff --git a/chromium/build/fuchsia/runner_v2/run_package.py b/chromium/build/fuchsia/runner_v2/run_package.py
new file mode 100644
index 00000000000..d7b57fe710f
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/run_package.py
@@ -0,0 +1,180 @@
+# Copyright 2018 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.
+
+"""Contains a helper function for deploying and executing a packaged
+executable on a Target."""
+
+import common
+import json
+import logging
+import os
+import shutil
+import subprocess
+import tempfile
+import uuid
+
+from symbolizer import FilterStream
+
+FAR = os.path.join(common.SDK_ROOT, 'tools', 'far')
+PM = os.path.join(common.SDK_ROOT, 'tools', 'pm')
+
+
+def _Deploy(target, output_dir, archive_path):
+ """Converts the FAR archive at |archive_path| into a Fuchsia package
+ and deploys it to |target|'s blobstore. If |incremental| is set,
+ then the remote target's blobstore is queried and only the changed blobs
+ are copied.
+
+ Returns: the name of the package, which can be run by executing
+ 'run <package_name>' on the target."""
+
+ logging.info('Deploying package to target.')
+
+ staging_path = None
+ blob_link_dir = None
+ far_contents_dir = None
+ try:
+ package_name = os.path.basename(archive_path)
+
+ logging.debug('Extracting archive contents.')
+ far_contents_dir = tempfile.mkdtemp()
+ subprocess.check_call([FAR, 'extract', '--archive=%s' % archive_path,
+ '--output=%s' % far_contents_dir])
+
+ logging.debug('Building package metadata.')
+ with open(os.path.join(far_contents_dir, 'meta', 'package.json'), 'w') \
+ as package_json:
+ json.dump({'version': '0', 'name': package_name}, package_json)
+ manifest = tempfile.NamedTemporaryFile()
+ for root, _, files in os.walk(far_contents_dir):
+ for f in files:
+ path = os.path.join(root, f)
+ manifest.write('%s=%s\n' %
+ (os.path.relpath(path, far_contents_dir), path))
+ manifest.flush()
+
+ # Generate the package signing key.
+ signing_key_path = os.path.join(output_dir, 'signing-key')
+ if not os.path.exists(signing_key_path):
+ subprocess.check_call([PM, '-k', signing_key_path, 'genkey'])
+
+ # Build the package metadata archive.
+ staging_path = tempfile.mkdtemp()
+ subprocess.check_call([PM, '-o', staging_path, '-k', signing_key_path,
+ '-m', manifest.name, 'build'])
+
+ # If the target is already warm, then it's possible that some time can be
+ # saved by only sending the sending the changed blobs.
+ # If the target is newly booted, however, it can be safely assumed that the
+ # target doesn't contain the blobs, so the query step can be skipped.
+ existing_blobs = set()
+ if not target.IsNewInstance():
+ logging.debug('Querying the target blobstore\'s state.')
+ ls = target.RunCommandPiped(['ls', '/blobstore'], stdout=subprocess.PIPE)
+ for blob in ls.stdout:
+ existing_blobs.add(blob.strip())
+ ls.wait()
+
+ # Locally stage the blobs and metadata into a local temp dir to prepare for
+ # a one-shot 'scp' copy.
+ blob_link_dir = tempfile.mkdtemp()
+ os.symlink(os.path.join(staging_path, 'meta.far'),
+ os.path.join(blob_link_dir, 'meta.far'))
+ for next_line in open(os.path.join(staging_path, 'meta', 'contents')):
+ rel_path, blob = next_line.strip().split('=')
+ dest_path = os.path.join(blob_link_dir, blob)
+ if blob not in existing_blobs:
+ existing_blobs.add(blob)
+ os.symlink(os.path.join(far_contents_dir, rel_path),
+ os.path.join(blob_link_dir, blob))
+
+ # Copy the package metadata and contents into tmpfs, and then execute
+ # remote commands to copy the data into pkgfs/incoming.
+ # We can't use 'scp' to copy directly into /pkgfs/incoming due to a bug in
+ # Fuchsia (see bug PKG-9).
+ logging.debug('Deploying to target blobstore.')
+ target.PutFile(blob_link_dir, '/tmp', recursive=True)
+
+ # Copy everything into target's /pkgfs/incoming and then clean up.
+ # The command is joined with double ampersands so that all the steps can
+ # be done over the lifetime of a single SSH connection.
+ # Note that 'mv' moves to pkgfs are unsupported (Fuchsia bug PKG-9).
+ blob_tmpdir = os.path.join('/tmp/', os.path.basename(blob_link_dir))
+ result = target.RunCommand([
+ # Speed things up by using builtin commands, which don't suffer the
+ # dynamic library loading speed penalty that's present in the
+ # executables.
+ 'unset PATH', '&&'
+
+ # Separate meta.far from the blobs so we can add the blobs in
+ # bulk in advance of registering the package (faster).
+ 'mv', os.path.join(blob_tmpdir, 'meta.far'), '/tmp', '&&',
+
+ # Register the package.
+ 'cp', '/tmp/meta.far', '/pkgfs/incoming', '&&',
+
+ # Install the blobs into /pkgfs.
+ 'for', 'f', 'in', os.path.join(blob_tmpdir, '*'), ';', 'do',
+ 'cp', '$f', '/pkgfs/incoming', ';',
+ 'done', '&&',
+
+ 'rm', '-rf', blob_tmpdir, '&&',
+
+ 'rm', '/tmp/meta.far'])
+
+
+ if result != 0:
+ raise Exception('Deployment failed.')
+
+ return package_name
+
+ finally:
+ if blob_link_dir:
+ shutil.rmtree(blob_link_dir)
+ if staging_path:
+ shutil.rmtree(staging_path)
+ if far_contents_dir:
+ shutil.rmtree(far_contents_dir)
+
+
+def RunPackage(output_dir, target, package_path, run_args,
+ symbolizer_config=None):
+ """Copies the Fuchsia package at |package_path| to the target,
+ executes it with |run_args|, and symbolizes its output.
+
+ output_dir: The path containing the build output files.
+ target: The deployment Target object that will run the package.
+ package_path: The path to the .far package file.
+ run_args: The command-linearguments which will be passed to the Fuchsia process.
+ symbolizer_config: A newline delimited list of source files contained in the
+ package. Omitting this parameter will disable symbolization.
+
+ Returns the exit code of the remote package process."""
+
+
+ package_name = _Deploy(target, output_dir, package_path)
+ command = ['run', package_name] + run_args
+ process = target.RunCommandPiped(command,
+ stdin=open(os.devnull, 'r'),
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+
+ if symbolizer_config:
+ # Decorate the process output stream with the symbolizer.
+ output = FilterStream(process.stdout, package_name,
+ symbolizer_config, output_dir)
+ else:
+ output = process.stdout
+
+ for next_line in output:
+ print next_line
+
+ process.wait()
+ if process.returncode != 0:
+ # The test runner returns an error status code if *any* tests fail,
+ # so we should proceed anyway.
+ logging.warning('Command exited with non-zero status code %d.' %
+ process.returncode)
+
+ return process.returncode
diff --git a/chromium/build/fuchsia/runner_v2/symbolizer.py b/chromium/build/fuchsia/runner_v2/symbolizer.py
new file mode 100644
index 00000000000..4764c26dd62
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/symbolizer.py
@@ -0,0 +1,229 @@
+# Copyright 2018 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.
+
+import logging
+import os
+import re
+import subprocess
+
+# Matches the coarse syntax of a backtrace entry.
+_BACKTRACE_PREFIX_RE = re.compile(r'bt#(?P<frame_id>\d+): ')
+
+# Matches the specific fields of a backtrace entry.
+# Back-trace line matcher/parser assumes that 'pc' is always present, and
+# expects that 'sp' and ('binary','pc_offset') may also be provided.
+_BACKTRACE_ENTRY_RE = re.compile(
+ r'pc 0(?:x[0-9a-f]+)?' +
+ r'(?: sp 0x[0-9a-f]+)?' +
+ r'(?: \((?P<binary>\S+),(?P<pc_offset>0x[0-9a-f]+)\))?$')
+
+
+def _GetUnstrippedPath(path):
+ """If there is a binary located at |path|, returns a path to its unstripped
+ source.
+
+ Returns None if |path| isn't a binary or doesn't exist in the lib.unstripped
+ or exe.unstripped directories."""
+
+ if path.endswith('.so'):
+ maybe_unstripped_path = os.path.normpath(
+ os.path.join(path, os.path.pardir, 'lib.unstripped',
+ os.path.basename(path)))
+ else:
+ maybe_unstripped_path = os.path.normpath(
+ os.path.join(path, os.path.pardir, 'exe.unstripped',
+ os.path.basename(path)))
+
+ if not os.path.exists(maybe_unstripped_path):
+ return None
+
+ with open(maybe_unstripped_path, 'rb') as f:
+ file_tag = f.read(4)
+ if file_tag != '\x7fELF':
+ logging.warn('Expected an ELF binary: ' + maybe_unstripped_path)
+ return None
+
+ return maybe_unstripped_path
+
+
+def FilterStream(stream, package_name, manifest_path, output_dir):
+ """Looks for backtrace lines from an iterable |stream| and symbolizes them.
+ Yields a stream of strings with symbolized entries replaced."""
+
+ return _SymbolizerFilter(package_name,
+ manifest_path,
+ output_dir).SymbolizeStream(stream)
+
+
+class _SymbolizerFilter(object):
+ """Adds backtrace symbolization capabilities to a process output stream."""
+
+ def __init__(self, package_name, manifest_path, output_dir):
+ self._symbols_mapping = {}
+ self._output_dir = output_dir
+ self._package_name = package_name
+
+ # Compute remote/local path mappings using the manifest data.
+ for next_line in open(manifest_path):
+ target, source = next_line.strip().split('=')
+ stripped_binary_path = _GetUnstrippedPath(os.path.join(output_dir, source))
+ if not stripped_binary_path:
+ continue
+
+ self._symbols_mapping[os.path.basename(target)] = stripped_binary_path
+ self._symbols_mapping[target] = stripped_binary_path
+ if target == 'bin/app':
+ self._symbols_mapping[package_name] = stripped_binary_path
+ logging.debug('Symbols: %s -> %s' % (source, target))
+
+ def _SymbolizeEntries(self, entries):
+ """Symbolizes the parsed backtrace |entries| by calling addr2line.
+
+ Returns a set of (frame_id, result) pairs."""
+
+ filename_re = re.compile(r'at ([-._a-zA-Z0-9/+]+):(\d+)')
+
+ # Use addr2line to symbolize all the |pc_offset|s in |entries| in one go.
+ # Entries with no |debug_binary| are also processed here, so that we get
+ # consistent output in that case, with the cannot-symbolize case.
+ addr2line_output = None
+ if entries[0].has_key('debug_binary'):
+ addr2line_args = (['addr2line', '-Cipf', '-p',
+ '--exe=' + entries[0]['debug_binary']] +
+ map(lambda entry: entry['pc_offset'], entries))
+ addr2line_output = subprocess.check_output(addr2line_args).splitlines()
+ assert addr2line_output
+
+ results = {}
+ for entry in entries:
+ raw, frame_id = entry['raw'], entry['frame_id']
+ prefix = '#%s: ' % frame_id
+
+ if not addr2line_output:
+ # Either there was no addr2line output, or too little of it.
+ filtered_line = raw
+ else:
+ output_line = addr2line_output.pop(0)
+
+ # Relativize path to the current working (output) directory if we see
+ # a filename.
+ def RelativizePath(m):
+ relpath = os.path.relpath(os.path.normpath(m.group(1)))
+ return 'at ' + relpath + ':' + m.group(2)
+ filtered_line = filename_re.sub(RelativizePath, output_line)
+
+ if '??' in filtered_line.split():
+ # If symbolization fails just output the raw backtrace.
+ filtered_line = raw
+ else:
+ # Release builds may inline things, resulting in "(inlined by)" lines.
+ inlined_by_prefix = " (inlined by)"
+ while (addr2line_output and
+ addr2line_output[0].startswith(inlined_by_prefix)):
+ inlined_by_line = \
+ '\n' + (' ' * len(prefix)) + addr2line_output.pop(0)
+ filtered_line += filename_re.sub(RelativizePath, inlined_by_line)
+
+ results[entry['frame_id']] = prefix + filtered_line
+
+ return results
+
+ def _LookupDebugBinary(self, entry):
+ """Looks up the binary listed in |entry| in the |_symbols_mapping|.
+ Returns the corresponding host-side binary's filename, or None."""
+
+ binary = entry['binary']
+ if not binary:
+ return None
+
+ app_prefix = 'app:'
+ if binary.startswith(app_prefix):
+ binary = binary[len(app_prefix):]
+
+ # We change directory into /system/ before running the target executable, so
+ # all paths are relative to "/system/", and will typically start with "./".
+ # Some crashes still uses the full filesystem path, so cope with that, too.
+ pkg_prefix = '/pkg/'
+ cwd_prefix = './'
+ if binary.startswith(cwd_prefix):
+ binary = binary[len(cwd_prefix):]
+ elif binary.startswith(pkg_prefix):
+ binary = binary[len(pkg_prefix):]
+ # Allow other paths to pass-through; sometimes neither prefix is present.
+
+ if binary in self._symbols_mapping:
+ return self._symbols_mapping[binary]
+
+ # |binary| may be truncated by the crashlogger, so if there is a unique
+ # match for the truncated name in |symbols_mapping|, use that instead.
+ matches = filter(lambda x: x.startswith(binary),
+ self._symbols_mapping.keys())
+ if len(matches) == 1:
+ return self._symbols_mapping[matches[0]]
+
+ return None
+
+ def _SymbolizeBacktrace(self, backtrace):
+ """Group |backtrace| entries according to the associated binary, and locate
+ the path to the debug symbols for that binary, if any."""
+
+ batches = {}
+
+ for entry in backtrace:
+ debug_binary = self._LookupDebugBinary(entry)
+ if debug_binary:
+ entry['debug_binary'] = debug_binary
+ batches.setdefault(debug_binary, []).append(entry)
+
+ # Run _SymbolizeEntries on each batch and collate the results.
+ symbolized = {}
+ for batch in batches.itervalues():
+ symbolized.update(self._SymbolizeEntries(batch))
+
+ # Map each entry to its symbolized form, by frame-id, and return the list.
+ return map(lambda entry: symbolized[entry['frame_id']], backtrace)
+
+ def SymbolizeStream(self, stream):
+ """Creates a symbolized logging stream object using the output from
+ |stream|."""
+
+ # A buffer of backtrace entries awaiting symbolization, stored as dicts:
+ # raw: The original back-trace line that followed the prefix.
+ # frame_id: backtrace frame number (starting at 0).
+ # binary: path to executable code corresponding to the current frame.
+ # pc_offset: memory offset within the executable.
+ backtrace_entries = []
+
+ # Read from the stream until we hit EOF.
+ for line in stream:
+ line = line.rstrip()
+
+ # Look for the back-trace prefix, otherwise just emit the line.
+ matched = _BACKTRACE_PREFIX_RE.match(line)
+ if not matched:
+ yield line
+ continue
+ backtrace_line = line[matched.end():]
+
+ # If this was the end of a back-trace then symbolize and emit it.
+ frame_id = matched.group('frame_id')
+ if backtrace_line == 'end':
+ if backtrace_entries:
+ for processed in self._SymbolizeBacktrace(backtrace_entries):
+ yield processed
+ backtrace_entries = []
+ continue
+
+ # Parse the program-counter offset, etc into |backtrace_entries|.
+ matched = _BACKTRACE_ENTRY_RE.match(backtrace_line)
+ if matched:
+ # |binary| and |pc_offset| will be None if not present.
+ backtrace_entries.append(
+ {'raw': backtrace_line, 'frame_id': frame_id,
+ 'binary': matched.group('binary'),
+ 'pc_offset': matched.group('pc_offset')})
+ else:
+ backtrace_entries.append(
+ {'raw': backtrace_line, 'frame_id': frame_id,
+ 'binary': None, 'pc_offset': None})
diff --git a/chromium/build/fuchsia/runner_v2/target.py b/chromium/build/fuchsia/runner_v2/target.py
index 05ee996db64..b5a8bfad9e7 100644
--- a/chromium/build/fuchsia/runner_v2/target.py
+++ b/chromium/build/fuchsia/runner_v2/target.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import logging
import os
import remote_cmd
import subprocess
@@ -14,75 +15,117 @@ _ATTACH_MAX_RETRIES = 10
_ATTACH_RETRY_INTERVAL = 1
+class FuchsiaTargetException(Exception):
+ def __init__(self, message):
+ super(FuchsiaTargetException, self).__init__(message)
+
+
class Target(object):
- """Abstract base class representing a Fuchsia deployment target."""
+ """Base class representing a Fuchsia deployment target."""
- def __init__(self, output_dir, target_cpu, verbose):
- self._target_cpu = target_cpu
+ def __init__(self, output_dir, target_cpu):
self._output_dir = output_dir
self._started = False
self._dry_run = False
- self._vlogger = sys.stdout if verbose else open(os.devnull, 'w')
+ self._target_cpu = target_cpu
+
+ # Functions used by the Python context manager for teardown.
+ def __enter__(self):
+ return self
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ return self
def Start(self):
"""Handles the instantiation and connection process for the Fuchsia
target instance."""
+
pass
def IsStarted(self):
- """Returns true if the Fuchsia target instance is ready to accept
+ """Returns True if the Fuchsia target instance is ready to accept
commands."""
+
return self._started
- def RunCommandPiped(self, command):
+ def IsNewInstance(self):
+ """Returns True if the connected target instance is newly provisioned."""
+
+ return True
+
+ def RunCommandPiped(self, command, **kwargs):
"""Starts a remote command and immediately returns a Popen object for the
command. The caller may interact with the streams, inspect the status code,
wait on command termination, etc.
command: A list of strings representing the command and arguments.
+ kwargs: A dictionary of parameters to be passed to subprocess.Popen().
+ The parameters can be used to override stdin and stdout, for example.
Returns: a Popen object.
Note: method does not block."""
- self._AssertStarted()
+ self._AssertIsStarted()
+ logging.debug('running (non-blocking) \'%s\'.' % ' '.join(command))
host, port = self._GetEndpoint()
- return remote_cmd.RunPipedSsh(self._GetSshConfigPath(), host, port, command)
+ return remote_cmd.RunPipedSsh(self._GetSshConfigPath(), host, port, command,
+ **kwargs)
def RunCommand(self, command, silent=False):
"""Executes a remote command and waits for it to finish executing.
Returns the exit code of the command."""
- self._AssertStarted()
+ self._AssertIsStarted()
+ logging.debug('running \'%s\'.' % ' '.join(command))
host, port = self._GetEndpoint()
return remote_cmd.RunSsh(self._GetSshConfigPath(), host, port, command,
silent)
- def CopyTo(self, source, dest):
+ def PutFile(self, source, dest, recursive=False):
"""Copies a file from the local filesystem to the target filesystem.
source: The path of the file being copied.
- dest: The path on the remote filesystem which will be copied to."""
+ dest: The path on the remote filesystem which will be copied to.
+ recursive: If true, performs a recursive copy."""
+
+ assert type(source) is str
+ self.PutFiles([source], dest, recursive)
+
+ def PutFiles(self, sources, dest, recursive=False):
+ """Copies files from the local filesystem to the target filesystem.
+
+ sources: List of local file paths to copy from, or a single path.
+ dest: The path on the remote filesystem which will be copied to.
+ recursive: If true, performs a recursive copy."""
- self._AssertStarted()
+ assert type(sources) is tuple or type(sources) is list
+ self._AssertIsStarted()
host, port = self._GetEndpoint()
+ logging.debug('copy local:%s => remote:%s' % (sources, dest))
command = remote_cmd.RunScp(self._GetSshConfigPath(), host, port,
- source, dest, remote_cmd.COPY_TO_TARGET)
+ sources, dest, remote_cmd.COPY_TO_TARGET,
+ recursive)
- def CopyFrom(self, source, dest):
+ def GetFile(self, source, dest):
"""Copies a file from the target filesystem to the local filesystem.
source: The path of the file being copied.
dest: The path on the local filesystem which will be copied to."""
- self._AssertStarted()
+ assert type(source) is str
+ self.GetFiles([source], dest)
+
+ def GetFiles(self, sources, dest):
+ """Copies files from the target filesystem to the local filesystem.
+
+ sources: List of remote file paths to copy.
+ dest: The path on the local filesystem which will be copied to."""
+ assert type(sources) is tuple or type(sources) is list
+ self._AssertIsStarted()
host, port = self._GetEndpoint()
+ logging.debug('copy remote:%s => local:%s' % (sources, dest))
return remote_cmd.RunScp(self._GetSshConfigPath(), host, port,
- source, dest, remote_cmd.COPY_FROM_TARGET)
-
- def Shutdown(self):
- self.RunCommand(_SHUTDOWN_CMD)
- self._started = False
+ sources, dest, remote_cmd.COPY_FROM_TARGET)
def _GetEndpoint(self):
"""Returns a (host, port) tuple for the SSH connection to the target."""
@@ -94,28 +137,31 @@ class Target(object):
return 'aarch64'
elif self._target_cpu == 'x64':
return 'x86_64'
- raise Exception('Unknown target_cpu:' + self._target_cpu)
+ raise FuchsiaTargetException('Unknown target_cpu:' + self._target_cpu)
- def _AssertStarted(self):
+ def _AssertIsStarted(self):
assert self.IsStarted()
- def _Attach(self):
- self._vlogger.write('Trying to connect over SSH...')
- self._vlogger.flush()
- for _ in xrange(_ATTACH_MAX_RETRIES):
+ def _WaitUntilReady(self, retries=_ATTACH_MAX_RETRIES):
+ logging.debug('Connecting to Fuchsia using SSH.')
+ for _ in xrange(retries+1):
host, port = self._GetEndpoint()
- if remote_cmd.RunSsh(self._ssh_config_path, host, port, ['echo'],
+ if remote_cmd.RunSsh(self._GetSshConfigPath(), host, port, ['true'],
True) == 0:
- self._vlogger.write(' connected!\n')
- self._vlogger.flush()
+ logging.debug('Connected!')
self._started = True
- return
- self._vlogger.write('.')
- self._vlogger.flush()
+ return True
time.sleep(_ATTACH_RETRY_INTERVAL)
sys.stderr.write(' timeout limit reached.\n')
- raise Exception('Couldn\'t connect to QEMU using SSH.')
+ raise FuchsiaTargetException('Couldn\'t connect using SSH.')
def _GetSshConfigPath(self, path):
raise NotImplementedError
+ def _GetTargetSdkArch(self):
+ """Returns the Fuchsia SDK architecture name for the target CPU."""
+ if self._target_cpu == 'arm64':
+ return 'aarch64'
+ elif self._target_cpu == 'x64':
+ return 'x86_64'
+ raise Exception('Unknown target_cpu %s:' % self._target_cpu)
diff --git a/chromium/build/fuchsia/runner_v2/test_runner.py b/chromium/build/fuchsia/runner_v2/test_runner.py
new file mode 100755
index 00000000000..d8caa3da091
--- /dev/null
+++ b/chromium/build/fuchsia/runner_v2/test_runner.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+#
+# Copyright 2018 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.
+
+"""Packages a user.bootfs for a Fuchsia boot image, pulling in the runtime
+dependencies of a test binary, and then uses either QEMU from the Fuchsia SDK
+to run, or starts the bootserver to allow running on a hardware device."""
+
+import argparse
+import json
+import logging
+import os
+import socket
+import subprocess
+import sys
+import tempfile
+import time
+
+from common_args import AddCommonArgs, ConfigureLogging, GetDeploymentTargetForArgs
+from net_test_server import SetupTestServer
+from run_package import RunPackage
+
+DEFAULT_TEST_CONCURRENCY = 4
+TEST_RESULT_PATH = '/data/test_summary.json'
+TEST_FILTER_PATH = '/data/test_filter.txt'
+
+def main():
+ parser = argparse.ArgumentParser()
+ AddCommonArgs(parser)
+ parser.add_argument('--gtest_filter',
+ help='GTest filter to use in place of any default.')
+ parser.add_argument('--gtest_repeat',
+ help='GTest repeat value to use. This also disables the '
+ 'test launcher timeout.')
+ parser.add_argument('--gtest_break_on_failure', action='store_true',
+ default=False,
+ help='Should GTest break on failure; useful with '
+ '--gtest_repeat.')
+ parser.add_argument('--single-process-tests', action='store_true',
+ default=False,
+ help='Runs the tests and the launcher in the same '
+ 'process. Useful for debugging.')
+ parser.add_argument('--test-launcher-batch-limit',
+ type=int,
+ help='Sets the limit of test batch to run in a single '
+ 'process.')
+ # --test-launcher-filter-file is specified relative to --output-directory,
+ # so specifying type=os.path.* will break it.
+ parser.add_argument('--test-launcher-filter-file',
+ default=None,
+ help='Override default filter file passed to target test '
+ 'process. Set an empty path to disable filtering.')
+ parser.add_argument('--test-launcher-jobs',
+ type=int,
+ help='Sets the number of parallel test jobs.')
+ parser.add_argument('--test-launcher-summary-output',
+ help='Where the test launcher will output its json.')
+ parser.add_argument('--enable-test-server', action='store_true',
+ default=False,
+ help='Enable Chrome test server spawner.')
+ parser.add_argument('child_args', nargs='*',
+ help='Arguments for the test process.')
+ args = parser.parse_args()
+ ConfigureLogging(args)
+
+ child_args = ['--test-launcher-retry-limit=0']
+ if args.single_process_tests:
+ child_args.append('--single-process-tests')
+ if args.test_launcher_batch_limit:
+ child_args.append('--test-launcher-batch-limit=%d' %
+ args.test_launcher_batch_limit)
+
+ test_concurrency = args.test_launcher_jobs \
+ if args.test_launcher_jobs else DEFAULT_TEST_CONCURRENCY
+ child_args.append('--test-launcher-jobs=%d' % test_concurrency)
+
+ if args.gtest_filter:
+ child_args.append('--gtest_filter=' + args.gtest_filter)
+ if args.gtest_repeat:
+ child_args.append('--gtest_repeat=' + args.gtest_repeat)
+ child_args.append('--test-launcher-timeout=-1')
+ if args.gtest_break_on_failure:
+ child_args.append('--gtest_break_on_failure')
+ if args.child_args:
+ child_args.extend(args.child_args)
+
+ if args.test_launcher_summary_output:
+ child_args.append('--test-launcher-summary-output=' + TEST_RESULT_PATH)
+
+ with GetDeploymentTargetForArgs(args) as target:
+ target.Start()
+
+ if args.test_launcher_filter_file:
+ target.PutFile(args.test_launcher_filter_file, TEST_FILTER_PATH)
+ child_args.append('--test-launcher-filter-file=' + TEST_FILTER_PATH)
+
+ forwarder = None
+ if args.enable_test_server:
+ test_server, forwarder = SetupTestServer(target, test_concurrency)
+
+ RunPackage(args.output_directory, target, args.package,
+ child_args, args.package_manifest)
+
+ if forwarder:
+ forwarder.terminate()
+ forwarder.wait()
+
+ if args.test_launcher_summary_output:
+ target.GetFile(TEST_RESULT_PATH, args.test_launcher_summary_output)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/chromium/build/fuchsia/test_runner.py b/chromium/build/fuchsia/test_runner.py
index d69f039822b..42506bef57f 100755
--- a/chromium/build/fuchsia/test_runner.py
+++ b/chromium/build/fuchsia/test_runner.py
@@ -24,10 +24,6 @@ DIR_SOURCE_ROOT = os.path.abspath(
sys.path.append(os.path.join(DIR_SOURCE_ROOT, 'build', 'util', 'lib', 'common'))
import chrome_test_server_spawner
-# RunFuchsia() may run qemu with 1 or 4 CPUs. In both cases keep test
-# concurrency set to 4.
-DEFAULT_TEST_CONCURRENCY = 4
-
def IsLocalPortAvailable(port):
s = socket.socket()
@@ -132,8 +128,11 @@ def main():
child_args.append('--test-launcher-batch-limit=%d' %
args.test_launcher_batch_limit)
+ # By default run the same number of test jobs as there are CPU cores.
+ # If running tests on a device then the caller should provide the
+ # test-launcher-jobs limit explicitly, since we can't count the CPU cores.
test_concurrency = args.test_launcher_jobs \
- if args.test_launcher_jobs else DEFAULT_TEST_CONCURRENCY
+ if args.test_launcher_jobs else args.vm_cpu_cores
child_args.append('--test-launcher-jobs=%d' % test_concurrency)
if args.gtest_filter:
@@ -210,7 +209,8 @@ def main():
return RunFuchsia(bootfs, args.device, args.kernel, args.dry_run,
test_launcher_summary_output=
- args.test_launcher_summary_output)
+ args.test_launcher_summary_output,
+ vm_cpu_cores = args.vm_cpu_cores)
finally:
# Stop the spawner to make sure it doesn't leave testserver running, in
# case some tests failed.
diff --git a/chromium/build/fuchsia/update_sdk.py b/chromium/build/fuchsia/update_sdk.py
index 8d707997fc3..b3ea16a5163 100755
--- a/chromium/build/fuchsia/update_sdk.py
+++ b/chromium/build/fuchsia/update_sdk.py
@@ -13,6 +13,8 @@ import sys
import tarfile
import tempfile
+SDK_HASH = '9d4016533477903c796470e7ab46c2e1dad31761'
+
REPOSITORY_ROOT = os.path.abspath(os.path.join(
os.path.dirname(__file__), '..', '..'))
sys.path.append(os.path.join(REPOSITORY_ROOT, 'build'))
@@ -27,21 +29,20 @@ def EnsureDirExists(path):
def main():
- if len(sys.argv) != 2:
- print >>sys.stderr, 'usage: %s <sdk_hash>' % sys.argv[0]
+ if len(sys.argv) != 1:
+ print >>sys.stderr, 'usage: %s' % sys.argv[0]
return 1
- sdk_hash = sys.argv[1]
output_dir = os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk')
hash_filename = os.path.join(output_dir, '.hash')
if os.path.exists(hash_filename):
with open(hash_filename, 'r') as f:
- if f.read().strip() == sdk_hash:
+ if f.read().strip() == SDK_HASH:
# Nothing to do.
return 0
- print 'Downloading SDK %s...' % sdk_hash
+ print 'Downloading SDK %s...' % SDK_HASH
if os.path.isdir(output_dir):
shutil.rmtree(output_dir)
@@ -52,7 +53,7 @@ def main():
try:
bucket = 'gs://fuchsia/sdk/linux-amd64/'
cmd = [os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'),
- 'cp', bucket + sdk_hash, tmp]
+ 'cp', bucket + SDK_HASH, tmp]
subprocess.check_call(cmd)
with open(tmp, 'rb') as f:
EnsureDirExists(output_dir)
@@ -61,7 +62,7 @@ def main():
os.remove(tmp)
with open(hash_filename, 'w') as f:
- f.write(sdk_hash)
+ f.write(SDK_HASH)
return 0
diff --git a/chromium/build/get_landmines.py b/chromium/build/get_landmines.py
index 755cc0673b7..e3e0ce21649 100755
--- a/chromium/build/get_landmines.py
+++ b/chromium/build/get_landmines.py
@@ -13,10 +13,7 @@ import sys
import landmine_utils
-distributor = landmine_utils.distributor
-gyp_defines = landmine_utils.gyp_defines
-gyp_msvs_version = landmine_utils.gyp_msvs_version
-platform = landmine_utils.platform
+host_os = landmine_utils.host_os
def print_landmines():
@@ -39,29 +36,21 @@ def print_landmines():
# across the change that added the landmine, adding to the cost. There are
# usually less troublesome alternatives.
- if distributor() == 'goma' and platform() == 'win32':
- print 'Need to clobber winja goma due to backend cwd cache fix.'
- if platform() == 'android':
- print 'Clobber: to handle new way of suppressing findbugs failures.'
- print 'Clobber to fix gyp not rename package name (crbug.com/457038)'
- print 'Clobber to recalculate reversed dependency (crbug.com/639042)'
- print 'Clobber to recalculate reversed dependency (crbug.com/639042)'
- if platform() == 'win':
+ if host_os() == 'win':
print 'Compile on cc_unittests fails due to symbols removed in r185063.'
- if platform() == 'linux':
+ if host_os() == 'linux':
print 'Builders switching from make to ninja will clobber on this.'
- if platform() == 'mac':
+ if host_os() == 'mac':
print 'Switching from bundle to unbundled dylib (issue 14743002).'
- if platform() in ('win', 'mac'):
+ if host_os() in ('win', 'mac'):
print ('Improper dependency for create_nmf.py broke in r240802, '
'fixed in r240860.')
- if platform() == 'win':
+ if host_os() == 'win':
print 'Switch to VS2015 Update 3, 14393 SDK'
print 'Need to clobber everything due to an IDL change in r154579 (blink)'
print 'Need to clobber everything due to gen file moves in r175513 (Blink)'
- if (platform() != 'ios'):
- print 'Clobber to get rid of obselete test plugin after r248358'
- print 'Clobber to rebuild GN files for V8'
+ print 'Clobber to get rid of obselete test plugin after r248358'
+ print 'Clobber to rebuild GN files for V8'
print 'Clobber to get rid of stale generated mojom.h files'
print 'Need to clobber everything due to build_nexe change in nacl r13424'
print '[chromium-dev] PSA: clobber build needed for IDR_INSPECTOR_* compil...'
@@ -71,19 +60,15 @@ def print_landmines():
print 'Another clobber for missing NaCl gyp deps (crbug.com/427427).'
print 'Clobber to fix GN not picking up increased ID range (crbug.com/444902)'
print 'Remove NaCl toolchains from the output dir (crbug.com/456902)'
- if platform() == 'ios':
- print 'Clobber iOS to workaround Xcode deps bug (crbug.com/485435)'
- if platform() == 'win':
+ if host_os() == 'win':
print 'Clobber to delete stale generated files (crbug.com/510086)'
- if platform() == 'android' and gyp_defines().get('target_arch') == 'arm64':
- print 'Clobber to support new location/infra for chrome_sync_shell_apk'
- if platform() == 'mac':
+ if host_os() == 'mac':
print 'Clobber to get rid of evil libsqlite3.dylib (crbug.com/526208)'
- if platform() == 'mac':
+ if host_os() == 'mac':
print 'Clobber to remove libsystem.dylib. See crbug.com/620075'
- if platform() == 'mac':
+ if host_os() == 'mac':
print 'Clobber to get past mojo gen build error (crbug.com/679607)'
- if platform() == 'win':
+ if host_os() == 'win':
print 'Clobber Windows to fix strange PCH-not-rebuilt errors.'
print 'CLobber all to fix GN breakage (crbug.com/736215)'
diff --git a/chromium/build/gn_run_binary.py b/chromium/build/gn_run_binary.py
index 6bf9e295e85..d7f7165e18c 100644
--- a/chromium/build/gn_run_binary.py
+++ b/chromium/build/gn_run_binary.py
@@ -21,5 +21,11 @@ args = [path] + sys.argv[2:]
ret = subprocess.call(args)
if ret != 0:
- print '%s failed with exit code %d' % (sys.argv[1], ret)
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
+ # recognize and differentiate in hex. In order to print them as unsigned
+ # hex we need to add 4 Gig to them.
+ print '%s failed with exit code 0x%08X' % (sys.argv[1], ret + (1 << 32))
+ else:
+ print '%s failed with exit code %d' % (sys.argv[1], ret)
sys.exit(ret)
diff --git a/chromium/build/install-build-deps-android.sh b/chromium/build/install-build-deps-android.sh
index 15fea8517ed..860f8f5bf50 100755
--- a/chromium/build/install-build-deps-android.sh
+++ b/chromium/build/install-build-deps-android.sh
@@ -37,6 +37,9 @@ sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386
# Required for apk-patch-size-estimator
sudo apt-get -y install bsdiff
+# Needed to unpack the profiles we pull with `gclient runhooks`
+sudo apt-get -y install bzip2
+
# Do our own error handling for java.
set +e
diff --git a/chromium/build/install-build-deps.sh b/chromium/build/install-build-deps.sh
index 172aa9cc05c..32b61b82bc9 100755
--- a/chromium/build/install-build-deps.sh
+++ b/chromium/build/install-build-deps.sh
@@ -124,7 +124,6 @@ if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
echo -e "ERROR: The only supported distros are\n" \
"\tUbuntu 14.04 (trusty)\n" \
"\tUbuntu 16.04 (xenial)\n" \
- "\tUbuntu 17.04 (zesty)\n" \
"\tUbuntu 17.10 (artful)\n" \
"\tDebian 8 (jessie) or later" >&2
exit 1
@@ -143,13 +142,18 @@ if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
fi
# Packages needed for chromeos only
-chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath"
+chromeos_dev_list="libbluetooth-dev libxkbcommon-dev"
+
+if package_exists realpath; then
+ chromeos_dev_list="${chromeos_dev_list} realpath"
+fi
# Packages needed for development
dev_list="\
bison
cdbs
curl
+ dbus-x11
dpkg-dev
elfutils
devscripts
@@ -160,6 +164,8 @@ dev_list="\
git-core
git-svn
gperf
+ libappindicator-dev
+ libappindicator3-dev
libasound2-dev
libbrlapi-dev
libav-tools
@@ -171,6 +177,7 @@ dev_list="\
libdrm-dev
libelf-dev
libffi-dev
+ libgbm-dev
libglib2.0-dev
libglu1-mesa-dev
libgnome-keyring-dev
@@ -194,6 +201,7 @@ dev_list="\
libxtst-dev
locales
openbox
+ p7zip
patch
perl
pkg-config
@@ -227,9 +235,11 @@ chromeos_lib_list="libpulse0 libbz2-1.0"
# Full list of required run-time libraries
lib_list="\
+ libappindicator1
+ libappindicator3-1
+ libasound2
libatk1.0-0
libc6
- libasound2
libcairo2
libcap2
libcups2
@@ -293,61 +303,63 @@ else
dbg_list="${dbg_list} libstdc++6-4.8-dbg"
fi
if package_exists libgtk-3-0-dbgsym; then
- lib_list="${lib_list} libgtk-3-0-dbgsym"
+ dbg_list="${dbg_list} libgtk-3-0-dbgsym"
elif package_exists libgtk-3-0-dbg; then
- lib_list="${lib_list} libgtk-3-0-dbg"
+ dbg_list="${dbg_list} libgtk-3-0-dbg"
fi
if package_exists libatk1.0-0-dbgsym; then
- lib_list="${lib_list} libatk1.0-0-dbgsym"
+ dbg_list="${dbg_list} libatk1.0-0-dbgsym"
elif package_exists libatk1.0-dbg; then
- lib_list="${lib_list} libatk1.0-dbg"
+ dbg_list="${dbg_list} libatk1.0-dbg"
fi
if package_exists libcairo2-dbgsym; then
- lib_list="${lib_list} libcairo2-dbgsym"
+ dbg_list="${dbg_list} libcairo2-dbgsym"
elif package_exists libcairo2-dbg; then
- lib_list="${lib_list} libcairo2-dbg"
+ dbg_list="${dbg_list} libcairo2-dbg"
fi
if package_exists libfontconfig1-dbgsym; then
- lib_list="${lib_list} libfontconfig1-dbgsym"
+ dbg_list="${dbg_list} libfontconfig1-dbgsym"
else
- lib_list="${lib_list} libfontconfig1-dbg"
+ dbg_list="${dbg_list} libfontconfig1-dbg"
fi
if package_exists libxdamage1-dbgsym; then
- lib_list="${lib_list} libxdamage1-dbgsym"
+ dbg_list="${dbg_list} libxdamage1-dbgsym"
elif package_exists libxdamage1-dbg; then
- lib_list="${lib_list} libxdamage1-dbg"
+ dbg_list="${dbg_list} libxdamage1-dbg"
fi
if package_exists libpango1.0-dev-dbgsym; then
- lib_list="${lib_list} libpango1.0-dev-dbgsym"
+ dbg_list="${dbg_list} libpango1.0-dev-dbgsym"
elif package_exists libpango1.0-0-dbg; then
- lib_list="${lib_list} libpango1.0-0-dbg"
+ dbg_list="${dbg_list} libpango1.0-0-dbg"
fi
if package_exists libx11-6-dbg; then
- lib_list="${lib_list} libx11-6-dbg"
+ dbg_list="${dbg_list} libx11-6-dbg"
fi
if package_exists libx11-xcb1-dbg; then
- lib_list="${lib_list} libx11-xcb1-dbg"
+ dbg_list="${dbg_list} libx11-xcb1-dbg"
fi
if package_exists libxfixes3-dbg; then
- lib_list="${lib_list} libxfixes3-dbg"
+ dbg_list="${dbg_list} libxfixes3-dbg"
fi
if package_exists libxi6-dbg; then
- lib_list="${lib_list} libxi6-dbg"
+ dbg_list="${dbg_list} libxi6-dbg"
fi
if package_exists libxrandr2-dbg; then
- lib_list="${lib_list} libxrandr2-dbg"
+ dbg_list="${dbg_list} libxrandr2-dbg"
fi
if package_exists libxrender1-dbg; then
- lib_list="${lib_list} libxrender1-dbg"
+ dbg_list="${dbg_list} libxrender1-dbg"
fi
if package_exists libxtst6-dbg; then
- lib_list="${lib_list} libxtst6-dbg"
+ dbg_list="${dbg_list} libxtst6-dbg"
fi
if package_exists libglib2.0-0-dbg; then
- lib_list="${lib_list} libglib2.0-0-dbg"
+ dbg_list="${dbg_list} libglib2.0-0-dbg"
fi
-if package_exists libxcursor1-dbg; then
- lib_list="${lib_list} libxcursor1-dbg"
+if package_exists libxcursor1-dbgsym; then
+ dbg_list="${dbg_list} libxcursor1-dbgsym"
+elif package_exists libxcursor1-dbg; then
+ dbg_list="${dbg_list} libxcursor1-dbg"
fi
# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
@@ -450,30 +462,6 @@ else
nacl_list="${nacl_list} libssl1.0.0:i386"
fi
-# Find the proper version of packages that depend on mesa. Only one -lts variant
-# of mesa can be installed and everything that depends on it must match.
-
-# Query for the name and status of all mesa LTS variants, filter for only
-# installed packages, extract just the name, and eliminate duplicates (there can
-# be more than one with the same name in the case of multiarch). Expand into an
-# array.
-mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
- libgl1-mesa-glx-lts-\* 2>/dev/null | \
- grep " ok installed" | cut -d " " -f 1 | sort -u))
-if [ "${#mesa_packages[@]}" -eq 0 ]; then
- mesa_variant=""
-elif [ "${#mesa_packages[@]}" -eq 1 ]; then
- # Strip the base package name and leave just "-lts-whatever"
- mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
-else
- echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
- exit 1
-fi
-dev_list="${dev_list} libgbm-dev${mesa_variant}
- libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
- mesa-common-dev${mesa_variant}"
-nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
-
# Some package names have changed over time
if package_exists libpng16-16; then
lib_list="${lib_list} libpng16-16"
diff --git a/chromium/build/landmine_utils.py b/chromium/build/landmine_utils.py
index 9cc75efefe2..a3f21ff1b83 100644
--- a/chromium/build/landmine_utils.py
+++ b/chromium/build/landmine_utils.py
@@ -3,87 +3,31 @@
# found in the LICENSE file.
-import functools
-import logging
-import os
-import shlex
import sys
-def memoize(default=None):
- """This decorator caches the return value of a parameterless pure function"""
- def memoizer(func):
- val = []
- @functools.wraps(func)
- def inner():
- if not val:
- ret = func()
- val.append(ret if ret is not None else default)
- if logging.getLogger().isEnabledFor(logging.INFO):
- print '%s -> %r' % (func.__name__, val[0])
- return val[0]
- return inner
- return memoizer
-
-
-@memoize()
def IsWindows():
return sys.platform in ['win32', 'cygwin']
-@memoize()
def IsLinux():
return sys.platform.startswith(('linux', 'freebsd', 'netbsd', 'openbsd'))
-@memoize()
def IsMac():
return sys.platform == 'darwin'
-@memoize()
-def gyp_defines():
- """Parses and returns GYP_DEFINES env var as a dictionary."""
- return dict(arg.split('=', 1)
- for arg in shlex.split(os.environ.get('GYP_DEFINES', '')))
-
-
-@memoize()
-def gyp_generator_flags():
- """Parses and returns GYP_GENERATOR_FLAGS env var as a dictionary."""
- return dict(arg.split('=', 1)
- for arg in shlex.split(os.environ.get('GYP_GENERATOR_FLAGS', '')))
-
-
-@memoize()
-def gyp_msvs_version():
- return os.environ.get('GYP_MSVS_VERSION', '')
-
-
-@memoize()
-def distributor():
- """
- Returns a string which is the distributed build engine in use (if any).
- Possible values: 'goma', None
+def host_os():
"""
- if 'goma' in gyp_defines():
- return 'goma'
-
-
-@memoize()
-def platform():
+ Returns a string representing the host_os of the current system.
+ Possible values: 'win', 'mac', 'linux', 'unknown'.
"""
- Returns a string representing the platform this build is targeted for.
- Possible values: 'win', 'mac', 'linux', 'ios', 'android'
- """
- if 'OS' in gyp_defines():
- if 'android' in gyp_defines()['OS']:
- return 'android'
- else:
- return gyp_defines()['OS']
- elif IsWindows():
+ if IsWindows():
return 'win'
elif IsLinux():
return 'linux'
- else:
+ elif IsMac():
return 'mac'
+ else:
+ return 'unknown'
diff --git a/chromium/build/landmines.py b/chromium/build/landmines.py
index 991ec04573a..d0f429809ab 100755
--- a/chromium/build/landmines.py
+++ b/chromium/build/landmines.py
@@ -25,7 +25,6 @@ troublesome alternatives.
import difflib
import errno
-import gyp_environment
import logging
import optparse
import os
@@ -52,7 +51,7 @@ def get_build_dir(src_dir):
if not output_dir:
raise Error('CHROMIUM_OUT_DIR environment variable is set but blank!')
else:
- output_dir = landmine_utils.gyp_generator_flags().get('output_dir', 'out')
+ output_dir = 'out'
return os.path.abspath(os.path.join(src_dir, output_dir))
@@ -132,8 +131,6 @@ def process_options():
def main():
options = process_options()
- gyp_environment.SetEnvironment()
-
landmines = []
for s in options.landmine_scripts:
proc = subprocess.Popen([sys.executable, s], stdout=subprocess.PIPE)
diff --git a/chromium/build/linux/sysroot_scripts/debian-archive-sid-stable.gpg b/chromium/build/linux/sysroot_scripts/debian-archive-sid-stable.gpg
new file mode 100644
index 00000000000..a282485bc69
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/debian-archive-sid-stable.gpg
Binary files differ
diff --git a/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py b/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
new file mode 100755
index 00000000000..426e17ff5d8
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# Copyright 2018 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.
+
+"""Find incompatible symbols in glibc and output a list of replacements.
+"""
+
+import re
+import sys
+
+# This constant comes from https://crbug.com/580892
+MAX_ALLOWED_GLIBC_VERSION = [2, 17]
+
+
+def get_replacements(nm_file, max_allowed_glibc_version):
+ symbol_format = re.compile('\S+ \S+ ([^@]+)@@?(\S+)\n')
+ version_format = re.compile('GLIBC_[0-9\.]+')
+ symbols = {}
+ for line in nm_file:
+ m = re.match(symbol_format, line)
+ symbol = m.group(1)
+ version = m.group(2)
+ if not re.match(version_format, version):
+ continue
+ if symbol in symbols:
+ symbols[symbol].add(version)
+ else:
+ symbols[symbol] = set([version])
+
+ replacements = []
+ for symbol, versions in symbols.iteritems():
+ if len(versions) <= 1:
+ continue
+ versions_parsed = [[
+ int(part) for part in version.lstrip('GLIBC_').split('.')
+ ] for version in versions]
+ if (max(versions_parsed) > max_allowed_glibc_version and
+ min(versions_parsed) <= max_allowed_glibc_version):
+ # Use the newest allowed version of the symbol.
+ replacement_version_parsed = max([
+ version for version in versions_parsed
+ if version <= max_allowed_glibc_version
+ ])
+ replacement_version = 'GLIBC_' + '.'.join(
+ [str(part) for part in replacement_version_parsed])
+ replacements.append('__asm__(".symver %s, %s@%s");' %
+ (symbol, symbol, replacement_version))
+ return sorted(replacements)
+
+
+if __name__ == '__main__':
+ replacements = get_replacements(sys.stdin, MAX_ALLOWED_GLIBC_VERSION)
+ if replacements:
+ print('// Chromium-specific hack.')
+ print('// See explanation in sysroot-creator.sh.')
+ for replacement in replacements:
+ print replacement
diff --git a/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols_unittest.py b/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols_unittest.py
new file mode 100755
index 00000000000..5af3eb2c251
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/find_incompatible_glibc_symbols_unittest.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# Copyright 2018 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.
+
+import cStringIO
+import find_incompatible_glibc_symbols
+
+NM_DATA = """\
+0000000000000001 W expf@GLIBC_2.2.5
+0000000000000002 W expf@@GLIBC_2.27
+0000000000000003 W foo@@GLIBC_2.2.5
+0000000000000004 W bar@GLIBC_2.2.5
+0000000000000005 W baz@GLIBC_2.2.5
+0000000000000006 T foo2@GLIBC_2.2
+0000000000000007 T foo2@GLIBC_2.3
+0000000000000008 T foo2@GLIBC_2.30
+0000000000000009 T foo2@@GLIBC_2.31
+000000000000000a T bar2@GLIBC_2.30
+000000000000000b T bar2@@GLIBC_2.31
+000000000000000c T baz2@GLIBC_2.2
+000000000000000d T baz2@@GLIBC_2.3
+"""
+
+EXPECTED_REPLACEMENTS = [
+ '__asm__(".symver expf, expf@GLIBC_2.2.5");',
+ '__asm__(".symver foo2, foo2@GLIBC_2.3");',
+]
+
+nm_file = cStringIO.StringIO()
+nm_file.write(NM_DATA)
+nm_file.seek(0)
+
+assert (
+ EXPECTED_REPLACEMENTS == find_incompatible_glibc_symbols.get_replacements(
+ nm_file, [2, 17]))
diff --git a/chromium/build/linux/sysroot_scripts/install-sysroot.py b/chromium/build/linux/sysroot_scripts/install-sysroot.py
index 2a7918bb075..6fb13c8bc6d 100755
--- a/chromium/build/linux/sysroot_scripts/install-sysroot.py
+++ b/chromium/build/linux/sysroot_scripts/install-sysroot.py
@@ -31,16 +31,18 @@ import urllib2
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
-import detect_host_arch
-import gyp_chromium
-import gyp_environment
-
URL_PREFIX = 'https://commondatastorage.googleapis.com'
URL_PATH = 'chrome-linux-sysroot/toolchain'
VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips', 'mips64el')
+ARCH_TRANSLATIONS = {
+ 'x64': 'amd64',
+ 'x86': 'i386',
+ 'mipsel': 'mips',
+ 'mips64': 'mips64el',
+}
class Error(Exception):
pass
@@ -58,109 +60,25 @@ def GetSha1(filename):
return sha1.hexdigest()
-def DetectHostArch():
- # Figure out host arch using build/detect_host_arch.py and
- # set target_arch to host arch
- detected_host_arch = detect_host_arch.HostArch()
- if detected_host_arch == 'x64':
- return 'amd64'
- if detected_host_arch == 'ia32':
- return 'i386'
- if detected_host_arch == 'arm':
- return 'arm'
- if detected_host_arch == 'arm64':
- return 'arm64'
- if detected_host_arch == 'mips':
- return 'mips'
- if detected_host_arch == 'mips64':
- return 'mips64el'
- if detected_host_arch == 'ppc':
- return 'ppc'
- if detected_host_arch == 's390':
- return 's390'
-
- raise Error('Unrecognized host arch: %s' % detected_host_arch)
-
-
-def DetectTargetArch():
- """Attempt for determine target architecture.
-
- This works by looking for target_arch in GYP_DEFINES.
- """
- # TODO(agrieve): Make this script not depend on GYP_DEFINES so that it works
- # with GN as well.
- gyp_environment.SetEnvironment()
- supplemental_includes = gyp_chromium.GetSupplementalFiles()
- gyp_defines = gyp_chromium.GetGypVars(supplemental_includes)
- target_arch = gyp_defines.get('target_arch')
- if target_arch == 'x64':
- return 'amd64'
- if target_arch == 'ia32':
- return 'i386'
- if target_arch == 'arm':
- return 'arm'
- if target_arch == 'arm64':
- return 'arm64'
- if target_arch == 'mipsel':
- return 'mips'
- if target_arch == 'mips64el':
- return 'mips64el'
-
- return None
-
-
-def InstallDefaultSysroots(host_arch):
- """Install the default set of sysroot images.
-
- This includes at least the sysroot for host architecture, and the 32-bit
- sysroot for building the v8 snapshot image. It can also include the cross
- compile sysroot for ARM/MIPS if cross compiling environment can be detected.
-
- Another reason we're installing this by default is so that developers can
- compile and run on our supported platforms without having to worry about
- flipping things back and forth and whether the sysroots have been downloaded
- or not.
- """
- InstallDefaultSysrootForArch(host_arch)
-
- if host_arch == 'amd64':
- InstallDefaultSysrootForArch('i386')
-
- # If we can detect a non-standard target_arch such as ARM or MIPS,
- # then install the sysroot too. Don't attempt to install arm64
- # since this is currently and android-only architecture.
- target_arch = DetectTargetArch()
- if target_arch and target_arch not in (host_arch, 'i386'):
- InstallDefaultSysrootForArch(target_arch)
-
-
def main(args):
parser = optparse.OptionParser('usage: %prog [OPTIONS]', description=__doc__)
- parser.add_option('--running-as-hook', action='store_true',
- default=False, help='Used when running from gclient hooks.'
- ' Installs default sysroot images.')
- parser.add_option('--arch', type='choice', choices=VALID_ARCHS,
+ parser.add_option('--arch',
help='Sysroot architecture: %s' % ', '.join(VALID_ARCHS))
parser.add_option('--all', action='store_true',
help='Install all sysroot images (useful when updating the'
' images)')
options, _ = parser.parse_args(args)
- if options.running_as_hook and not sys.platform.startswith('linux'):
+ if not sys.platform.startswith('linux'):
return 0
- if options.running_as_hook:
- host_arch = DetectHostArch()
- # PPC/s390 don't use sysroot, see http://crbug.com/646169
- if host_arch in ['ppc','s390']:
- return 0
- InstallDefaultSysroots(host_arch)
- elif options.arch:
- InstallDefaultSysrootForArch(options.arch)
+ if options.arch:
+ InstallDefaultSysrootForArch(
+ ARCH_TRANSLATIONS.get(options.arch, options.arch))
elif options.all:
for arch in VALID_ARCHS:
InstallDefaultSysrootForArch(arch)
else:
- print 'You much specify either --arch, --all or --running-as-hook'
+ print 'You much specify either --arch or --all'
return 1
return 0
@@ -169,7 +87,7 @@ def main(args):
def InstallDefaultSysrootForArch(target_arch):
if target_arch not in VALID_ARCHS:
raise Error('Unknown architecture: %s' % target_arch)
- InstallSysroot('Stretch', target_arch)
+ InstallSysroot('Sid', target_arch)
def InstallSysroot(target_platform, target_arch):
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64 b/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64
new file mode 100644
index 00000000000..bbca95ed07c
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64
@@ -0,0 +1,306 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-12_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/liblsan0_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libtsan0_8-20180218-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_amd64.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm
new file mode 100644
index 00000000000..5dcca777104
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm
@@ -0,0 +1,304 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-12_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-exynos1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-omap1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.90-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_armhf.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64 b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64
new file mode 100644
index 00000000000..94f237a1a6d
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64
@@ -0,0 +1,304 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-12_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180218-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.90-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_arm64.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.i386 b/chromium/build/linux/sysroot_scripts/packagelist.sid.i386
new file mode 100644
index 00000000000..037ba9aac34
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.i386
@@ -0,0 +1,304 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-12_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_i386.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_i386.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_i386.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_i386.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_i386.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el b/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el
new file mode 100644
index 00000000000..d99530de2bd
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el
@@ -0,0 +1,297 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_mips64el.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel b/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel
new file mode 100644
index 00000000000..a8bc04a1a47
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel
@@ -0,0 +1,297 @@
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.26.1-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.26.1-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.26.2-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.26.2-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.6-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.6-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.6-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.6-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.4-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.4-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.43.9-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.43.9-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-12_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-12_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180218-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180218-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180218-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180218-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.54.3-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.54.3-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.26-6_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.26-6_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.10-8_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.10-8_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.28-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.28-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-8_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libk5crypto3_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5clnt-mit11_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkadm5srv-mit11_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.90-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.90-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.90-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.90-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.90-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.1-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.1-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.27-6_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.27-6_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_1.5.2-2+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.13.4-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.60.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.60.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.0.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.5-4.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.5-4.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx-dev_1.7.0-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp6_0.6.0-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpdemux2_0.6.0-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebp-dev_0.6.0-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libw/libwebp/libwebpmux3_0.6.0-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-6_1.6.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.12-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor-dev_1.1.15-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage1_1.1.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdamage/libxdamage-dev_1.1.4-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext6_1.3.3-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxext/libxext-dev_1.3.3-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes3_5.0.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.2-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.4-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.5-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2n-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0g-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0g-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.9-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.40.14-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.40.14-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.40.14-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.40.14-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.40.14-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-3_20170101+dfsg-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20170101+dfsg-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.22.0-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_237-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_237-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_237-3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-1+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.11-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-core/x11proto-core-dev_7.0.31-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-input/x11proto-input-dev_2.3.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-kb/x11proto-kb-dev_1.0.7-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-randr/x11proto-randr-dev_1.5.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-record/x11proto-record-dev_1.14.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-render/x11proto-render-dev_0.11.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-scrnsaver/x11proto-scrnsaver-dev_1.2.2-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xext/x11proto-xext-dev_7.3.0-1_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/x11proto-xinerama/x11proto-xinerama-dev_1.2.1-2_all.deb
+http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_mipsel.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.amd64 b/chromium/build/linux/sysroot_scripts/packagelist.stretch.amd64
index aac388b959b..9579446cdc6 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.amd64
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.amd64
@@ -75,12 +75,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_amd64.d
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_amd64.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_amd64.deb
@@ -98,6 +106,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_amd64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_amd64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_amd64.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm b/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm
index 2a9c6ebe93c..a8239d2a090 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm
@@ -69,12 +69,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_armhf.d
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_armhf.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_armhf.deb
@@ -95,6 +103,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_armhf.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_armhf.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_armhf.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm64 b/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm64
index 51bd50b5f9c..3c13b8ba014 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm64
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.arm64
@@ -71,12 +71,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_arm64.d
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_arm64.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_arm64.deb
@@ -95,6 +103,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_arm64.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_arm64.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_arm64.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.i386 b/chromium/build/linux/sysroot_scripts/packagelist.stretch.i386
index 95afc5a2b3a..716f6b3fa1d 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.i386
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.i386
@@ -73,12 +73,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_i386.de
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_i386.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_i386.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_i386.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_i386.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_i386.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_i386.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_i386.deb
@@ -96,6 +104,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_i386.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_i386.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_i386.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_i386.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_i386.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_i386.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_i386.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.mips64el b/chromium/build/linux/sysroot_scripts/packagelist.stretch.mips64el
index 594ac066e16..1a244bbdd7a 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.mips64el
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.mips64el
@@ -67,12 +67,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_mips64e
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_mips64el.deb
@@ -89,6 +97,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mips64el.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mips64el.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mips64el.deb
diff --git a/chromium/build/linux/sysroot_scripts/packagelist.stretch.mipsel b/chromium/build/linux/sysroot_scripts/packagelist.stretch.mipsel
index a825f57b173..159b4125939 100644
--- a/chromium/build/linux/sysroot_scripts/packagelist.stretch.mipsel
+++ b/chromium/build/linux/sysroot_scripts/packagelist.stretch.mipsel
@@ -67,12 +67,20 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-8_1.15-1+deb9u1_mipsel.
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.15-1+deb9u1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.15-1+deb9u1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.15-1+deb9u1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-4_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-4_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.3-1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3+b1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-4+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_12.10.2-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_12.10.2-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_12.10.2-2_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_12.10.2-2_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.74-1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.74-1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.74-1_mipsel.deb
@@ -89,6 +97,8 @@ http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.2
http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mipsel.deb
+http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.1-2_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp1_1.7.4-3_mipsel.deb
http://ftp.us.debian.org/debian/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.7.4-3_mipsel.deb
diff --git a/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh b/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh
new file mode 100755
index 00000000000..828cd345465
--- /dev/null
+++ b/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh
@@ -0,0 +1,364 @@
+#!/bin/bash
+# Copyright 2017 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.
+
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+DISTRO=debian
+DIST=sid
+
+APT_SOURCES_LIST="http://ftp.us.debian.org/debian/ sid main"
+
+# gpg keyring file generated using:
+# export KEYS="518E17E1 46925553 2B90D010 C857C906 F66AEC98 8AE22BA9 1A7B6500"
+# gpg --recv-keys $KEYS
+# gpg --output ./debian-archive-sid-stable.gpg --export $KEYS
+KEYRING_FILE="${SCRIPT_DIR}/debian-archive-sid-stable.gpg"
+
+HAS_ARCH_AMD64=1
+HAS_ARCH_I386=1
+HAS_ARCH_ARM=1
+HAS_ARCH_ARM64=1
+HAS_ARCH_MIPS=1
+HAS_ARCH_MIPS64EL=1
+
+# Sysroot packages: these are the packages needed to build chrome.
+# NOTE: When DEBIAN_PACKAGES is modified, the packagelist files must be updated
+# by running this script in GeneratePackageList mode.
+DEBIAN_PACKAGES="\
+ comerr-dev
+ krb5-multidev
+ libappindicator-dev
+ libappindicator1
+ libappindicator3-1
+ libappindicator3-dev
+ libasound2
+ libasound2-dev
+ libasyncns0
+ libatk-bridge2.0-0
+ libatk-bridge2.0-dev
+ libatk1.0-0
+ libatk1.0-dev
+ libatomic1
+ libatspi2.0-0
+ libatspi2.0-dev
+ libattr1
+ libaudit1
+ libavahi-client3
+ libavahi-common3
+ libblkid1
+ libbluetooth-dev
+ libbluetooth3
+ libbrlapi-dev
+ libbrlapi0.6
+ libbsd0
+ libc6
+ libc6-dev
+ libcairo-gobject2
+ libcairo-script-interpreter2
+ libcairo2
+ libcairo2-dev
+ libcap-dev
+ libcap-ng0
+ libcap2
+ libcolord2
+ libcom-err2
+ libcups2
+ libcups2-dev
+ libcupsimage2
+ libcupsimage2-dev
+ libdatrie1
+ libdb5.3
+ libdbus-1-3
+ libdbus-1-dev
+ libdbus-glib-1-2
+ libdbusmenu-glib-dev
+ libdbusmenu-glib4
+ libdbusmenu-gtk3-4
+ libdbusmenu-gtk4
+ libdrm-amdgpu1
+ libdrm-dev
+ libdrm-nouveau2
+ libdrm-radeon1
+ libdrm2
+ libegl1
+ libegl1-mesa
+ libegl1-mesa-dev
+ libelf-dev
+ libelf1
+ libepoxy-dev
+ libepoxy0
+ libevent-2.1-6
+ libexpat1
+ libexpat1-dev
+ libffi-dev
+ libffi6
+ libflac-dev
+ libflac8
+ libfontconfig1
+ libfontconfig1-dev
+ libfreetype6
+ libfreetype6-dev
+ libgbm-dev
+ libgbm1
+ libgcc-6-dev
+ libgcc1
+ libgcrypt20
+ libgcrypt20-dev
+ libgdk-pixbuf2.0-0
+ libgdk-pixbuf2.0-dev
+ libgl1
+ libgl1-mesa-dev
+ libgl1-mesa-glx
+ libglapi-mesa
+ libgles2
+ libglib2.0-0
+ libglib2.0-dev
+ libglvnd-dev
+ libglvnd0
+ libglx0
+ libgmp10
+ libgnome-keyring-dev
+ libgnome-keyring0
+ libgnutls-dane0
+ libgnutls-openssl27
+ libgnutls28-dev
+ libgnutls30
+ libgnutlsxx28
+ libgomp1
+ libgpg-error-dev
+ libgpg-error0
+ libgraphite2-3
+ libgraphite2-dev
+ libgssapi-krb5-2
+ libgssrpc4
+ libgtk-3-0
+ libgtk-3-dev
+ libgtk2.0-0
+ libgtk2.0-dev
+ libharfbuzz-dev
+ libharfbuzz-gobject0
+ libharfbuzz-icu0
+ libharfbuzz0b
+ libhogweed4
+ libice6
+ libicu57
+ libidl-2-0
+ libidn11
+ libidn2-0
+ libindicator3-7
+ libindicator7
+ libjbig0
+ libjpeg62-turbo
+ libjpeg62-turbo-dev
+ libjson-glib-1.0-0
+ libjsoncpp-dev
+ libjsoncpp1
+ libk5crypto3
+ libkadm5clnt-mit11
+ libkadm5srv-mit11
+ libkdb5-9
+ libkeyutils1
+ libkrb5-3
+ libkrb5-dev
+ libkrb5support0
+ liblcms2-2
+ libltdl7
+ liblz4-1
+ liblzma5
+ liblzo2-2
+ libmount1
+ libnettle6
+ libnspr4
+ libnspr4-dev
+ libnss-db
+ libnss3
+ libnss3-dev
+ libogg0
+ libopengl0
+ libopus-dev
+ libopus0
+ liborbit-2-0
+ liborbit2
+ libp11-kit0
+ libpam0g
+ libpam0g-dev
+ libpango-1.0-0
+ libpango1.0-dev
+ libpangocairo-1.0-0
+ libpangoft2-1.0-0
+ libpangox-1.0-0
+ libpangoxft-1.0-0
+ libpci-dev
+ libpci3
+ libpciaccess0
+ libpcre16-3
+ libpcre3
+ libpcre3-dev
+ libpcre32-3
+ libpcrecpp0v5
+ libpixman-1-0
+ libpixman-1-dev
+ libpng-dev
+ libpng16-16
+ libpthread-stubs0-dev
+ libpulse-dev
+ libpulse-mainloop-glib0
+ libpulse0
+ libre2-3
+ libre2-dev
+ librest-0.7-0
+ libselinux1
+ libsm6
+ libsnappy-dev
+ libsnappy1v5
+ libsndfile1
+ libsoup-gnome2.4-1
+ libsoup2.4-1
+ libspeechd-dev
+ libspeechd2
+ libsqlite3-0
+ libssl-dev
+ libssl1.0.2
+ libssl1.1
+ libstdc++-6-dev
+ libstdc++6
+ libsystemd0
+ libtasn1-6
+ libthai0
+ libtiff5
+ libudev-dev
+ libudev1
+ libunbound2
+ libunistring2
+ libuuid1
+ libva-dev
+ libva-drm2
+ libva-glx2
+ libva-wayland2
+ libva-x11-2
+ libva2
+ libvorbis0a
+ libvorbisenc2
+ libvpx-dev
+ libvpx5
+ libwayland-client0
+ libwayland-cursor0
+ libwayland-dev
+ libwayland-egl1-mesa
+ libwayland-server0
+ libwebp-dev
+ libwebp6
+ libwebpdemux2
+ libwebpmux3
+ libwrap0
+ libx11-6
+ libx11-dev
+ libx11-xcb-dev
+ libx11-xcb1
+ libxau-dev
+ libxau6
+ libxcb-dri2-0
+ libxcb-dri3-0
+ libxcb-glx0
+ libxcb-present0
+ libxcb-render0
+ libxcb-render0-dev
+ libxcb-shm0
+ libxcb-shm0-dev
+ libxcb-sync1
+ libxcb-xfixes0
+ libxcb1
+ libxcb1-dev
+ libxcomposite-dev
+ libxcomposite1
+ libxcursor-dev
+ libxcursor1
+ libxdamage-dev
+ libxdamage1
+ libxdmcp-dev
+ libxdmcp6
+ libxext-dev
+ libxext6
+ libxfixes-dev
+ libxfixes3
+ libxft2
+ libxi-dev
+ libxi6
+ libxinerama-dev
+ libxinerama1
+ libxkbcommon-dev
+ libxkbcommon0
+ libxml2
+ libxrandr-dev
+ libxrandr2
+ libxrender-dev
+ libxrender1
+ libxshmfence1
+ libxslt1-dev
+ libxslt1.1
+ libxss-dev
+ libxss1
+ libxt-dev
+ libxt6
+ libxtst-dev
+ libxtst6
+ libxxf86vm1
+ linux-libc-dev
+ mesa-common-dev
+ speech-dispatcher
+ uuid-dev
+ wayland-protocols
+ x11proto-composite-dev
+ x11proto-core-dev
+ x11proto-damage-dev
+ x11proto-fixes-dev
+ x11proto-input-dev
+ x11proto-kb-dev
+ x11proto-randr-dev
+ x11proto-record-dev
+ x11proto-render-dev
+ x11proto-scrnsaver-dev
+ x11proto-xext-dev
+ x11proto-xinerama-dev
+ zlib1g
+ zlib1g-dev
+"
+
+DEBIAN_PACKAGES_AMD64="
+ liblsan0
+ libtsan0
+"
+
+DEBIAN_PACKAGES_X86="
+ libasan3
+ libcilkrts5
+ libdrm-intel1
+ libitm1
+ libmpx2
+ libquadmath0
+ libubsan0
+"
+
+DEBIAN_PACKAGES_ARM="
+ libasan3
+ libdrm-etnaviv1
+ libdrm-exynos1
+ libdrm-freedreno1
+ libdrm-omap1
+ libdrm-tegra0
+ libubsan0
+"
+
+DEBIAN_PACKAGES_ARM64="
+ libasan3
+ libdrm-freedreno1
+ libdrm-tegra0
+ libgmp10
+ libitm1
+ libthai0
+ libubsan0
+"
+
+. "${SCRIPT_DIR}/sysroot-creator.sh"
diff --git a/chromium/build/linux/sysroot_scripts/sysroot-creator-stretch.sh b/chromium/build/linux/sysroot_scripts/sysroot-creator-stretch.sh
index 077abd54ea4..946734ffbac 100755
--- a/chromium/build/linux/sysroot_scripts/sysroot-creator-stretch.sh
+++ b/chromium/build/linux/sysroot_scripts/sysroot-creator-stretch.sh
@@ -32,6 +32,10 @@ HAS_ARCH_MIPS64EL=1
DEBIAN_PACKAGES="\
comerr-dev
krb5-multidev
+ libappindicator-dev
+ libappindicator1
+ libappindicator3-1
+ libappindicator3-dev
libasound2
libasound2-dev
libasyncns0
@@ -72,6 +76,10 @@ DEBIAN_PACKAGES="\
libdbus-1-3
libdbus-1-dev
libdbus-glib-1-2
+ libdbusmenu-glib-dev
+ libdbusmenu-glib4
+ libdbusmenu-gtk3-4
+ libdbusmenu-gtk4
libdrm-amdgpu1
libdrm-dev
libdrm-nouveau2
@@ -133,6 +141,8 @@ DEBIAN_PACKAGES="\
libicu57
libidl-2-0
libidn11
+ libindicator3-7
+ libindicator7
libjbig0
libjpeg62-turbo
libjson-glib-1.0-0
diff --git a/chromium/build/linux/sysroot_scripts/sysroot-creator.sh b/chromium/build/linux/sysroot_scripts/sysroot-creator.sh
index d041578aa08..f90fd229ee1 100644
--- a/chromium/build/linux/sysroot_scripts/sysroot-creator.sh
+++ b/chromium/build/linux/sysroot_scripts/sysroot-creator.sh
@@ -51,13 +51,13 @@ readonly HAS_ARCH_ARM64=${HAS_ARCH_ARM64:=0}
readonly HAS_ARCH_MIPS=${HAS_ARCH_MIPS:=0}
readonly HAS_ARCH_MIPS64EL=${HAS_ARCH_MIPS64EL:=0}
-readonly REQUIRED_TOOLS="curl gunzip"
+readonly REQUIRED_TOOLS="curl xzcat"
######################################################################
# Package Config
######################################################################
-readonly PACKAGES_EXT=gz
+readonly PACKAGES_EXT=xz
readonly RELEASE_FILE="Release"
readonly RELEASE_FILE_GPG="Release.gpg"
@@ -106,7 +106,7 @@ DownloadOrCopy() {
# instances of sysroot-creator.sh from trying to write to the same file.
# --create-dirs is added in case there are slashes in the filename, as can
# happen with the "debian/security" release class.
- curl "$1" --create-dirs -o "${2}.partial.$$"
+ curl -L "$1" --create-dirs -o "${2}.partial.$$"
mv "${2}.partial.$$" $2
else
SubBanner "copying from $1"
@@ -187,11 +187,11 @@ CreateTarBall() {
tar -I "xz -9 -T0" -cf ${TARBALL} -C ${INSTALL_ROOT} .
}
-ExtractPackageGz() {
+ExtractPackageXz() {
local src_file="$1"
local dst_file="$2"
local repo="$3"
- gunzip -c "${src_file}" | egrep '^(Package:|Filename:|SHA256:) ' |
+ xzcat "${src_file}" | egrep '^(Package:|Filename:|SHA256:) ' |
sed "s|Filename: |Filename: ${repo}|" > "${dst_file}"
}
@@ -210,7 +210,7 @@ GeneratePackageListDist() {
DownloadOrCopy "${package_list_arch}" "${package_list}"
VerifyPackageListing "${package_file_arch}" "${package_list}" ${repo} ${dist}
- ExtractPackageGz "${package_list}" "${TMP_PACKAGE_LIST}" ${repo}
+ ExtractPackageXz "${package_list}" "${TMP_PACKAGE_LIST}" ${repo}
}
GeneratePackageListCommon() {
@@ -304,6 +304,17 @@ HacksAndPatchesCommon() {
cp "${SCRIPT_DIR}/libdbus-1-3-symbols" \
"${INSTALL_ROOT}/debian/libdbus-1-3/DEBIAN/symbols"
+ # Glibc 2.27 introduced some new optimizations to several math functions, but
+ # it will be a while before it makes it into all supported distros. Luckily,
+ # glibc maintains ABI compatibility with previous versions, so the old symbols
+ # are still there.
+ # TODO(thomasanderson): Remove this once glibc 2.27 is available on all
+ # supported distros.
+ local math_h="${INSTALL_ROOT}/usr/include/math.h"
+ local libm_so="${INSTALL_ROOT}/lib/${arch}-${os}/libm.so.6"
+ nm -D --defined-only --with-symbol-versions "${libm_so}" | \
+ "${SCRIPT_DIR}/find_incompatible_glibc_symbols.py" >> "${math_h}"
+
# This is for chrome's ./build/linux/pkg-config-wrapper
# which overwrites PKG_CONFIG_LIBDIR internally
SubBanner "Move pkgconfig scripts"
@@ -716,7 +727,7 @@ CheckForDebianGPGKeyring() {
#
# VerifyPackageListing
#
-# Verifies the downloaded Packages.bz2 file has the right checksums.
+# Verifies the downloaded Packages.xz file has the right checksums.
#
VerifyPackageListing() {
local file_path="$1"
diff --git a/chromium/build/linux/sysroot_scripts/sysroots.json b/chromium/build/linux/sysroot_scripts/sysroots.json
index 243394ed7a2..870a994ec9f 100644
--- a/chromium/build/linux/sysroot_scripts/sysroots.json
+++ b/chromium/build/linux/sysroot_scripts/sysroots.json
@@ -1,37 +1,73 @@
{
+ "sid_amd64": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "85ac8d5e0f6cff99fc323fd3d29cb73e2aa970e2",
+ "SysrootDir": "debian_sid_amd64-sysroot",
+ "Tarball": "debian_sid_amd64_sysroot.tar.xz"
+ },
+ "sid_arm": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "ed31924757f11885a21793dc4b928d07ab25740c",
+ "SysrootDir": "debian_sid_arm-sysroot",
+ "Tarball": "debian_sid_arm_sysroot.tar.xz"
+ },
+ "sid_arm64": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "b9447285e58c5260bd9fa2737d1f0d1f82156738",
+ "SysrootDir": "debian_sid_arm64-sysroot",
+ "Tarball": "debian_sid_arm64_sysroot.tar.xz"
+ },
+ "sid_i386": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "f09856d93f39e8df84ffd9c04881f44e6cbc0508",
+ "SysrootDir": "debian_sid_i386-sysroot",
+ "Tarball": "debian_sid_i386_sysroot.tar.xz"
+ },
+ "sid_mips": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "90586b566b567b2bcf49e7fd112f0c8189bbd07b",
+ "SysrootDir": "debian_sid_mips-sysroot",
+ "Tarball": "debian_sid_mips_sysroot.tar.xz"
+ },
+ "sid_mips64el": {
+ "Revision": "15b7efb900d75f7316c6e713e80f87b9904791b1",
+ "Sha1Sum": "f90c3b81485ffebb283afddb1a72bc61e14c593d",
+ "SysrootDir": "debian_sid_mips64el-sysroot",
+ "Tarball": "debian_sid_mips64el_sysroot.tar.xz"
+ },
"stretch_amd64": {
- "Revision": "2202c161310ffde63729f29d27fe7bb24a0bc540",
- "Sha1Sum": "eb7e2d2c563b6a6f6e32b967d5585a6d33636d35",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "a668aafe335848c6e4aed11d0b32ea2d5c5a124d",
"SysrootDir": "debian_stretch_amd64-sysroot",
"Tarball": "debian_stretch_amd64_sysroot.tar.xz"
},
"stretch_arm": {
- "Revision": "2202c161310ffde63729f29d27fe7bb24a0bc540",
- "Sha1Sum": "1d827c64de8f0205bef7ec0c9c7f769326e32141",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "4658f558326d93d8a69fe6940bc19cf7de32cf4d",
"SysrootDir": "debian_stretch_arm-sysroot",
"Tarball": "debian_stretch_arm_sysroot.tar.xz"
},
"stretch_arm64": {
- "Revision": "1e9c6777efb621794e8385ab9b4faf3546c29bf2",
- "Sha1Sum": "35fd438e9dfc39d75d1e03badc8b309e3ad94acd",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "a3c530ff8a5d9be34dd6fc07a05188ea947116cf",
"SysrootDir": "debian_stretch_arm64-sysroot",
"Tarball": "debian_stretch_arm64_sysroot.tar.xz"
},
"stretch_i386": {
- "Revision": "2202c161310ffde63729f29d27fe7bb24a0bc540",
- "Sha1Sum": "8fa3ac112fe5bb583624100379f715f3db5d6965",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "98425d632814b45289ca6c3acb38d8e11c487ec6",
"SysrootDir": "debian_stretch_i386-sysroot",
"Tarball": "debian_stretch_i386_sysroot.tar.xz"
},
"stretch_mips": {
- "Revision": "2202c161310ffde63729f29d27fe7bb24a0bc540",
- "Sha1Sum": "85a3f9e3f2d6ff2a5b2623f202689ef03ea12231",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "dcb078646b49c94298cf702acc5ece28a689fea4",
"SysrootDir": "debian_stretch_mips-sysroot",
"Tarball": "debian_stretch_mips_sysroot.tar.xz"
},
"stretch_mips64el": {
- "Revision": "2202c161310ffde63729f29d27fe7bb24a0bc540",
- "Sha1Sum": "004ad054e0613b9d8d51573068387625bb657d12",
+ "Revision": "3c248ba4290a5ad07085b7af07e6785bf1ae5b66",
+ "Sha1Sum": "a68c72c6b6d4fad8d43e268cc081ce6afeaa79e4",
"SysrootDir": "debian_stretch_mips64el-sysroot",
"Tarball": "debian_stretch_mips64el_sysroot.tar.xz"
}
diff --git a/chromium/build/linux/unbundle/ffmpeg.gn b/chromium/build/linux/unbundle/ffmpeg.gn
index 978298a7f29..ee3da1533f0 100644
--- a/chromium/build/linux/unbundle/ffmpeg.gn
+++ b/chromium/build/linux/unbundle/ffmpeg.gn
@@ -14,8 +14,8 @@ pkg_config("system_ffmpeg") {
]
}
-buildflag_header("ffmpeg_features") {
- header = "ffmpeg_features.h"
+buildflag_header("ffmpeg_buildflags") {
+ header = "ffmpeg_buildflags.h"
flags = [ "USE_SYSTEM_FFMPEG=true" ]
}
@@ -30,7 +30,7 @@ shim_headers("ffmpeg_shim") {
source_set("ffmpeg") {
deps = [
- ":ffmpeg_features",
+ ":ffmpeg_buildflags",
":ffmpeg_shim",
]
public_configs = [ ":system_ffmpeg" ]
diff --git a/chromium/build/linux/unbundle/libwebp.gn b/chromium/build/linux/unbundle/libwebp.gn
index dd71f867845..ab92adecf40 100644
--- a/chromium/build/linux/unbundle/libwebp.gn
+++ b/chromium/build/linux/unbundle/libwebp.gn
@@ -2,10 +2,16 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-source_set("libwebp") {
+source_set("libwebp_webp") {
libs = [
"webp",
"webpdemux",
"webpmux",
]
}
+
+group("libwebp") {
+ deps = [
+ ":libwebp_webp",
+ ]
+}
diff --git a/chromium/build/nocompile.gni b/chromium/build/nocompile.gni
index 703351b4577..be6e5af481a 100644
--- a/chromium/build/nocompile.gni
+++ b/chromium/build/nocompile.gni
@@ -86,11 +86,11 @@ if (enable_nocompile_tests) {
"-nostdinc++",
"-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir),
"-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir),
- "-isystem" + rebase_path("$libunwind_prefix/include", root_build_dir),
"-std=c++14",
"-Wall",
"-Werror",
"-Wfatal-errors",
+ "-Wthread-safety",
"-I" + rebase_path("//", root_build_dir),
]
if (sysroot != "") {
diff --git a/chromium/build/print_python_deps.py b/chromium/build/print_python_deps.py
index 92c75a535eb..fe71c4a3292 100755
--- a/chromium/build/print_python_deps.py
+++ b/chromium/build/print_python_deps.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env vpython
# Copyright 2016 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.
diff --git a/chromium/build/sanitizers/tsan_suppressions.cc b/chromium/build/sanitizers/tsan_suppressions.cc
index 3580dbbc93b..9cd0a82aed9 100644
--- a/chromium/build/sanitizers/tsan_suppressions.cc
+++ b/chromium/build/sanitizers/tsan_suppressions.cc
@@ -236,8 +236,10 @@ char kTSanDefaultSuppressions[] =
// http://crbug.com/587199
"race:base::TimerTest_OneShotTimer_CustomTaskRunner_Test::TestBody\n"
- "race:base::TimerSequenceTest_OneShotTimerTaskOnPoolThread_Test::TestBody\n"
- "race:base::TimerSequenceTest_OneShotTimerUsedAndTaskedOnDifferentPools\n"
+ "race:base::TimerSequenceTest_OneShotTimerTaskOnPoolSequence_Test::"
+ "TestBody\n"
+ "race:base::TimerSequenceTest_"
+ "OneShotTimerUsedAndTaskedOnDifferentSequences\n"
// http://crbug.com/v8/6065
"race:net::(anonymous namespace)::ProxyResolverV8TracingImpl::RequestImpl"
diff --git a/chromium/build/secondary/third_party/android_platform/development/scripts/BUILD.gn b/chromium/build/secondary/third_party/android_platform/development/scripts/BUILD.gn
index 6de67e87e21..6a3f7aafd0e 100644
--- a/chromium/build/secondary/third_party/android_platform/development/scripts/BUILD.gn
+++ b/chromium/build/secondary/third_party/android_platform/development/scripts/BUILD.gn
@@ -5,16 +5,14 @@
import("//build/config/android/config.gni")
group("stack_py") {
- _py_files = read_file(
- "//build/secondary/third_party/android_platform/development/scripts/stack.pydeps",
- "list lines")
+ _pydeps_file = "//build/secondary/third_party/android_platform/development/scripts/stack.pydeps"
+ _py_files = read_file(_pydeps_file, "list lines")
set_sources_assignment_filter([ "#*" ])
sources = _py_files
- data = sources
-
- data += [
- "//third_party/android_platform/development/scripts/stack",
- "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer",
- ]
+ data = sources + [
+ _pydeps_file,
+ "//third_party/android_platform/development/scripts/stack",
+ "//third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer",
+ ]
}
diff --git a/chromium/build/secondary/third_party/android_tools/BUILD.gn b/chromium/build/secondary/third_party/android_tools/BUILD.gn
index f748b40488a..f0799140739 100644
--- a/chromium/build/secondary/third_party/android_tools/BUILD.gn
+++ b/chromium/build/secondary/third_party/android_tools/BUILD.gn
@@ -46,55 +46,61 @@ support_lib_alias("android_gcm_java") {
}
support_lib_alias("emma_device_java") {
}
-support_lib_alias("android_arch_lifecycle_common_java") {
+prebuilt_wrapper("android_arch_lifecycle_common_java") {
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_arch_lifecycle_runtime_java") {
+prebuilt_wrapper("android_arch_lifecycle_runtime_java") {
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_multidex_java") {
+prebuilt_wrapper("android_support_multidex_java") {
+ android_deps_target_name = "com_android_support_multidex_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_annotations_java") {
+prebuilt_wrapper("android_support_annotations_java") {
+ android_deps_target_name = "com_android_support_support_annotations_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_cardview_java") {
+prebuilt_wrapper("android_support_cardview_java") {
+ android_deps_target_name = "com_android_support_cardview_v7_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_compat_java") {
+prebuilt_wrapper("android_support_compat_java") {
+ android_deps_target_name = "com_android_support_support_compat_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_core_ui_java") {
+prebuilt_wrapper("android_support_core_ui_java") {
+ android_deps_target_name = "com_android_support_support_core_ui_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_core_utils_java") {
+prebuilt_wrapper("android_support_core_utils_java") {
+ android_deps_target_name = "com_android_support_support_core_utils_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_design_java") {
+prebuilt_wrapper("android_support_design_java") {
+ android_deps_target_name = "com_android_support_design_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_fragment_java") {
+prebuilt_wrapper("android_support_v4_java") {
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_media_compat_java") {
+prebuilt_wrapper("android_support_v7_appcompat_java") {
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_transition_java") {
+prebuilt_wrapper("android_support_v7_gridlayout_java") {
+ android_deps_target_name = "com_android_support_gridlayout_v7_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_v4_java") {
+prebuilt_wrapper("android_support_v7_mediarouter_java") {
+ android_deps_target_name = "com_android_support_mediarouter_v7_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_v7_appcompat_java") {
+prebuilt_wrapper("android_support_v7_recyclerview_java") {
+ android_deps_target_name = "com_android_support_recyclerview_v7_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
-support_lib_alias("android_support_v7_appcompat_java_internal") {
-}
-support_lib_alias("android_support_v7_gridlayout_java") {
-}
-support_lib_alias("android_support_v7_mediarouter_java") {
-}
-support_lib_alias("android_support_v7_palette_java") {
-}
-support_lib_alias("android_support_v7_preference_java") {
-}
-support_lib_alias("android_support_v7_recyclerview_java") {
-}
-support_lib_alias("android_support_v13_java") {
-}
-support_lib_alias("android_support_v14_preference_java") {
-}
-support_lib_alias("android_support_v17_leanback_java") {
-}
-support_lib_alias("android_support_v17_preference_java") {
-}
-support_lib_alias("android_support_vector_drawable_java") {
+prebuilt_wrapper("android_support_v13_java") {
+ android_deps_target_name = "com_android_support_support_v13_java"
+ fallback_target = "$android_support_library_package:$target_name"
}
# TODO(dgn): Use the POM files instead of hardcoding the dependencies.
diff --git a/chromium/build/secondary/third_party/android_tools/support/BUILD.gn b/chromium/build/secondary/third_party/android_tools/support/BUILD.gn
index adcae6816cc..2d8e6760982 100644
--- a/chromium/build/secondary/third_party/android_tools/support/BUILD.gn
+++ b/chromium/build/secondary/third_party/android_tools/support/BUILD.gn
@@ -4,10 +4,7 @@
import("//build/config/android/rules.gni")
-visibility = [
- ":*",
- "//third_party/android_tools:*",
-]
+visibility = [ ":*" ]
lib_version = "27.0.0"
lib_path = "//third_party/android_tools/sdk/extras/android/m2repository/com/android/support"
@@ -19,15 +16,18 @@ build_file_dir = "//build/secondary/third_party/android_tools/support"
android_library("android_support_chromium_java") {
testonly = true
java_files = [ "//third_party/android_tools/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java" ]
+ visibility += [ "//third_party/android_tools:*" ]
}
android_java_prebuilt("android_gcm_java") {
jar_path = "//third_party/android_tools/sdk/extras/google/gcm/gcm-client/dist/gcm.jar"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_java_prebuilt("emma_device_java") {
jar_path = "//third_party/android_tools/sdk/tools/lib/emma_device.jar"
include_java_resources = true
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_design_java") {
@@ -40,6 +40,7 @@ android_aar_prebuilt("android_support_design_java") {
_lib_name = "design"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_transition_java") {
@@ -58,11 +59,13 @@ android_aar_prebuilt("android_support_cardview_java") {
_lib_name = "cardview-v7"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_multidex_java") {
aar_path = "$lib_path/multidex/1.0.1/multidex-1.0.1.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_arch_lifecycle_runtime_java") {
@@ -73,6 +76,7 @@ android_aar_prebuilt("android_arch_lifecycle_runtime_java") {
":android_arch_lifecycle_common_java",
":android_support_annotations_java",
]
+ visibility += [ "//third_party/android_tools:*" ]
}
android_java_prebuilt("android_arch_lifecycle_common_java") {
@@ -81,6 +85,7 @@ android_java_prebuilt("android_arch_lifecycle_common_java") {
deps = [
":android_support_annotations_java",
]
+ visibility += [ "//third_party/android_tools:*" ]
}
android_java_prebuilt("android_arch_core_common_java") {
@@ -94,6 +99,7 @@ android_java_prebuilt("android_arch_core_common_java") {
android_java_prebuilt("android_support_annotations_java") {
_lib_name = "support-annotations"
jar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.jar"
+ visibility += [ "//third_party/android_tools:*" ]
}
java_group("android_support_v4_java") {
@@ -104,6 +110,7 @@ java_group("android_support_v4_java") {
":android_support_fragment_java",
":android_support_media_compat_java",
]
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_compat_java") {
@@ -115,6 +122,7 @@ android_aar_prebuilt("android_support_compat_java") {
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
ignore_aidl = true # We don't appear to need these currently.
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_core_ui_java") {
@@ -124,6 +132,7 @@ android_aar_prebuilt("android_support_core_ui_java") {
_lib_name = "support-core-ui"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_core_utils_java") {
@@ -133,6 +142,7 @@ android_aar_prebuilt("android_support_core_utils_java") {
_lib_name = "support-core-utils"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_fragment_java") {
@@ -164,6 +174,7 @@ android_aar_prebuilt("android_support_v13_java") {
_lib_name = "support-v13"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_vector_drawable_java") {
@@ -201,6 +212,7 @@ java_group("android_support_v7_appcompat_java") {
":android_support_v7_appcompat_java_internal",
":android_support_vector_drawable_java",
]
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_v7_gridlayout_java") {
@@ -211,6 +223,7 @@ android_aar_prebuilt("android_support_v7_gridlayout_java") {
_lib_name = "gridlayout-v7"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_v7_mediarouter_java") {
@@ -221,6 +234,7 @@ android_aar_prebuilt("android_support_v7_mediarouter_java") {
_lib_name = "mediarouter-v7"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_v7_recyclerview_java") {
@@ -232,6 +246,7 @@ android_aar_prebuilt("android_support_v7_recyclerview_java") {
_lib_name = "recyclerview-v7"
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
+ visibility += [ "//third_party/android_tools:*" ]
}
android_aar_prebuilt("android_support_v7_palette_java") {
@@ -243,50 +258,3 @@ android_aar_prebuilt("android_support_v7_palette_java") {
aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
info_path = "$build_file_dir/$target_name.info"
}
-
-android_aar_prebuilt("android_support_v7_preference_java") {
- deps = [
- ":android_support_v4_java",
- ":android_support_v7_appcompat_java",
- ":android_support_v7_recyclerview_java",
- ]
- _lib_name = "preference-v7"
- aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
- info_path = "$build_file_dir/$target_name.info"
-}
-
-android_aar_prebuilt("android_support_v14_preference_java") {
- deps = [
- ":android_support_v4_java",
- ":android_support_v7_appcompat_java",
- ":android_support_v7_preference_java",
- ":android_support_v7_recyclerview_java",
- ]
- _lib_name = "preference-v14"
- aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
- info_path = "$build_file_dir/$target_name.info"
-}
-
-android_aar_prebuilt("android_support_v17_leanback_java") {
- deps = [
- ":android_support_v4_java",
- ":android_support_v7_recyclerview_java",
- ]
- _lib_name = "leanback-v17"
- aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
- info_path = "$build_file_dir/$target_name.info"
-}
-
-android_aar_prebuilt("android_support_v17_preference_java") {
- deps = [
- ":android_support_v14_preference_java",
- ":android_support_v17_leanback_java",
- ":android_support_v4_java",
- ":android_support_v7_appcompat_java",
- ":android_support_v7_preference_java",
- ":android_support_v7_recyclerview_java",
- ]
- _lib_name = "preference-leanback-v17"
- aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar"
- info_path = "$build_file_dir/$target_name.info"
-}
diff --git a/chromium/build/secondary/third_party/catapult/devil/BUILD.gn b/chromium/build/secondary/third_party/catapult/devil/BUILD.gn
index 50e6050cbb6..5e9707e7ecf 100644
--- a/chromium/build/secondary/third_party/catapult/devil/BUILD.gn
+++ b/chromium/build/secondary/third_party/catapult/devil/BUILD.gn
@@ -2,6 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//build/symlink.gni")
+import("//build/secondary/third_party/catapult/devil/devil_arm.gni")
import("//testing/android/empty_apk/empty_apk.gni")
empty_apk("empty_system_webview_apk") {
@@ -13,7 +15,36 @@ group("devil") {
testonly = true
deps = [
":empty_system_webview_apk",
+ "//buildtools/third_party/libc++($host_toolchain)",
"//tools/android/forwarder2",
"//tools/android/md5sum",
]
+
+ if (build_devil_arm_deps) {
+ deps += [
+ ":host_forwarder_arm",
+ ":libcxx_arm",
+ ":md5sum_bin_host_arm",
+ ]
+ }
+}
+
+if (build_devil_arm_deps) {
+ binary_symlink("host_forwarder_arm") {
+ binary_label = "//tools/android/forwarder2:host_forwarder(//build/toolchain/linux:clang_arm)"
+ output_name = "host_forwarder_arm"
+ }
+
+ binary_symlink("md5sum_bin_host_arm") {
+ binary_label =
+ "//tools/android/md5sum:md5sum_bin(//build/toolchain/linux:clang_arm)"
+ output_name = "md5sum_bin_host_arm"
+ }
+
+ binary_symlink("libcxx_arm") {
+ binary_label =
+ "//buildtools/third_party/libc++(//build/toolchain/linux:clang_arm)"
+ binary_output_name = "libc++.so"
+ output_name = "libc++_arm"
+ }
}
diff --git a/chromium/build/secondary/third_party/catapult/devil/devil_arm.gni b/chromium/build/secondary/third_party/catapult/devil/devil_arm.gni
new file mode 100644
index 00000000000..04c5e40e5d6
--- /dev/null
+++ b/chromium/build/secondary/third_party/catapult/devil/devil_arm.gni
@@ -0,0 +1,9 @@
+# Copyright 2018 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.
+
+declare_args() {
+ # Whether to build Devil host dependencies for Linux arm, e.g. for use on
+ # Raspberry Pis.
+ build_devil_arm_deps = false
+}
diff --git a/chromium/build/slave/OWNERS b/chromium/build/slave/OWNERS
deleted file mode 100644
index f562c929a10..00000000000
--- a/chromium/build/slave/OWNERS
+++ /dev/null
@@ -1,20 +0,0 @@
-set noparent
-agable@chromium.org
-agable@google.com
-cmp@chromium.org
-cmp@google.com
-dpranke@chromium.org
-iannucci@chromium.org
-iannucci@google.com
-johnw@chromium.org
-johnw@google.com
-maruel@chromium.org
-maruel@google.com
-mmoss@chromium.org
-mmoss@google.com
-pschmidt@chromium.org
-pschmidt@google.com
-stip@chromium.org
-stip@google.com
-szager@chromium.org
-szager@google.com
diff --git a/chromium/build/slave/README b/chromium/build/slave/README
deleted file mode 100644
index e3718b2c281..00000000000
--- a/chromium/build/slave/README
+++ /dev/null
@@ -1,8 +0,0 @@
-This is a directory which contains configuration information for the
-buildsystem.
-
-* Under recipes, the buildsystem should use only this directory as an
- entry point into src/.
-
-* Scripts in this directory must not import from outside this directory or shell
- to scripts outside this directory.
diff --git a/chromium/build/toolchain/BUILD.gn b/chromium/build/toolchain/BUILD.gn
index dacbd0fb604..75701ded703 100644
--- a/chromium/build/toolchain/BUILD.gn
+++ b/chromium/build/toolchain/BUILD.gn
@@ -3,9 +3,23 @@
# found in the LICENSE file.
import("//build/toolchain/concurrent_links.gni")
+import("//build/toolchain/goma.gni")
+
+declare_args() {
+ # Pool for non goma tasks.
+ action_pool_depth = -1
+}
+
+if (action_pool_depth == -1 || use_goma) {
+ action_pool_depth = exec_script("get_cpu_count.py", [], "value")
+}
if (current_toolchain == default_toolchain) {
pool("link_pool") {
depth = concurrent_links
}
+
+ pool("action_pool") {
+ depth = action_pool_depth
+ }
}
diff --git a/chromium/build/toolchain/OWNERS b/chromium/build/toolchain/OWNERS
index c6cda3fcdde..85d8d311602 100644
--- a/chromium/build/toolchain/OWNERS
+++ b/chromium/build/toolchain/OWNERS
@@ -1,3 +1,2 @@
-brettw@chromium.org
dpranke@chromium.org
scottmg@chromium.org
diff --git a/chromium/build/toolchain/concurrent_links.gni b/chromium/build/toolchain/concurrent_links.gni
index 6962c46bb3d..e68384f3472 100644
--- a/chromium/build/toolchain/concurrent_links.gni
+++ b/chromium/build/toolchain/concurrent_links.gni
@@ -29,12 +29,23 @@ if (concurrent_links == -1) {
# Sanitizer coverage instrumentation increases linker memory consumption
# significantly.
_args = [ "--mem_per_link_gb=16" ]
+ } else if (is_win && symbol_level == 1 && !is_debug) {
+ _args = [ "--mem_per_link_gb=3" ]
} else if (is_win) {
_args = [ "--mem_per_link_gb=5" ]
} else if (is_mac) {
_args = [ "--mem_per_link_gb=4" ]
} else if (is_android && !is_component_build && symbol_level == 2) {
+ # Full debug symbols require large memory for link.
_args = [ "--mem_per_link_gb=25" ]
+ } else if (is_android && !is_debug && !using_sanitizer && symbol_level == 0) {
+ # Increase the number of concurrent links for release bots. Debug builds
+ # make heavier use of ProGuard, and so should not be raised. Sanitizers also
+ # increase the memory overhead.
+ _args = [ "--mem_per_link_gb=4" ]
+ } else if (is_linux && !is_chromeos && symbol_level == 0) {
+ # Memory consumption on link without debug symbols is low on linux.
+ _args = [ "--mem_per_link_gb=3" ]
} else {
_args = []
}
diff --git a/chromium/build/toolchain/fuchsia/BUILD.gn b/chromium/build/toolchain/fuchsia/BUILD.gn
index a0a84f399ee..a5151e39105 100644
--- a/chromium/build/toolchain/fuchsia/BUILD.gn
+++ b/chromium/build/toolchain/fuchsia/BUILD.gn
@@ -13,10 +13,10 @@ template("fuchsia_clang_toolchain") {
assert(defined(invoker.toolchain_args),
"toolchain_args must be defined for fuchsia_clang_toolchain()")
- # TODO(fuchsia): eu-strip defaults to removing all symbols, preventing back-
- # traces from being symbolized. Reinstate this for production builds, or
- # perhaps configure it to only strip debug symbols (crbug.com/792521).
- #strip = rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir)
+ # We want to build and strip binaries, but retain the unstripped binaries
+ # in runtime_deps to make them available for isolates.
+ strip = rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir)
+ use_unstripped_as_runtime_outputs = true
toolchain_args = invoker.toolchain_args
toolchain_args.current_os = "fuchsia"
diff --git a/chromium/build/toolchain/gcc_toolchain.gni b/chromium/build/toolchain/gcc_toolchain.gni
index be2d29e0e50..89d59696ba4 100644
--- a/chromium/build/toolchain/gcc_toolchain.gni
+++ b/chromium/build/toolchain/gcc_toolchain.gni
@@ -577,6 +577,10 @@ template("gcc_toolchain") {
description = copy_description
}
+ tool("action") {
+ pool = "//build/toolchain:action_pool($default_toolchain)"
+ }
+
forward_variables_from(invoker, [ "deps" ])
}
}
@@ -609,6 +613,7 @@ template("clang_toolchain") {
"strip",
"is_clang_analysis_supported",
"enable_linker_map",
+ "use_unstripped_as_runtime_outputs",
])
toolchain_args = {
diff --git a/chromium/build/toolchain/get_concurrent_links.py b/chromium/build/toolchain/get_concurrent_links.py
index dc998398aec..45a932c1646 100644
--- a/chromium/build/toolchain/get_concurrent_links.py
+++ b/chromium/build/toolchain/get_concurrent_links.py
@@ -5,6 +5,7 @@
# This script computs the number of concurrent links we want to run in the build
# as a function of machine spec. It's based on GetDefaultConcurrentLinks in GYP.
+import multiprocessing
import optparse
import os
import re
@@ -59,7 +60,13 @@ def _GetDefaultConcurrentLinks(mem_per_link_gb, reserve_mem_gb):
mem_total_bytes = max(0, mem_total_bytes - reserve_mem_gb * 2**30)
num_concurrent_links = int(max(1, mem_total_bytes / mem_per_link_gb / 2**30))
hard_cap = max(1, int(os.getenv('GYP_LINK_CONCURRENCY_MAX', 2**32)))
- return min(num_concurrent_links, hard_cap)
+
+ try:
+ cpu_cap = multiprocessing.cpu_count()
+ except:
+ cpu_cap = 1
+
+ return min(num_concurrent_links, hard_cap, cpu_cap)
def main():
diff --git a/chromium/build/toolchain/get_cpu_count.py b/chromium/build/toolchain/get_cpu_count.py
new file mode 100644
index 00000000000..1609ce60aff
--- /dev/null
+++ b/chromium/build/toolchain/get_cpu_count.py
@@ -0,0 +1,21 @@
+# Copyright 2018 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.
+
+# This script shows cpu count to specify capacity of action pool.
+
+import multiprocessing
+import sys
+
+def main():
+ try:
+ cpu_count = multiprocessing.cpu_count()
+ except:
+ cpu_count = 1
+
+ print cpu_count
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/chromium/build/toolchain/goma.gni b/chromium/build/toolchain/goma.gni
index 2198f493965..a09763cb3e3 100644
--- a/chromium/build/toolchain/goma.gni
+++ b/chromium/build/toolchain/goma.gni
@@ -15,10 +15,15 @@ declare_args() {
# Set the default value based on the platform.
if (host_os == "win") {
# Absolute directory containing the gomacc.exe binary.
- goma_dir = "C:\goma\goma-win64"
+ goma_dir = "C:\src\goma\goma-win64"
} else {
- # Absolute directory containing the gomacc binary.
- goma_dir = getenv("HOME") + "/goma"
+ if (getenv("GOMA_DIR") != "") {
+ # Absolute directory containing the gomacc binary.
+ goma_dir = getenv("GOMA_DIR")
+ } else {
+ # Absolute directory containing the gomacc binary.
+ goma_dir = getenv("HOME") + "/goma"
+ }
}
}
diff --git a/chromium/build/toolchain/mac/BUILD.gn b/chromium/build/toolchain/mac/BUILD.gn
index f66bca0ea2c..7fa01dcbe6d 100644
--- a/chromium/build/toolchain/mac/BUILD.gn
+++ b/chromium/build/toolchain/mac/BUILD.gn
@@ -436,6 +436,10 @@ template("mac_toolchain") {
description = "COMPILE_XCASSETS {{output}}"
pool = ":bundle_pool($default_toolchain)"
}
+
+ tool("action") {
+ pool = "//build/toolchain:action_pool($default_toolchain)"
+ }
}
}
diff --git a/chromium/build/toolchain/toolchain.gni b/chromium/build/toolchain/toolchain.gni
index 949aa09f4be..bc0f9117697 100644
--- a/chromium/build/toolchain/toolchain.gni
+++ b/chromium/build/toolchain/toolchain.gni
@@ -48,12 +48,7 @@ hermetic_xcode_path =
declare_args() {
if (is_clang) {
# Clang compiler version. Clang files are placed at version-dependent paths.
- if (llvm_force_head_revision) {
- clang_version = "7.0.0"
- } else {
- # TODO(hans): Trunk was updated; remove after the next roll.
- clang_version = "6.0.0"
- }
+ clang_version = "7.0.0"
}
}
diff --git a/chromium/build/toolchain/win/BUILD.gn b/chromium/build/toolchain/win/BUILD.gn
index df1a50fcffb..53f767a0bdd 100644
--- a/chromium/build/toolchain/win/BUILD.gn
+++ b/chromium/build/toolchain/win/BUILD.gn
@@ -299,22 +299,19 @@ template("msvc_toolchain") {
command = "$python_path $tool_wrapper_path link-wrapper $env False $link /nologo /OUT:$exename /PDB:$pdbname @$rspfile"
+ if (host_os == "win") {
+ shellprefix = "cmd /c"
+ } else {
+ shellprefix = ""
+ }
+ not_needed([ "shellprefix" ])
+
if (is_official_build) {
# On bots, the binary's PDB grow and eventually exceed 4G, causing the
# link to fail. As there's no utility to keeping the PDB around
# incrementally anyway in this config (because we're doing
# non-incremental LTCG builds), delete it before linking.
- command = "cmd /c $python_path $tool_wrapper_path delete-file $pdbname && $command"
- }
-
- if (linkrepro_root_dir != "") {
- # Create the directory that will receive the link repro for this target
- # if needed. Note that this will create one directory per link target
- # even if this target doesn't generate a link repro. This is necessary
- # because the linker doesn't generate the directory specified to the
- # /LINKREPRO flag if it doesn't exist.
- linkrepro_dir = "$linkrepro_root_dir\\{{target_output_name}}"
- command = "cmd /c mkdir $linkrepro_dir && $command"
+ command = "$shellprefix $python_path $tool_wrapper_path delete-file $pdbname && $command"
}
default_output_extension = ".exe"
@@ -339,10 +336,16 @@ template("msvc_toolchain") {
tool("stamp") {
command = stamp_command
description = stamp_description
+ pool = "//build/toolchain:action_pool($default_toolchain)"
}
tool("copy") {
command = copy_command
description = copy_description
+ pool = "//build/toolchain:action_pool($default_toolchain)"
+ }
+
+ tool("action") {
+ pool = "//build/toolchain:action_pool($default_toolchain)"
}
}
}
diff --git a/chromium/build/toolchain/win/rc/linux64/rc.sha1 b/chromium/build/toolchain/win/rc/linux64/rc.sha1
index edbf354d144..ad14ca46a99 100644
--- a/chromium/build/toolchain/win/rc/linux64/rc.sha1
+++ b/chromium/build/toolchain/win/rc/linux64/rc.sha1
@@ -1 +1 @@
-c6f648cc36e963072f6c18e980a69b299512a3ff \ No newline at end of file
+2d0c766039264dc2514d005a42f074af4838a446 \ No newline at end of file
diff --git a/chromium/build/toolchain/win/rc/mac/rc.sha1 b/chromium/build/toolchain/win/rc/mac/rc.sha1
index 03d09a0b953..dbd6302a359 100644
--- a/chromium/build/toolchain/win/rc/mac/rc.sha1
+++ b/chromium/build/toolchain/win/rc/mac/rc.sha1
@@ -1 +1 @@
-15fae6b7960f0614628b14c7f5e3809ff05dd75a \ No newline at end of file
+4c25c3bcb6608109bb52028d008835895cf72629 \ No newline at end of file
diff --git a/chromium/build/toolchain/win/rc/win/rc.exe.sha1 b/chromium/build/toolchain/win/rc/win/rc.exe.sha1
index f3bfe1f2798..3fdbfc0c206 100644
--- a/chromium/build/toolchain/win/rc/win/rc.exe.sha1
+++ b/chromium/build/toolchain/win/rc/win/rc.exe.sha1
@@ -1 +1 @@
-f87131fc898652b637554cf22097a077e13142dc \ No newline at end of file
+ba51d69039ffb88310b72b6568efa9f0de148f8f \ No newline at end of file
diff --git a/chromium/build/toolchain/win/tool_wrapper.py b/chromium/build/toolchain/win/tool_wrapper.py
index c64e84c62fc..2d46882c180 100644
--- a/chromium/build/toolchain/win/tool_wrapper.py
+++ b/chromium/build/toolchain/win/tool_wrapper.py
@@ -16,6 +16,18 @@ import stat
import string
import sys
+# tool_wrapper.py doesn't get invoked through python.bat so the Python bin
+# directory doesn't get added to the path. The Python module search logic
+# handles this fine and finds win32file.pyd. However the Windows module
+# search logic then looks for pywintypes27.dll and other DLLs in the path and
+# if it finds versions with a different bitness first then win32file.pyd will
+# fail to load with a cryptic error:
+# ImportError: DLL load failed: %1 is not a valid Win32 application.
+if sys.platform == 'win32':
+ os.environ['PATH'] = os.path.dirname(sys.executable) + \
+ os.pathsep + os.environ['PATH']
+ import win32file # pylint: disable=import-error
+
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# A regex matching an argument corresponding to the output filename passed to
@@ -141,10 +153,14 @@ class WinTool(object):
# For that reason, since going through the shell doesn't seem necessary on
# non-Windows don't do that there.
pdb_name = None
+ pe_name = None
for arg in args:
m = _LINK_PDB_OUT_ARG.match(arg)
if m:
pdb_name = m.group('out')
+ m = _LINK_EXE_OUT_ARG.match(arg)
+ if m:
+ pe_name = m.group('out')
for retry_count in range(_LINKER_RETRIES):
retry = False
link = subprocess.Popen(args, shell=sys.platform == 'win32', env=env,
@@ -167,6 +183,13 @@ class WinTool(object):
result = link.wait()
if not retry:
break
+ if result == 0 and sys.platform == 'win32':
+ # Flush the file buffers to try to work around a Windows 10 kernel bug,
+ # https://crbug.com/644525
+ output_handle = win32file.CreateFile(pe_name, win32file.GENERIC_WRITE,
+ 0, None, win32file.OPEN_EXISTING, 0, 0)
+ win32file.FlushFileBuffers(output_handle)
+ output_handle.Close()
return result
def ExecAsmWrapper(self, arch, *args):
diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE
index 04eb90ff080..b0a6160190e 100644
--- a/chromium/build/util/LASTCHANGE
+++ b/chromium/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=926d27280b919a1aeb0091392d56f63a38d2bc0b-
+LASTCHANGE=ecf119fc6a3bde1fefd18d2ef67abf0e21a35fe9-
diff --git a/chromium/build/util/lib/common/chrome_test_server_spawner.py b/chromium/build/util/lib/common/chrome_test_server_spawner.py
index 3cbcde170c2..b9844aa3915 100644
--- a/chromium/build/util/lib/common/chrome_test_server_spawner.py
+++ b/chromium/build/util/lib/common/chrome_test_server_spawner.py
@@ -22,21 +22,6 @@ import time
import urlparse
-DIR_SOURCE_ROOT = os.path.abspath(
- os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
- os.pardir))
-
-
-# Path that are needed to import necessary modules when launching a testserver.
-os.environ['PYTHONPATH'] = os.environ.get('PYTHONPATH', '') + (':%s:%s:%s:%s:%s'
- % (os.path.join(DIR_SOURCE_ROOT, 'third_party'),
- os.path.join(DIR_SOURCE_ROOT, 'third_party', 'tlslite'),
- os.path.join(DIR_SOURCE_ROOT, 'third_party', 'pyftpdlib', 'src'),
- os.path.join(DIR_SOURCE_ROOT, 'net', 'tools', 'testserver'),
- os.path.join(DIR_SOURCE_ROOT, 'components', 'sync', 'tools',
- 'testserver')))
-
-
SERVER_TYPES = {
'http': '',
'ftp': '-f',
@@ -47,8 +32,26 @@ SERVER_TYPES = {
}
+_DIR_SOURCE_ROOT = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
+ os.pardir))
+
+
+_logger = logging.getLogger(__name__)
+
+
+# Path that are needed to import necessary modules when launching a testserver.
+os.environ['PYTHONPATH'] = os.environ.get('PYTHONPATH', '') + (':%s:%s:%s:%s:%s'
+ % (os.path.join(_DIR_SOURCE_ROOT, 'third_party'),
+ os.path.join(_DIR_SOURCE_ROOT, 'third_party', 'tlslite'),
+ os.path.join(_DIR_SOURCE_ROOT, 'third_party', 'pyftpdlib', 'src'),
+ os.path.join(_DIR_SOURCE_ROOT, 'net', 'tools', 'testserver'),
+ os.path.join(_DIR_SOURCE_ROOT, 'components', 'sync', 'tools',
+ 'testserver')))
+
+
# The timeout (in seconds) of starting up the Python test server.
-TEST_SERVER_STARTUP_TIMEOUT = 10
+_TEST_SERVER_STARTUP_TIMEOUT = 10
def _GetServerTypeCommandLine(server_type):
@@ -137,9 +140,9 @@ class TestServerThread(threading.Thread):
"""
assert self.host_port == 0 and self.pipe_out and self.pipe_in
(in_fds, _, _) = select.select([self.pipe_in, ], [], [],
- TEST_SERVER_STARTUP_TIMEOUT)
+ _TEST_SERVER_STARTUP_TIMEOUT)
if len(in_fds) == 0:
- logging.error('Failed to wait to the Python test server to be started.')
+ _logger.error('Failed to wait to the Python test server to be started.')
return False
# First read the data length as an unsigned 4-byte value. This
# is _not_ using network byte ordering since the Python test server packs
@@ -152,13 +155,13 @@ class TestServerThread(threading.Thread):
(data_length,) = struct.unpack('=L', data_length)
assert data_length
if not data_length:
- logging.error('Failed to get length of server data.')
+ _logger.error('Failed to get length of server data.')
return False
server_data_json = os.read(self.pipe_in, data_length)
if not server_data_json:
- logging.error('Failed to get server data.')
+ _logger.error('Failed to get server data.')
return False
- logging.info('Got port json data: %s', server_data_json)
+ _logger.info('Got port json data: %s', server_data_json)
parsed_server_data = None
try:
@@ -167,11 +170,11 @@ class TestServerThread(threading.Thread):
pass
if not isinstance(parsed_server_data, dict):
- logging.error('Failed to parse server_data: %s' % server_data_json)
+ _logger.error('Failed to parse server_data: %s' % server_data_json)
return False
if not isinstance(parsed_server_data.get('port'), int):
- logging.error('Failed to get port information from the server data.')
+ _logger.error('Failed to get port information from the server data.')
return False
self.host_port = parsed_server_data['port']
@@ -224,10 +227,10 @@ class TestServerThread(threading.Thread):
pass
def run(self):
- logging.info('Start running the thread!')
+ _logger.info('Start running the thread!')
self.wait_event.clear()
self._GenerateCommandLineArguments()
- command = DIR_SOURCE_ROOT
+ command = _DIR_SOURCE_ROOT
if self.arguments['server-type'] == 'sync':
command = [os.path.join(command, 'components', 'sync', 'tools',
'testserver',
@@ -235,17 +238,17 @@ class TestServerThread(threading.Thread):
else:
command = [os.path.join(command, 'net', 'tools', 'testserver',
'testserver.py')] + self.command_line
- logging.info('Running: %s', command)
+ _logger.info('Running: %s', command)
# Disable PYTHONUNBUFFERED because it has a bad interaction with the
# testserver. Remove once this interaction is fixed.
unbuf = os.environ.pop('PYTHONUNBUFFERED', None)
- # Pass DIR_SOURCE_ROOT as the child's working directory so that relative
+ # Pass _DIR_SOURCE_ROOT as the child's working directory so that relative
# paths in the arguments are resolved correctly.
self.process = subprocess.Popen(
command, preexec_fn=self._CloseUnnecessaryFDsForTestServerProcess,
- cwd=DIR_SOURCE_ROOT)
+ cwd=_DIR_SOURCE_ROOT)
if unbuf:
os.environ['PYTHONUNBUFFERED'] = unbuf
if self.process:
@@ -257,7 +260,7 @@ class TestServerThread(threading.Thread):
if self.is_ready:
port_map = [(0, self.host_port)]
if self.host_ocsp_port:
- port_map.append([(0, self.host_ocsp_port)])
+ port_map.extend([(0, self.host_ocsp_port)])
self.port_forwarder.Map(port_map)
self.forwarder_device_port = \
@@ -284,7 +287,7 @@ class TestServerThread(threading.Thread):
os.close(self.pipe_out)
self.pipe_in = None
self.pipe_out = None
- logging.info('Test-server has died.')
+ _logger.info('Test-server has died.')
self.wait_event.set()
def Stop(self):
@@ -325,7 +328,7 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def _StartTestServer(self):
"""Starts the test server thread."""
- logging.info('Handling request to spawn a test server.')
+ _logger.info('Handling request to spawn a test server.')
content_type = self.headers.getheader('content-type')
if content_type != 'application/json':
raise Exception('Bad content-type for start request.')
@@ -336,9 +339,9 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
content_length = int(content_length)
except:
raise Exception('Bad content-length for start request.')
- logging.info(content_length)
+ _logger.info(content_length)
test_server_argument_json = self.rfile.read(content_length)
- logging.info(test_server_argument_json)
+ _logger.info(test_server_argument_json)
if len(self.server.test_servers) >= self.server.max_instances:
self._SendResponse(400, 'Invalid request', {},
@@ -358,7 +361,7 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
if new_server.forwarder_ocsp_device_port:
response['ocsp_port'] = new_server.forwarder_ocsp_device_port
self._SendResponse(200, 'OK', {}, json.dumps(response))
- logging.info('Test server is running on port %d forwarded to %d.' %
+ _logger.info('Test server is running on port %d forwarded to %d.' %
(new_server.forwarder_device_port, new_server.host_port))
port = new_server.forwarder_device_port
assert not self.server.test_servers.has_key(port)
@@ -366,7 +369,7 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
else:
new_server.Stop()
self._SendResponse(500, 'Test Server Error.', {}, '')
- logging.info('Encounter problem during starting a test server.')
+ _logger.info('Encounter problem during starting a test server.')
def _KillTestServer(self, params):
"""Stops the test server instance."""
@@ -385,34 +388,40 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
server = self.server.test_servers.pop(port)
- logging.info('Handling request to kill a test server on port: %d.', port)
+ _logger.info('Handling request to kill a test server on port: %d.', port)
server.Stop()
# Make sure the status of test server is correct before sending response.
if self.server.port_forwarder.WaitHostPortAvailable(port):
self._SendResponse(200, 'OK', {}, 'killed')
- logging.info('Test server on port %d is killed', port)
+ _logger.info('Test server on port %d is killed', port)
else:
self._SendResponse(500, 'Test Server Error.', {}, '')
- logging.info('Encounter problem during killing a test server.')
+ _logger.info('Encounter problem during killing a test server.')
+
+ def log_message(self, format, *args):
+ # Suppress the default HTTP logging behavior if the logging level is higher
+ # than INFO.
+ if _logger.getEffectiveLevel() <= logging.INFO:
+ pass
def do_POST(self):
parsed_path = urlparse.urlparse(self.path)
action = parsed_path.path
- logging.info('Action for POST method is: %s.', action)
+ _logger.info('Action for POST method is: %s.', action)
if action == '/start':
self._StartTestServer()
else:
self._SendResponse(400, 'Unknown request.', {}, '')
- logging.info('Encounter unknown request: %s.', action)
+ _logger.info('Encounter unknown request: %s.', action)
def do_GET(self):
parsed_path = urlparse.urlparse(self.path)
action = parsed_path.path
params = urlparse.parse_qs(parsed_path.query, keep_blank_values=1)
- logging.info('Action for GET method is: %s.', action)
+ _logger.info('Action for GET method is: %s.', action)
for param in params:
- logging.info('%s=%s', param, params[param][0])
+ _logger.info('%s=%s', param, params[param][0])
if action == '/kill':
self._KillTestServer(params)
elif action == '/ping':
@@ -420,10 +429,10 @@ class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# to serve the requests. We don't need to test the status of the test
# server when handling ping request.
self._SendResponse(200, 'OK', {}, 'ready')
- logging.info('Handled ping request and sent response.')
+ _logger.info('Handled ping request and sent response.')
else:
self._SendResponse(400, 'Unknown request', {}, '')
- logging.info('Encounter unknown request: %s.', action)
+ _logger.info('Encounter unknown request: %s.', action)
class SpawningServer(object):
@@ -433,14 +442,14 @@ class SpawningServer(object):
self.server = BaseHTTPServer.HTTPServer(('', test_server_spawner_port),
SpawningServerRequestHandler)
self.server_port = self.server.server_port
- logging.info('Started test server spawner on port: %d.', self.server_port)
+ _logger.info('Started test server spawner on port: %d.', self.server_port)
self.server.port_forwarder = port_forwarder
self.server.test_servers = {}
self.server.max_instances = max_instances
def _Listen(self):
- logging.info('Starting test server spawner.')
+ _logger.info('Starting test server spawner.')
self.server.serve_forever()
def Start(self):
@@ -464,8 +473,8 @@ class SpawningServer(object):
to avoid sharing the test server instance.
"""
if self.server.test_servers:
- logging.warning('Not all test servers were stopped.')
+ _logger.warning('Not all test servers were stopped.')
for port in self.server.test_servers:
- logging.warning('Stopping test server on port %d' % port)
+ _logger.warning('Stopping test server on port %d' % port)
self.server.test_servers[port].Stop()
self.server.test_servers = {}
diff --git a/chromium/build/vs_toolchain.py b/chromium/build/vs_toolchain.py
index 0a54e113f30..5f9541e4556 100755
--- a/chromium/build/vs_toolchain.py
+++ b/chromium/build/vs_toolchain.py
@@ -382,18 +382,14 @@ def Update(force=False):
# exist, set up a ciopfs fuse mount to put the SDK in a case-insensitive
# part of the file system.
toolchain_dir = os.path.join(depot_tools_path, 'win_toolchain', 'vs_files')
+ # For testing this block, unmount existing mounts with
+ # fusermount -u third_party/depot_tools/win_toolchain/vs_files
if sys.platform.startswith('linux') and not os.path.ismount(toolchain_dir):
import distutils.spawn
ciopfs = distutils.spawn.find_executable('ciopfs')
if not ciopfs:
- # TODO(thakis): Offer to auto-install this? Or have a
- # build/install-build-deps-win.sh script and point to that? (Or run
- # that?)
- print >>sys.stderr, \
- "\n\tCouldn't set up case-insensitive mount for Windows SDK."
- print >>sys.stderr, \
- "\tPlease run `sudo apt-get install ciopfs` and try again.\n"
- return 1
+ # ciopfs not found in PATH; try the one downloaded from the DEPS hook.
+ ciopfs = os.path.join(script_dir, 'ciopfs')
if not os.path.isdir(toolchain_dir):
os.mkdir(toolchain_dir)
if not os.path.isdir(toolchain_dir + '.ciopfs'):
diff --git a/chromium/build/win/BUILD.gn b/chromium/build/win/BUILD.gn
index 81e0e643c87..20a555d75c8 100644
--- a/chromium/build/win/BUILD.gn
+++ b/chromium/build/win/BUILD.gn
@@ -69,6 +69,7 @@ if (is_win) {
"$root_out_dir/cdb/api-ms-win-crt-string-l1-1-0.dll",
"$root_out_dir/cdb/api-ms-win-crt-time-l1-1-0.dll",
"$root_out_dir/cdb/api-ms-win-crt-utility-l1-1-0.dll",
+ "$root_out_dir/cdb/api-ms-win-eventing-provider-l1-1-0.dll",
"$root_out_dir/cdb/ucrtbase.dll",
]
args = [
diff --git a/chromium/build/win/copy_cdb_to_output.py b/chromium/build/win/copy_cdb_to_output.py
index 1744f77ffec..eac634b71f0 100755
--- a/chromium/build/win/copy_cdb_to_output.py
+++ b/chromium/build/win/copy_cdb_to_output.py
@@ -91,6 +91,7 @@ def _CopyCDBToOutput(output_dir, target_arch):
_CopyImpl('uext.dll', dst_winext_dir, src_winext_dir)
_CopyImpl('exts.dll', dst_winxp_dir, src_winxp_dir)
_CopyImpl('ntsdexts.dll', dst_winxp_dir, src_winxp_dir)
+ _CopyImpl('api-ms-win-eventing-provider-l1-1-0.dll', output_dir, src_dir)
for dll_path in glob.glob(os.path.join(src_crt_dir, 'api-ms-win-*.dll')):
_CopyImpl(os.path.split(dll_path)[1], output_dir, src_crt_dir)
_CopyImpl('ucrtbase.dll', output_dir, src_crt_dir)