[build] Update Linux sysroots from jessie to bullseye.
Change-Id: I90022916b13e61717b7e38c6ccab914ae1a5c18e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/254080
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
diff --git a/DEPS b/DEPS
index 6d97613..5b3f14b 100644
--- a/DEPS
+++ b/DEPS
@@ -669,32 +669,32 @@
'action': ['python3', 'sdk/tools/generate_sdk_version_file.py'],
},
{
- # Pull Debian sysroot for i386 Linux
- 'name': 'sysroot_i386',
+ 'name': 'sysroot_arm',
'pattern': '.',
+ 'condition': 'checkout_linux',
'action': ['python3', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
- '--arch', 'i386'],
+ '--arch=arm'],
},
{
- # Pull Debian sysroot for amd64 Linux
- 'name': 'sysroot_amd64',
+ 'name': 'sysroot_arm64',
'pattern': '.',
+ 'condition': 'checkout_linux',
'action': ['python3', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
- '--arch', 'amd64'],
+ '--arch=arm64'],
},
{
- # Pull Debian sysroot for arm Linux
- 'name': 'sysroot_amd64',
+ 'name': 'sysroot_x86',
'pattern': '.',
+ 'condition': 'checkout_linux',
'action': ['python3', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
- '--arch', 'arm'],
+ '--arch=x86'],
},
{
- # Pull Debian jessie sysroot for arm64 Linux
- 'name': 'sysroot_amd64',
+ 'name': 'sysroot_x64',
'pattern': '.',
+ 'condition': 'checkout_linux',
'action': ['python3', 'sdk/build/linux/sysroot_scripts/install-sysroot.py',
- '--arch', 'arm64'],
+ '--arch=x64'],
},
{
'name': 'buildtools',
diff --git a/build/.gitignore b/build/.gitignore
index f7bbb04..73494be 100644
--- a/build/.gitignore
+++ b/build/.gitignore
@@ -1,8 +1,8 @@
# Generated file containing information about the VS toolchain on Windows
win_toolchain.json
-# Pulled Debian jessie sysroots
-linux/debian_jessie_arm-sysroot
-linux/debian_jessie_arm64-sysroot
-linux/debian_jessie_amd64-sysroot
-linux/debian_jessie_i386-sysroot
+# Pulled Debian bullseye sysroots
+linux/debian_bullseye_arm-sysroot
+linux/debian_bullseye_arm64-sysroot
+linux/debian_bullseye_amd64-sysroot
+linux/debian_bullseye_i386-sysroot
diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni
index c4ee9ad..7fb6890 100644
--- a/build/config/sysroot.gni
+++ b/build/config/sysroot.gni
@@ -17,16 +17,16 @@
if (is_linux && dart_use_debian_sysroot) {
if (current_cpu == "x86") {
target_sysroot =
- rebase_path("//build/linux/debian_jessie_i386-sysroot", root_build_dir)
+ rebase_path("//build/linux/debian_bullseye_i386-sysroot", root_build_dir)
} else if (current_cpu == "x64") {
target_sysroot =
- rebase_path("//build/linux/debian_jessie_amd64-sysroot", root_build_dir)
+ rebase_path("//build/linux/debian_bullseye_amd64-sysroot", root_build_dir)
} else if (current_cpu == "arm") {
target_sysroot =
- rebase_path("//build/linux/debian_jessie_arm-sysroot", root_build_dir)
+ rebase_path("//build/linux/debian_bullseye_arm-sysroot", root_build_dir)
} else if (current_cpu == "arm64") {
target_sysroot =
- rebase_path("//build/linux/debian_jessie_arm64-sysroot", root_build_dir)
+ rebase_path("//build/linux/debian_bullseye_arm64-sysroot", root_build_dir)
} else {
print("There is no Debian sysroot present for $current_cpu")
assert(false)
diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py
index 5e2fffe..eaa1c2e 100755
--- a/build/linux/sysroot_scripts/install-sysroot.py
+++ b/build/linux/sysroot_scripts/install-sysroot.py
@@ -2,169 +2,169 @@
# Copyright (c) 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.
+
"""Install Debian sysroots for building chromium.
"""
-# The sysroot is needed to ensure that binaries will run on Debian Jessie,
-# the oldest supported linux distribution. This script can be run manually
-# but is more often run as part of gclient hooks. When run from hooks this
-# script is a no-op on non-linux platforms.
+# The sysroot is needed to ensure that binaries that get built will run on
+# the oldest stable version of Debian that we currently support.
+# This script can be run manually but is more often run as part of gclient
+# hooks. When run from hooks this script is a no-op on non-linux platforms.
-# The sysroot image could be constructed from scratch based on the current
-# state or Debian Jessie but for consistency we currently use a pre-built root
-# image. The image will normally need to be rebuilt every time chrome's build
-# dependencies are changed.
+# The sysroot image could be constructed from scratch based on the current state
+# of the Debian archive but for consistency we use a pre-built root image (we
+# don't want upstream changes to Debian to effect the chromium build until we
+# choose to pull them in). The images will normally need to be rebuilt every
+# time chrome's build dependencies are changed but should also be updated
+# periodically to include upstream security fixes from Debian.
+
+# This script looks at sysroots.json next to it to find the name of a .tar.xz
+# to download and the location to extract it to. The extracted sysroot could for
+# example be in build/linux/debian_bullseye_amd64-sysroot/.
+
+from __future__ import print_function
import hashlib
import json
+import platform
import optparse
import os
+import re
import shutil
import subprocess
import sys
-from urllib.request import urlopen
+try:
+ # For Python 3.0 and later
+ from urllib.request import urlopen
+except ImportError:
+ # Fall back to Python 2's urllib2
+ from urllib2 import urlopen
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.append(os.path.dirname(os.path.dirname(SCRIPT_DIR)))
-import detect_host_arch
URL_PREFIX = 'https://commondatastorage.googleapis.com'
URL_PATH = 'chrome-linux-sysroot/toolchain'
-VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips')
+VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips', 'mips64el')
+
+ARCH_TRANSLATIONS = {
+ 'x64': 'amd64',
+ 'x86': 'i386',
+ 'mipsel': 'mips',
+ 'mips64': 'mips64el',
+}
+
+DEFAULT_TARGET_PLATFORM = 'bullseye'
class Error(Exception):
- pass
+ pass
def GetSha1(filename):
- sha1 = hashlib.sha1()
- with open(filename, 'rb') as f:
- while True:
- # Read in 1mb chunks, so it doesn't all have to be loaded into memory.
- chunk = f.read(1024 * 1024)
- if not chunk:
- break
- sha1.update(chunk)
- 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'
- elif detected_host_arch == 'ia32':
- return 'i386'
- elif detected_host_arch == 'arm':
- return 'arm'
- elif detected_host_arch == 'arm64':
- return 'arm64'
- elif detected_host_arch == 'mips':
- return 'mips'
- elif detected_host_arch == 'ppc':
- return 'ppc'
- elif detected_host_arch == 's390':
- return 's390'
-
- raise Error('Unrecognized host arch: %s' % detected_host_arch)
+ sha1 = hashlib.sha1()
+ with open(filename, 'rb') as f:
+ while True:
+ # Read in 1mb chunks, so it doesn't all have to be loaded into memory.
+ chunk = f.read(1024*1024)
+ if not chunk:
+ break
+ sha1.update(chunk)
+ return sha1.hexdigest()
def main(args):
- parser = optparse.OptionParser(
- 'usage: %prog [OPTIONS]', description=__doc__)
- parser.add_option(
- '--arch',
- type='choice',
- choices=VALID_ARCHS,
- help='Sysroot architecture: %s' % ', '.join(VALID_ARCHS))
- options, _ = parser.parse_args(args)
- if not sys.platform.startswith('linux'):
- return 0
+ parser = optparse.OptionParser('usage: %prog [OPTIONS]', description=__doc__)
+ 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)')
+ parser.add_option('--print-hash',
+ help='Print the hash of the sysroot for the given arch.')
+ options, _ = parser.parse_args(args)
- if not options.arch:
- print('You much specify either --arch or --running-as-hook')
- return 1
- InstallDefaultSysrootForArch(options.arch)
-
+ if options.print_hash:
+ arch = options.print_hash
+ print(GetSysrootDict(DEFAULT_TARGET_PLATFORM,
+ ARCH_TRANSLATIONS.get(arch, arch))['Sha1Sum'])
return 0
+ if options.arch:
+ InstallSysroot(DEFAULT_TARGET_PLATFORM,
+ ARCH_TRANSLATIONS.get(options.arch, options.arch))
+ elif options.all:
+ for arch in VALID_ARCHS:
+ InstallSysroot(DEFAULT_TARGET_PLATFORM, arch)
+ else:
+ print('You much specify one of the options.')
+ return 1
+
+ return 0
-def InstallDefaultSysrootForArch(target_arch):
- if target_arch == 'amd64':
- InstallSysroot('Jessie', 'amd64')
- elif target_arch == 'arm':
- InstallSysroot('Jessie', 'arm')
- elif target_arch == 'arm64':
- InstallSysroot('Jessie', 'arm64')
- elif target_arch == 'i386':
- InstallSysroot('Jessie', 'i386')
- elif target_arch == 'mips':
- InstallSysroot('Jessie', 'mips')
- else:
- raise Error('Unknown architecture: %s' % target_arch)
+def GetSysrootDict(target_platform, target_arch):
+ if target_arch not in VALID_ARCHS:
+ raise Error('Unknown architecture: %s' % target_arch)
+
+ sysroots_file = os.path.join(SCRIPT_DIR, 'sysroots.json')
+ sysroots = json.load(open(sysroots_file))
+ sysroot_key = '%s_%s' % (target_platform, target_arch)
+ if sysroot_key not in sysroots:
+ raise Error('No sysroot for: %s %s' % (target_platform, target_arch))
+ return sysroots[sysroot_key]
def InstallSysroot(target_platform, target_arch):
- # The sysroot directory should match the one specified in build/common.gypi.
- # TODO(thestig) Consider putting this elsewhere to avoid having to recreate
- # it on every build.
- linux_dir = os.path.dirname(SCRIPT_DIR)
+ sysroot_dict = GetSysrootDict(target_platform, target_arch)
+ tarball_filename = sysroot_dict['Tarball']
+ tarball_sha1sum = sysroot_dict['Sha1Sum']
+ # TODO(thestig) Consider putting this elsewhere to avoid having to recreate
+ # it on every build.
+ linux_dir = os.path.dirname(SCRIPT_DIR)
+ sysroot = os.path.join(linux_dir, sysroot_dict['SysrootDir'])
- sysroots_file = os.path.join(SCRIPT_DIR, 'sysroots.json')
- sysroots = json.load(open(sysroots_file))
- sysroot_key = '%s_%s' % (target_platform.lower(), target_arch)
- if sysroot_key not in sysroots:
- raise Error('No sysroot for: %s %s' % (target_platform, target_arch))
- sysroot_dict = sysroots[sysroot_key]
- revision = sysroot_dict['Revision']
- tarball_filename = sysroot_dict['Tarball']
- tarball_sha1sum = sysroot_dict['Sha1Sum']
- sysroot = os.path.join(linux_dir, sysroot_dict['SysrootDir'])
+ url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, tarball_sha1sum,
+ tarball_filename)
- url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, revision, tarball_filename)
+ stamp = os.path.join(sysroot, '.stamp')
+ if os.path.exists(stamp):
+ with open(stamp) as s:
+ if s.read() == url:
+ return
- stamp = os.path.join(sysroot, '.stamp')
- if os.path.exists(stamp):
- with open(stamp) as s:
- if s.read() == url:
- return
+ print('Installing Debian %s %s root image: %s' % \
+ (target_platform, target_arch, sysroot))
+ if os.path.isdir(sysroot):
+ shutil.rmtree(sysroot)
+ os.mkdir(sysroot)
+ tarball = os.path.join(sysroot, tarball_filename)
+ print('Downloading %s' % url)
+ sys.stdout.flush()
+ sys.stderr.flush()
+ for _ in range(3):
+ try:
+ response = urlopen(url)
+ with open(tarball, "wb") as f:
+ f.write(response.read())
+ break
+ except Exception: # Ignore exceptions.
+ pass
+ else:
+ raise Error('Failed to download %s' % url)
+ sha1sum = GetSha1(tarball)
+ if sha1sum != tarball_sha1sum:
+ raise Error('Tarball sha1sum is wrong.'
+ 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum))
+ subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot])
+ os.remove(tarball)
- print('Installing Debian %s %s root image: %s' % \
- (target_platform, target_arch, sysroot))
- if os.path.isdir(sysroot):
- shutil.rmtree(sysroot)
- os.mkdir(sysroot)
- tarball = os.path.join(sysroot, tarball_filename)
- print('Downloading %s' % url)
- sys.stdout.flush()
- sys.stderr.flush()
- for _ in range(3):
- try:
- response = urlopen(url)
- with open(tarball, "wb") as f:
- f.write(response.read())
- break
- except:
- pass
- else:
- raise Error('Failed to download %s' % url)
- sha1sum = GetSha1(tarball)
- if sha1sum != tarball_sha1sum:
- raise Error('Tarball sha1sum is wrong.'
- 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum))
- subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot])
- os.remove(tarball)
-
- with open(stamp, 'w') as s:
- s.write(url)
+ with open(stamp, 'w') as s:
+ s.write(url)
if __name__ == '__main__':
- try:
- sys.exit(main(sys.argv[1:]))
- except Error as e:
- sys.stderr.write(str(e) + '\n')
- sys.exit(1)
+ try:
+ sys.exit(main(sys.argv[1:]))
+ except Error as e:
+ sys.stderr.write(str(e) + '\n')
+ sys.exit(1)
diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json
index 5688cd0..e851f42 100644
--- a/build/linux/sysroot_scripts/sysroots.json
+++ b/build/linux/sysroot_scripts/sysroots.json
@@ -1,44 +1,37 @@
{
- "jessie_amd64": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "046a82b027f069bdde98424850490c315e2f31f9",
- "SysrootDir": "debian_jessie_amd64-sysroot",
- "Tarball": "debian_jessie_amd64_sysroot.tgz"
+ "bullseye_amd64": {
+ "Sha1Sum": "cb4fa34f1faddafb72cace35faf62a611f2ca7c9",
+ "SysrootDir": "debian_bullseye_amd64-sysroot",
+ "Tarball": "debian_bullseye_amd64_sysroot.tar.xz"
},
- "jessie_arm": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "7addeb28195f7f367cbaba46cdba99925a0646b2",
- "SysrootDir": "debian_jessie_arm-sysroot",
- "Tarball": "debian_jessie_arm_sysroot.tgz"
+ "bullseye_arm": {
+ "Sha1Sum": "a1084eba943f797a1c9aee8d5f8213ed680315a8",
+ "SysrootDir": "debian_bullseye_arm-sysroot",
+ "Tarball": "debian_bullseye_arm_sysroot.tar.xz"
},
- "jessie_arm64": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "1b853d8082321256fe646589558da3980875d767",
- "SysrootDir": "debian_jessie_arm64-sysroot",
- "Tarball": "debian_jessie_arm64_sysroot.tgz"
+ "bullseye_arm64": {
+ "Sha1Sum": "f00ece500aef0ff2a431a07de48bd3e1aa6d1caf",
+ "SysrootDir": "debian_bullseye_arm64-sysroot",
+ "Tarball": "debian_bullseye_arm64_sysroot.tar.xz"
},
- "jessie_i386": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "7edfe877ea71473def2d9e6958474d76c9ff98b6",
- "SysrootDir": "debian_jessie_i386-sysroot",
- "Tarball": "debian_jessie_i386_sysroot.tgz"
+ "bullseye_armel": {
+ "Sha1Sum": "54ccf4898fe923b22141c9e21e80b455dec47ecf",
+ "SysrootDir": "debian_bullseye_armel-sysroot",
+ "Tarball": "debian_bullseye_armel_sysroot.tar.xz"
},
- "jessie_mips": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "3d0c5640a39e264d7180df2bac1192308f8a256e",
- "SysrootDir": "debian_jessie_mips-sysroot",
- "Tarball": "debian_jessie_mips_sysroot.tgz"
+ "bullseye_i386": {
+ "Sha1Sum": "07bb72368889fea19a1f123aa11528f0d792121b",
+ "SysrootDir": "debian_bullseye_i386-sysroot",
+ "Tarball": "debian_bullseye_i386_sysroot.tar.xz"
},
- "precise_amd64": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "69e1d3c9efda92ba265ce7bb653be546e8dde7e4",
- "SysrootDir": "ubuntu_precise_amd64-sysroot",
- "Tarball": "ubuntu_precise_amd64_sysroot.tgz"
+ "bullseye_mips": {
+ "Sha1Sum": "f19f07f7e62edbf837d6e7f173aea3f47110c2ba",
+ "SysrootDir": "debian_bullseye_mips-sysroot",
+ "Tarball": "debian_bullseye_mips_sysroot.tar.xz"
},
- "trusty_arm": {
- "Revision": "7031a828c5dcedc937bbf375c42daab08ca6162f",
- "Sha1Sum": "d1591e8fc6a273af1fbf3d1a864f098081d06dd1",
- "SysrootDir": "ubuntu_trusty_arm-sysroot",
- "Tarball": "ubuntu_trusty_arm_sysroot.tgz"
+ "bullseye_mips64el": {
+ "Sha1Sum": "3cfc9e7fe2d0cad3873bbce8fc3ffde510ed5638",
+ "SysrootDir": "debian_bullseye_mips64el-sysroot",
+ "Tarball": "debian_bullseye_mips64el_sysroot.tar.xz"
}
}