From 8e80a575d15f8ae333c5014d68d4a7e56b5723b5 Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Fri, 23 Feb 2018 20:27:50 -0800 Subject: [PATCH] Linux: Pull a sysroot if pulling a local clang Didn't actually end up being too bad. Also requires setting GN arg of target_sysroot = "//third_party/linux/sysroot" when building. Bug: crashpad:220 Change-Id: I4d4b282f165d454b5d32fc8cc11287ff665b943d Reviewed-on: https://chromium-review.googlesource.com/935981 Commit-Queue: Scott Graham Reviewed-by: Joshua Peraza --- .gitignore | 1 + DEPS | 10 +++++ build/install_linux_sysroot.py | 74 ++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100755 build/install_linux_sysroot.py diff --git a/.gitignore b/.gitignore index f673ecd4..d225542e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ /third_party/gtest/gtest /third_party/linux/.cipd /third_party/linux/clang +/third_party/linux/sysroot /third_party/gyp/gyp /third_party/mini_chromium/mini_chromium /third_party/zlib/zlib diff --git a/DEPS b/DEPS index e426728f..bae97c3a 100644 --- a/DEPS +++ b/DEPS @@ -134,6 +134,16 @@ hooks = [ '-log-level', 'info', ], }, + { + # If using a local clang ("pull_linux_clang" above), also pull down a + # sysroot. + 'name': 'clang_linux', + 'pattern': '.', + 'condition': 'checkout_linux and pull_linux_clang', + 'action': [ + 'crashpad/build/install_linux_sysroot.py', + ], + }, { # Same rationale for using "install" rather than "ensure" as for first clang # package. https://crbug.com/789364. diff --git a/build/install_linux_sysroot.py b/build/install_linux_sysroot.py new file mode 100755 index 00000000..afa88157 --- /dev/null +++ b/build/install_linux_sysroot.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +# Copyright 2018 The Crashpad Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Various code adapted from: +# https://cs.chromium.org/chromium/src/build/linux/sysroot_scripts/install-sysroot.py + +import os +import shutil +import subprocess +import sys +import urllib2 + + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) + +# Sysroot revision from: +# https://cs.chromium.org/chromium/src/build/linux/sysroot_scripts/sysroots.json +SERVER = 'https://commondatastorage.googleapis.com' +PATH = 'chrome-linux-sysroot/toolchain' +REVISION = '3c248ba4290a5ad07085b7af07e6785bf1ae5b66' +FILENAME = 'debian_stretch_amd64_sysroot.tar.xz' + +def main(): + url = '%s/%s/%s/%s' % (SERVER, PATH, REVISION, FILENAME) + + sysroot = os.path.join(SCRIPT_DIR, os.pardir, + 'third_party', 'linux', 'sysroot') + + stamp = os.path.join(sysroot, '.stamp') + if os.path.exists(stamp): + with open(stamp) as s: + if s.read() == url: + return + + print 'Installing Debian root image from %s' % url + + if os.path.isdir(sysroot): + shutil.rmtree(sysroot) + os.mkdir(sysroot) + tarball = os.path.join(sysroot, FILENAME) + print 'Downloading %s' % url + + for _ in range(3): + response = urllib2.urlopen(url) + with open(tarball, 'wb') as f: + f.write(response.read()) + break + else: + raise Exception('Failed to download %s' % url) + + subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot]) + + os.remove(tarball) + + with open(stamp, 'w') as s: + s.write(url) + + +if __name__ == '__main__': + main() + sys.exit(0)