1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 3*6dbdd20aSAndroid Build Coastguard Worker# 4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*6dbdd20aSAndroid Build Coastguard Worker# 8*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*6dbdd20aSAndroid Build Coastguard Worker# 10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 15*6dbdd20aSAndroid Build Coastguard Worker 16*6dbdd20aSAndroid Build Coastguard Workerimport argparse 17*6dbdd20aSAndroid Build Coastguard Workerimport dataclasses as dc 18*6dbdd20aSAndroid Build Coastguard Workerimport hashlib 19*6dbdd20aSAndroid Build Coastguard Workerimport logging 20*6dbdd20aSAndroid Build Coastguard Workerimport os 21*6dbdd20aSAndroid Build Coastguard Workerimport shutil 22*6dbdd20aSAndroid Build Coastguard Workerimport subprocess 23*6dbdd20aSAndroid Build Coastguard Workerimport stat 24*6dbdd20aSAndroid Build Coastguard Workerimport sys 25*6dbdd20aSAndroid Build Coastguard Workerimport tempfile 26*6dbdd20aSAndroid Build Coastguard Workerimport time 27*6dbdd20aSAndroid Build Coastguard Workerimport zipfile 28*6dbdd20aSAndroid Build Coastguard Workerimport bz2 29*6dbdd20aSAndroid Build Coastguard Worker 30*6dbdd20aSAndroid Build Coastguard Workerfrom collections import namedtuple 31*6dbdd20aSAndroid Build Coastguard Workerfrom platform import system, machine 32*6dbdd20aSAndroid Build Coastguard Worker 33*6dbdd20aSAndroid Build Coastguard Worker 34*6dbdd20aSAndroid Build Coastguard Worker# The format for the deps below is the following: 35*6dbdd20aSAndroid Build Coastguard Worker# (target_folder, source_url, sha1, target_os, target_arch) 36*6dbdd20aSAndroid Build Coastguard Worker# |source_url| can be either a git repo or a http url. 37*6dbdd20aSAndroid Build Coastguard Worker# If a git repo, |checksum| is the SHA1 committish that will be checked out. 38*6dbdd20aSAndroid Build Coastguard Worker# If a http url, |checksum| is the SHA256 of the downloaded file. 39*6dbdd20aSAndroid Build Coastguard Worker# If the url is a .zip, .tgz, or .tbz2 file it will be automatically deflated under 40*6dbdd20aSAndroid Build Coastguard Worker# |target_folder|, taking care of stripping the root folder if it's a single 41*6dbdd20aSAndroid Build Coastguard Worker# root (to avoid ending up with buildtools/protobuf/protobuf-1.2.3/... and have 42*6dbdd20aSAndroid Build Coastguard Worker# instead just buildtools/protobuf). 43*6dbdd20aSAndroid Build Coastguard Worker# |target_os| is either 'darwin', 'linux', 'windows' or 'all' 44*6dbdd20aSAndroid Build Coastguard Worker# |target_arch| is either 'x64', 'arm64' or 'all' 45*6dbdd20aSAndroid Build Coastguard Worker# in both cases the dep only applies on matching platforms 46*6dbdd20aSAndroid Build Coastguard Worker# |target_arch| can be 'all' when 'target_os' is not 'all' for example in the 47*6dbdd20aSAndroid Build Coastguard Worker# case of MacOS universal binaries. 48*6dbdd20aSAndroid Build Coastguard Worker@dc.dataclass 49*6dbdd20aSAndroid Build Coastguard Workerclass Dependency: 50*6dbdd20aSAndroid Build Coastguard Worker target_folder: str 51*6dbdd20aSAndroid Build Coastguard Worker source_url: str 52*6dbdd20aSAndroid Build Coastguard Worker checksum: str 53*6dbdd20aSAndroid Build Coastguard Worker target_os: str 54*6dbdd20aSAndroid Build Coastguard Worker target_arch: str 55*6dbdd20aSAndroid Build Coastguard Worker submodules: bool = False 56*6dbdd20aSAndroid Build Coastguard Worker 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard Worker# This is to remove old directories when build tools get {re,}moved. This is to 59*6dbdd20aSAndroid Build Coastguard Worker# avoid accidentally referring to stale dir in custom user scripts. 60*6dbdd20aSAndroid Build Coastguard WorkerCLEANUP_OLD_DIRS = [ 61*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/nodejs', # Moved to buildtools/{mac,linux64}/nodejs 62*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/emsdk', # Moved to buildtools/{mac,linux64}/emsdk 63*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/test_data', # Moved to test/data by r.android.com/1539381 . 64*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/d8', # Removed by r.android.com/1424334 . 65*6dbdd20aSAndroid Build Coastguard Worker 66*6dbdd20aSAndroid Build Coastguard Worker # Build tools moved to third_party/ by r.android.com/2327602 . 67*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/clang-format', 68*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/gn', 69*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/ninja', 70*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/clang-format', 71*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/gn', 72*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/ninja', 73*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/win/clang-format.exe', 74*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/win/gn.exe', 75*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/win/ninja.exe', 76*6dbdd20aSAndroid Build Coastguard Worker] 77*6dbdd20aSAndroid Build Coastguard Worker 78*6dbdd20aSAndroid Build Coastguard Worker# Dependencies required to build code on the host or when targeting desktop OS. 79*6dbdd20aSAndroid Build Coastguard WorkerBUILD_DEPS_TOOLCHAIN_HOST = [ 80*6dbdd20aSAndroid Build Coastguard Worker # GN. From https://chrome-infra-packages.appspot.com/dl/gn/gn/. 81*6dbdd20aSAndroid Build Coastguard Worker # git_revision:0725d7827575b239594fbc8fd5192873a1d62f44 . 82*6dbdd20aSAndroid Build Coastguard Worker Dependency( 83*6dbdd20aSAndroid Build Coastguard Worker 'third_party/gn/gn', 84*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/gn-mac-1968-0725d782', 85*6dbdd20aSAndroid Build Coastguard Worker '9ced623a664560bba38bbadb9b91158ca4186358c847e17ab7d982b351373c2e', 86*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'x64'), 87*6dbdd20aSAndroid Build Coastguard Worker Dependency( 88*6dbdd20aSAndroid Build Coastguard Worker 'third_party/gn/gn', 89*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/gn-mac-arm64-1968-0725d782', 90*6dbdd20aSAndroid Build Coastguard Worker 'd22336b5210b4dad5e36e8c28ce81187f491822cf4d8fd0a257b30d6bee3fd3f', 91*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'arm64'), 92*6dbdd20aSAndroid Build Coastguard Worker Dependency( 93*6dbdd20aSAndroid Build Coastguard Worker 'third_party/gn/gn', 94*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/gn-linux64-1968-0725d782', 95*6dbdd20aSAndroid Build Coastguard Worker 'f706aaa0676e3e22f5fc9ca482295d7caee8535d1869f99efa2358177b64f5cd', 96*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 97*6dbdd20aSAndroid Build Coastguard Worker Dependency( 98*6dbdd20aSAndroid Build Coastguard Worker 'third_party/gn/gn', 99*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/gn-linux-arm64-1968-0725d782', 100*6dbdd20aSAndroid Build Coastguard Worker 'c2a372cd4f911028d8bc351fbf24835c9b1194fcc92beadf6c5a2b3addae973c', 101*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'arm64'), 102*6dbdd20aSAndroid Build Coastguard Worker Dependency( 103*6dbdd20aSAndroid Build Coastguard Worker 'third_party/gn/gn.exe', 104*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/gn-win-1968-0725d782', 105*6dbdd20aSAndroid Build Coastguard Worker '001f777f023c7a6959c778fb3a6b6cfc63f6baef953410ecdeaec350fb12285b', 106*6dbdd20aSAndroid Build Coastguard Worker 'windows', 'x64'), 107*6dbdd20aSAndroid Build Coastguard Worker 108*6dbdd20aSAndroid Build Coastguard Worker # clang-format 109*6dbdd20aSAndroid Build Coastguard Worker # From 110*6dbdd20aSAndroid Build Coastguard Worker # https://chromium.googlesource.com/chromium/src/buildtools/+/refs/heads/master/mac/clang-format.arm64.sha1 111*6dbdd20aSAndroid Build Coastguard Worker Dependency( 112*6dbdd20aSAndroid Build Coastguard Worker 'third_party/clang-format/clang-format', 113*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-clang-format/5553d7a3d912b7d49381ad68c9a56740601a57a0', 114*6dbdd20aSAndroid Build Coastguard Worker 'e077990b2ea6807f6abc71b4cf1e487719d7e40574baddd2b51187fdcc8db803', 115*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'arm64'), 116*6dbdd20aSAndroid Build Coastguard Worker # From 117*6dbdd20aSAndroid Build Coastguard Worker # https://chromium.googlesource.com/chromium/src/buildtools/+/refs/heads/master/mac/clang-format.x64.sha1 118*6dbdd20aSAndroid Build Coastguard Worker Dependency( 119*6dbdd20aSAndroid Build Coastguard Worker 'third_party/clang-format/clang-format', 120*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-clang-format/87d69aeff220c916b85b5d6d162fa5668aa9d64f', 121*6dbdd20aSAndroid Build Coastguard Worker '71179a8788a009cfd589636d50f0eb9f95f58b0cfda4351430bed7c0a48c080b', 122*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'x64'), 123*6dbdd20aSAndroid Build Coastguard Worker # From https://chromium.googlesource.com/chromium/src/buildtools/+/refs/heads/master/linux64/clang-format.sha1 124*6dbdd20aSAndroid Build Coastguard Worker Dependency( 125*6dbdd20aSAndroid Build Coastguard Worker 'third_party/clang-format/clang-format', 126*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-clang-format/1facab3101fc6da6b9467543f27f0622b966bc19', 127*6dbdd20aSAndroid Build Coastguard Worker '5e459118d8ac825452e9e1f2717e4de5a36399dc6cc6aec7ec483ad27a0c927e', 128*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 129*6dbdd20aSAndroid Build Coastguard Worker # From https://chromium.googlesource.com/chromium/src/buildtools/+/refs/heads/master/win/clang-format.exe.sha1 130*6dbdd20aSAndroid Build Coastguard Worker Dependency( 131*6dbdd20aSAndroid Build Coastguard Worker 'third_party/clang-format/clang-format.exe', 132*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-clang-format/2e569921b9884daf157021d6ae9e21991cd6cf81', 133*6dbdd20aSAndroid Build Coastguard Worker '2227376ada89ea832995b832222b722a27c4d5d8d59e9c4d7842877f99a1e30d', 134*6dbdd20aSAndroid Build Coastguard Worker 'windows', 'x64'), 135*6dbdd20aSAndroid Build Coastguard Worker 136*6dbdd20aSAndroid Build Coastguard Worker # Keep the SHA1 in sync with |clang_format_rev| in chromium //buildtools/DEPS. 137*6dbdd20aSAndroid Build Coastguard Worker Dependency( 138*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/clang_format/script', 139*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git', 140*6dbdd20aSAndroid Build Coastguard Worker 'f97059df7f8b205064625cdb5f97b56668a125ef', 'all', 'all'), 141*6dbdd20aSAndroid Build Coastguard Worker 142*6dbdd20aSAndroid Build Coastguard Worker # Ninja 143*6dbdd20aSAndroid Build Coastguard Worker Dependency( 144*6dbdd20aSAndroid Build Coastguard Worker 'third_party/ninja/ninja', 145*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/ninja-mac-x64_and_arm64-182', 146*6dbdd20aSAndroid Build Coastguard Worker '36e8b7aaa06911e1334feb664dd731a1cd69a15eb916a231a3d10ff65fca2c73', 147*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'all'), 148*6dbdd20aSAndroid Build Coastguard Worker Dependency( 149*6dbdd20aSAndroid Build Coastguard Worker 'third_party/ninja/ninja', 150*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/ninja-linux64-182', 151*6dbdd20aSAndroid Build Coastguard Worker '54ac6a01362190aaabf4cf276f9c8982cdf11b225438940fdde3339be0f2ecdc', 152*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 153*6dbdd20aSAndroid Build Coastguard Worker Dependency( 154*6dbdd20aSAndroid Build Coastguard Worker 'third_party/ninja/ninja.exe', 155*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/ninja-win-182', 156*6dbdd20aSAndroid Build Coastguard Worker '09ced0fcd1a4dec7d1b798a2cf9ce5d20e5d2fbc2337343827f192ce47d0f491', 157*6dbdd20aSAndroid Build Coastguard Worker 'windows', 'x64'), 158*6dbdd20aSAndroid Build Coastguard Worker Dependency( 159*6dbdd20aSAndroid Build Coastguard Worker 'third_party/ninja/ninja', 160*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/ninja-linux-arm64-1111', 161*6dbdd20aSAndroid Build Coastguard Worker '05031a734ec4310a51b2cfe9f0096b26fce25ab4ff19e5b51abe6371de066cc5', 162*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'arm64'), 163*6dbdd20aSAndroid Build Coastguard Worker 164*6dbdd20aSAndroid Build Coastguard Worker # Keep the revision in sync with Chrome's PACKAGE_VERSION in 165*6dbdd20aSAndroid Build Coastguard Worker # tools/clang/scripts/update.py. 166*6dbdd20aSAndroid Build Coastguard Worker Dependency( 167*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/clang.tgz', 168*6dbdd20aSAndroid Build Coastguard Worker 'https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-llvmorg-19-init-2941-ga0b3dbaf-22.tgz', 169*6dbdd20aSAndroid Build Coastguard Worker '6741cc1083f935795330b6e04617ac891a7b5d2b5647b664c5b0fccc354adb43', 170*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 171*6dbdd20aSAndroid Build Coastguard Worker Dependency( 172*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/win/clang.tgz', 173*6dbdd20aSAndroid Build Coastguard Worker 'https://commondatastorage.googleapis.com/chromium-browser-clang/Win/clang-llvmorg-19-init-2941-ga0b3dbaf-22.tgz', 174*6dbdd20aSAndroid Build Coastguard Worker 'f627080ed53d4c156f089323e04fa3690c8bb459110b62cd1952b0e1f0755987', 175*6dbdd20aSAndroid Build Coastguard Worker 'windows', 'x64'), 176*6dbdd20aSAndroid Build Coastguard Worker] 177*6dbdd20aSAndroid Build Coastguard Worker 178*6dbdd20aSAndroid Build Coastguard WorkerBUILD_DEPS_HOST = [ 179*6dbdd20aSAndroid Build Coastguard Worker # Keep in sync with Android's //external/googletest/METADATA. 180*6dbdd20aSAndroid Build Coastguard Worker Dependency( 181*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/googletest', 182*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/external/googletest.git', 183*6dbdd20aSAndroid Build Coastguard Worker '609281088cfefc76f9d0ce82e1ff6c30cc3591e5', 'all', 'all'), 184*6dbdd20aSAndroid Build Coastguard Worker 185*6dbdd20aSAndroid Build Coastguard Worker # Keep in sync with Chromium's //third_party/protobuf. 186*6dbdd20aSAndroid Build Coastguard Worker Dependency( 187*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/protobuf', 188*6dbdd20aSAndroid Build Coastguard Worker # If you revert the below version back to an earlier version of 189*6dbdd20aSAndroid Build Coastguard Worker # protobuf, make sure to revert the changes to 190*6dbdd20aSAndroid Build Coastguard Worker # //gn/standalone/protoc.py as well. 191*6dbdd20aSAndroid Build Coastguard Worker # 192*6dbdd20aSAndroid Build Coastguard Worker # This comment can be removed with protobuf is next upreved. 193*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/protocolbuffers/protobuf.git', 194*6dbdd20aSAndroid Build Coastguard Worker 'f0dc78d7e6e331b8c6bb2d5283e06aa26883ca7c', # refs/tags/v21.12 195*6dbdd20aSAndroid Build Coastguard Worker 'all', 196*6dbdd20aSAndroid Build Coastguard Worker 'all'), 197*6dbdd20aSAndroid Build Coastguard Worker 198*6dbdd20aSAndroid Build Coastguard Worker # libc++, libc++abi and libunwind for Linux where we need to rebuild the C++ 199*6dbdd20aSAndroid Build Coastguard Worker # lib from sources. Keep the SHA1s in sync with Chrome's src/buildtools/DEPS. 200*6dbdd20aSAndroid Build Coastguard Worker Dependency( 201*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/libcxx', 202*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git', 203*6dbdd20aSAndroid Build Coastguard Worker '852bc6746f45add53fec19f3a29280e69e358d44', 'all', 'all'), 204*6dbdd20aSAndroid Build Coastguard Worker Dependency( 205*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/libcxxabi', 206*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git', 207*6dbdd20aSAndroid Build Coastguard Worker 'a37a3aa431f132b02a58656f13984d51098330a2', 'all', 'all'), 208*6dbdd20aSAndroid Build Coastguard Worker Dependency( 209*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/libunwind', 210*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git', 211*6dbdd20aSAndroid Build Coastguard Worker '419b03c0b8f20d6da9ddcb0d661a94a97cdd7dad', 'all', 'all'), 212*6dbdd20aSAndroid Build Coastguard Worker 213*6dbdd20aSAndroid Build Coastguard Worker # Keep in sync with chromium DEPS. 214*6dbdd20aSAndroid Build Coastguard Worker Dependency( 215*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/libfuzzer', 216*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/chromium/llvm-project/compiler-rt/lib/fuzzer.git', 217*6dbdd20aSAndroid Build Coastguard Worker 'debe7d2d1982e540fbd6bd78604bf001753f9e74', 'linux', 'all'), 218*6dbdd20aSAndroid Build Coastguard Worker 219*6dbdd20aSAndroid Build Coastguard Worker # Benchmarking tool. 220*6dbdd20aSAndroid Build Coastguard Worker Dependency( 221*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/benchmark', 222*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/google/benchmark.git', 223*6dbdd20aSAndroid Build Coastguard Worker 'e991355c02b93fe17713efe04cbc2e278e00fdbd', 'all', 'all'), 224*6dbdd20aSAndroid Build Coastguard Worker 225*6dbdd20aSAndroid Build Coastguard Worker # Libbacktrace, for stacktraces in Linux/Android debug builds. 226*6dbdd20aSAndroid Build Coastguard Worker # From https://github.com/ianlancetaylor/libbacktrace/archive/177940370e4a6b2509e92a0aaa9749184e64af43.zip 227*6dbdd20aSAndroid Build Coastguard Worker Dependency( 228*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/libbacktrace.zip', 229*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/libbacktrace-14818b7783eeb9a56c3f0fca78cefd3143f8c5f6.zip', 230*6dbdd20aSAndroid Build Coastguard Worker '0d09295938155aa84d9a6049f63df8cd2def3a28302b3550ea3ead9100b3d086', 231*6dbdd20aSAndroid Build Coastguard Worker 'all', 'all'), 232*6dbdd20aSAndroid Build Coastguard Worker 233*6dbdd20aSAndroid Build Coastguard Worker # Sqlite for the trace processing library. 234*6dbdd20aSAndroid Build Coastguard Worker # This is the amalgamated source whose compiled output is meant to be faster. 235*6dbdd20aSAndroid Build Coastguard Worker # We still pull the full source for the extensions (which are not available 236*6dbdd20aSAndroid Build Coastguard Worker # in the amalgamation). 237*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 238*6dbdd20aSAndroid Build Coastguard Worker Dependency( 239*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/sqlite.zip', 240*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/sqlite-amalgamation-3440200.zip', 241*6dbdd20aSAndroid Build Coastguard Worker '833be89b53b3be8b40a2e3d5fedb635080e3edb204957244f3d6987c2bb2345f', 242*6dbdd20aSAndroid Build Coastguard Worker 'all', 'all'), 243*6dbdd20aSAndroid Build Coastguard Worker Dependency( 244*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/sqlite_src', 245*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/sqlite/sqlite.git', 246*6dbdd20aSAndroid Build Coastguard Worker 'c8f9803dc32bfee78a9ca2b1abbe39499729219b', # refs/tags/version-3.44.2. 247*6dbdd20aSAndroid Build Coastguard Worker 'all', 248*6dbdd20aSAndroid Build Coastguard Worker 'all'), 249*6dbdd20aSAndroid Build Coastguard Worker 250*6dbdd20aSAndroid Build Coastguard Worker # JsonCpp for legacy json import. Used only by the trace processor in 251*6dbdd20aSAndroid Build Coastguard Worker # standalone builds. 252*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 253*6dbdd20aSAndroid Build Coastguard Worker Dependency( 254*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/jsoncpp', 255*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git', 256*6dbdd20aSAndroid Build Coastguard Worker '6aba23f4a8628d599a9ef7fa4811c4ff6e4070e2', # refs/tags/1.9.3. 257*6dbdd20aSAndroid Build Coastguard Worker 'all', 258*6dbdd20aSAndroid Build Coastguard Worker 'all'), 259*6dbdd20aSAndroid Build Coastguard Worker 260*6dbdd20aSAndroid Build Coastguard Worker # Libexpat for Instruments XML import. 261*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 262*6dbdd20aSAndroid Build Coastguard Worker Dependency( 263*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/expat/src', 264*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git', 265*6dbdd20aSAndroid Build Coastguard Worker 'fa75b96546c069d17b8f80d91e0f4ef0cde3790d', # refs/tags/upstream/R_2_6_2. 266*6dbdd20aSAndroid Build Coastguard Worker 'all', 267*6dbdd20aSAndroid Build Coastguard Worker 'all'), 268*6dbdd20aSAndroid Build Coastguard Worker 269*6dbdd20aSAndroid Build Coastguard Worker # Archive with only the demangling sources from llvm-project. 270*6dbdd20aSAndroid Build Coastguard Worker # See tools/repackage_llvm_demangler.sh on how to update this. 271*6dbdd20aSAndroid Build Coastguard Worker # File suffix is the git reference to the commit at which we rearchived the 272*6dbdd20aSAndroid Build Coastguard Worker # sources, as hosted on https://llvm.googlesource.com/llvm-project. 273*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 274*6dbdd20aSAndroid Build Coastguard Worker Dependency( 275*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/llvm-project.tgz', 276*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/llvm-project-617a15a9eac96088ae5e9134248d8236e34b91b1.tgz', 277*6dbdd20aSAndroid Build Coastguard Worker '7e2541446a27f2a09a84520da7bc93cd71749ba0f17318f2d5291fbf45b97956', 278*6dbdd20aSAndroid Build Coastguard Worker 'all', 'all'), 279*6dbdd20aSAndroid Build Coastguard Worker 280*6dbdd20aSAndroid Build Coastguard Worker # These dependencies are for libunwindstack, which is used by src/profiling. 281*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/android-core', 282*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/system/core.git', 283*6dbdd20aSAndroid Build Coastguard Worker '9e6cef7f07d8c11b3ea820938aeb7ff2e9dbaa52', 'all', 'all'), 284*6dbdd20aSAndroid Build Coastguard Worker Dependency( 285*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/android-unwinding', 286*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/system/unwinding.git', 287*6dbdd20aSAndroid Build Coastguard Worker '4b59ea8471e89d01300481a92de3230b79b6d7c7', 'all', 'all'), 288*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/android-logging', 289*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/system/logging.git', 290*6dbdd20aSAndroid Build Coastguard Worker '7b36b566c9113fc703d68f76e8f40c0c2432481c', 'all', 'all'), 291*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/android-libbase', 292*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/system/libbase.git', 293*6dbdd20aSAndroid Build Coastguard Worker '78f1c2f83e625bdf66d55b48bdb3a301c20d2fb3', 'all', 'all'), 294*6dbdd20aSAndroid Build Coastguard Worker Dependency( 295*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/android-libprocinfo', 296*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/system/libprocinfo.git', 297*6dbdd20aSAndroid Build Coastguard Worker 'fd214c13ededecae97a3b15b5fccc8925a749a84', 'all', 'all'), 298*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/lzma', 299*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/external/lzma.git', 300*6dbdd20aSAndroid Build Coastguard Worker '7851dce6f4ca17f5caa1c93a4e0a45686b1d56c3', 'all', 'all'), 301*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/zstd', 302*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/external/zstd.git', 303*6dbdd20aSAndroid Build Coastguard Worker '77211fcc5e08c781734a386402ada93d0d18d093', 'all', 'all'), 304*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/bionic', 305*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/bionic.git', 306*6dbdd20aSAndroid Build Coastguard Worker 'a0d0355105cb9d4a4b5384897448676133d7b8e2', 'all', 'all'), 307*6dbdd20aSAndroid Build Coastguard Worker 308*6dbdd20aSAndroid Build Coastguard Worker # Zlib used both in the tracing binaries, as well as the trace processor and 309*6dbdd20aSAndroid Build Coastguard Worker # assorted tools. 310*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 311*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/zlib', 312*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/external/zlib.git', 313*6dbdd20aSAndroid Build Coastguard Worker '6d3f6aa0f87c9791ca7724c279ef61384f331dfd', 'all', 'all'), 314*6dbdd20aSAndroid Build Coastguard Worker 315*6dbdd20aSAndroid Build Coastguard Worker # Linenoise, used only by trace_processor in standalone builds. 316*6dbdd20aSAndroid Build Coastguard Worker # If updating the version, also update bazel/deps.bzl. 317*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/linenoise', 318*6dbdd20aSAndroid Build Coastguard Worker 'https://fuchsia.googlesource.com/third_party/linenoise.git', 319*6dbdd20aSAndroid Build Coastguard Worker 'c894b9e59f02203dbe4e2be657572cf88c4230c3', 'all', 'all'), 320*6dbdd20aSAndroid Build Coastguard Worker 321*6dbdd20aSAndroid Build Coastguard Worker # Bloaty, used to investigate binary size 322*6dbdd20aSAndroid Build Coastguard Worker Dependency( 323*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/bloaty.zip', 324*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/bloaty-1.1-b3b829de35babc2fe831b9488ad2e50bca939412-mac.zip', 325*6dbdd20aSAndroid Build Coastguard Worker '2d301bd72a20e3f42888c9274ceb4dca76c103608053572322412c2c65ab8cb8', 326*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'all'), 327*6dbdd20aSAndroid Build Coastguard Worker 328*6dbdd20aSAndroid Build Coastguard Worker Dependency('buildtools/open_csd', 329*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/external/OpenCSD.git', 330*6dbdd20aSAndroid Build Coastguard Worker '0ce01e934f95efb6a216a6efa35af1245151c779', 'all', 'all'), 331*6dbdd20aSAndroid Build Coastguard Worker] 332*6dbdd20aSAndroid Build Coastguard Worker 333*6dbdd20aSAndroid Build Coastguard Worker# Dependencies required to build Android code. 334*6dbdd20aSAndroid Build Coastguard Worker# URLs and SHA1s taken from: 335*6dbdd20aSAndroid Build Coastguard Worker# - https://dl.google.com/android/repository/repository-11.xml 336*6dbdd20aSAndroid Build Coastguard Worker# - https://dl.google.com/android/repository/sys-img/android/sys-img.xml 337*6dbdd20aSAndroid Build Coastguard WorkerBUILD_DEPS_ANDROID = [ 338*6dbdd20aSAndroid Build Coastguard Worker # Android NDK 339*6dbdd20aSAndroid Build Coastguard Worker Dependency( 340*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/ndk.zip', 341*6dbdd20aSAndroid Build Coastguard Worker 'https://dl.google.com/android/repository/android-ndk-r26c-darwin.zip', 342*6dbdd20aSAndroid Build Coastguard Worker '312756dfcbdbf389d35d651e17ca98683bd36cb83cc7bf7ad51cac5c06bd064b', 343*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'all'), 344*6dbdd20aSAndroid Build Coastguard Worker Dependency( 345*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/ndk.zip', 346*6dbdd20aSAndroid Build Coastguard Worker 'https://dl.google.com/android/repository/android-ndk-r26c-linux.zip', 347*6dbdd20aSAndroid Build Coastguard Worker '6d6e659834d28bb24ba7ae66148ad05115ebbad7dabed1af9b3265674774fcf6', 348*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 349*6dbdd20aSAndroid Build Coastguard Worker] 350*6dbdd20aSAndroid Build Coastguard Worker 351*6dbdd20aSAndroid Build Coastguard Worker# Dependencies required to run Android tests. 352*6dbdd20aSAndroid Build Coastguard WorkerTEST_DEPS_ANDROID = [ 353*6dbdd20aSAndroid Build Coastguard Worker # Android emulator images. 354*6dbdd20aSAndroid Build Coastguard Worker Dependency( 355*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/aosp-arm.zip', 356*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/aosp-02022018-arm.zip', 357*6dbdd20aSAndroid Build Coastguard Worker 'f5c7a3a22ad7aa0bd14ba467e8697e1e917d306699bd25622aa4419a413b9b67', 358*6dbdd20aSAndroid Build Coastguard Worker 'all', 'all'), 359*6dbdd20aSAndroid Build Coastguard Worker 360*6dbdd20aSAndroid Build Coastguard Worker # platform-tools.zip contains adb binaries. 361*6dbdd20aSAndroid Build Coastguard Worker Dependency( 362*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/android_sdk/platform-tools.zip', 363*6dbdd20aSAndroid Build Coastguard Worker 'https://dl.google.com/android/repository/platform-tools_r26.0.0-darwin.zip', 364*6dbdd20aSAndroid Build Coastguard Worker '98d392cbd21ca20d643c7e1605760cc49075611e317c534096b5564053f4ac8e', 365*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'all'), 366*6dbdd20aSAndroid Build Coastguard Worker Dependency( 367*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/android_sdk/platform-tools.zip', 368*6dbdd20aSAndroid Build Coastguard Worker 'https://dl.google.com/android/repository/platform-tools_r26.0.0-linux.zip', 369*6dbdd20aSAndroid Build Coastguard Worker '90208207521d85abf0d46e3374aa4e04b7aff74e4f355c792ac334de7a77e50b', 370*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 371*6dbdd20aSAndroid Build Coastguard Worker 372*6dbdd20aSAndroid Build Coastguard Worker # Android emulator binaries. 373*6dbdd20aSAndroid Build Coastguard Worker Dependency( 374*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/emulator', 375*6dbdd20aSAndroid Build Coastguard Worker 'https://android.googlesource.com/platform/prebuilts/android-emulator.git', 376*6dbdd20aSAndroid Build Coastguard Worker '4b260028dc27bc92c39bee9129cb2ba839970956', 'all', 'x64'), 377*6dbdd20aSAndroid Build Coastguard Worker] 378*6dbdd20aSAndroid Build Coastguard Worker 379*6dbdd20aSAndroid Build Coastguard Worker# This variable is updated by tools/roll-catapult-trace-viewer. 380*6dbdd20aSAndroid Build Coastguard WorkerCATAPULT_SHA256 = 'b30108e05268ce6c65bb4126b65f6bfac165d17f5c1fd285046e7e6fd76c209f' 381*6dbdd20aSAndroid Build Coastguard Worker 382*6dbdd20aSAndroid Build Coastguard WorkerTYPEFACES_SHA256 = '1065172aaf0e9c22bc4f206ed9fdf5f1b4355d233fb21f9f26a89cd66c941940' 383*6dbdd20aSAndroid Build Coastguard Worker 384*6dbdd20aSAndroid Build Coastguard WorkerUI_DEPS = [ 385*6dbdd20aSAndroid Build Coastguard Worker Dependency( 386*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/nodejs.tgz', 387*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-nodejs/20.11.0/5b5681e12a21cda986410f69e03e6220a21dd4d2', 388*6dbdd20aSAndroid Build Coastguard Worker 'cecb99fbb369a9090dddc27e228b66335cd72555b44fa8839ef78e56c51682c5', 389*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'arm64'), 390*6dbdd20aSAndroid Build Coastguard Worker Dependency( 391*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/nodejs.tgz', 392*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-nodejs/20.11.0/e3c0fd53caae857309815f3f8de7c2dce49d7bca', 393*6dbdd20aSAndroid Build Coastguard Worker '20affacca2480c368b75a1d91ec1a2720604b325207ef0cf39cfef3c235dad19', 394*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'x64'), 395*6dbdd20aSAndroid Build Coastguard Worker Dependency( 396*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/nodejs.tgz', 397*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/chromium-nodejs/20.11.0/f9a337cfa0e2b92d3e5c671c26b454bd8e99769e', 398*6dbdd20aSAndroid Build Coastguard Worker '0ba9cc91698c1f833a1fdc1fe0cb392d825ad484c71b0d84388ac80bfd3d6079', 399*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 400*6dbdd20aSAndroid Build Coastguard Worker Dependency( 401*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/mac/emsdk.tgz', 402*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/emscripten-2.0.12-mac.tgz', 403*6dbdd20aSAndroid Build Coastguard Worker 'aa125f8c8ff8a386d43e18c8ea0c98c875cc19160a899403e8967a5478f96f31', 404*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'all'), 405*6dbdd20aSAndroid Build Coastguard Worker Dependency( 406*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/linux64/emsdk.tgz', 407*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/emscripten-2.0.12-linux.tgz', 408*6dbdd20aSAndroid Build Coastguard Worker 'bfff9fb0326363c12e19b542f27a5f12cedbfc310f30621dc497c9af51d2d2e3', 409*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 410*6dbdd20aSAndroid Build Coastguard Worker Dependency( 411*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/catapult_trace_viewer.tgz', 412*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/catapult_trace_viewer-%s.tar.gz' 413*6dbdd20aSAndroid Build Coastguard Worker % CATAPULT_SHA256, CATAPULT_SHA256, 'all', 'all'), 414*6dbdd20aSAndroid Build Coastguard Worker Dependency( 415*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/typefaces.tgz', 416*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/typefaces-%s.tar.gz' % 417*6dbdd20aSAndroid Build Coastguard Worker TYPEFACES_SHA256, TYPEFACES_SHA256, 'all', 'all'), 418*6dbdd20aSAndroid Build Coastguard Worker 419*6dbdd20aSAndroid Build Coastguard Worker Dependency( 420*6dbdd20aSAndroid Build Coastguard Worker 'third_party/pnpm/pnpm', 421*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/pnpm-linux-arm64-8.6.3', 422*6dbdd20aSAndroid Build Coastguard Worker 'ac76e9ab6a770479f93c1a2bf978d72636dbcb02608554378cf30075a78a22ac', 423*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'arm64'), 424*6dbdd20aSAndroid Build Coastguard Worker Dependency( 425*6dbdd20aSAndroid Build Coastguard Worker 'third_party/pnpm/pnpm', 426*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/pnpm-linux-x64-8.6.3', 427*6dbdd20aSAndroid Build Coastguard Worker '5a58ccd78d44faac138d901976a7a8917c0f2a2f83743cfdd895fcd0bb6aa135', 428*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'x64'), 429*6dbdd20aSAndroid Build Coastguard Worker Dependency( 430*6dbdd20aSAndroid Build Coastguard Worker 'third_party/pnpm/pnpm', 431*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/pnpm-macos-arm64-8.6.3', 432*6dbdd20aSAndroid Build Coastguard Worker 'f527713d3183e30cfbfd7fd6403ceed730831c53649e50c979961eab3b2cf866', 433*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'arm64'), 434*6dbdd20aSAndroid Build Coastguard Worker Dependency( 435*6dbdd20aSAndroid Build Coastguard Worker 'third_party/pnpm/pnpm', 436*6dbdd20aSAndroid Build Coastguard Worker 'https://storage.googleapis.com/perfetto/pnpm-macos-x64-8.6.3', 437*6dbdd20aSAndroid Build Coastguard Worker '6b425f7f0342341e9ee9427a9a2be2c89936c4a04efe6125f7af667eb02b10c1', 438*6dbdd20aSAndroid Build Coastguard Worker 'darwin', 'x64'), 439*6dbdd20aSAndroid Build Coastguard Worker] 440*6dbdd20aSAndroid Build Coastguard Worker 441*6dbdd20aSAndroid Build Coastguard Worker# Dependencies to build gRPC. 442*6dbdd20aSAndroid Build Coastguard WorkerBIGTRACE_DEPS = [ 443*6dbdd20aSAndroid Build Coastguard Worker Dependency( 444*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/grpc/src', 445*6dbdd20aSAndroid Build Coastguard Worker 'https://chromium.googlesource.com/external/github.com/grpc/grpc.git', 446*6dbdd20aSAndroid Build Coastguard Worker '4795c5e69b25e8c767b498bea784da0ef8c96fd5', 'all', 'all', True), 447*6dbdd20aSAndroid Build Coastguard Worker Dependency( 448*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/cpp-httplib', 449*6dbdd20aSAndroid Build Coastguard Worker 'https://github.com/yhirose/cpp-httplib.git', 450*6dbdd20aSAndroid Build Coastguard Worker '6c3e8482f7b4e3b307bb42afbb85fd8771da86b8', 451*6dbdd20aSAndroid Build Coastguard Worker 'all', 'all', True 452*6dbdd20aSAndroid Build Coastguard Worker ) 453*6dbdd20aSAndroid Build Coastguard Worker] 454*6dbdd20aSAndroid Build Coastguard Worker 455*6dbdd20aSAndroid Build Coastguard Worker# Sysroots required to cross-compile Linux targets (linux-arm{,64}). 456*6dbdd20aSAndroid Build Coastguard Worker# These are taken from Chromium's build/linux/sysroot_scripts/sysroots.json. 457*6dbdd20aSAndroid Build Coastguard WorkerBUILD_DEPS_LINUX_CROSS_SYSROOTS = [ 458*6dbdd20aSAndroid Build Coastguard Worker Dependency( 459*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/debian_sid_arm-sysroot.tgz', 460*6dbdd20aSAndroid Build Coastguard Worker 'https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/11d6f690ca49e8ba01a1d8c5346cedad2cf308fd/debian_sid_arm_sysroot.tar.xz', 461*6dbdd20aSAndroid Build Coastguard Worker 'ff192fe073d140d836c9ca1e68f7200d558bb9aa6c5c8f4f76f794f82890f99a', 462*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'all'), 463*6dbdd20aSAndroid Build Coastguard Worker Dependency( 464*6dbdd20aSAndroid Build Coastguard Worker 'buildtools/debian_sid_arm64-sysroot.tgz', 465*6dbdd20aSAndroid Build Coastguard Worker 'https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/2befe8ce3e88be6080e4fb7e6d412278ea6a7625/debian_sid_arm64_sysroot.tar.xz', 466*6dbdd20aSAndroid Build Coastguard Worker 'e4389eab2fe363f3fbdfa4d3ce9d94457d78fd2c0e62171a7534867623eadc90', 467*6dbdd20aSAndroid Build Coastguard Worker 'linux', 'all'), 468*6dbdd20aSAndroid Build Coastguard Worker] 469*6dbdd20aSAndroid Build Coastguard Worker 470*6dbdd20aSAndroid Build Coastguard WorkerALL_DEPS = ( 471*6dbdd20aSAndroid Build Coastguard Worker BUILD_DEPS_HOST + BUILD_DEPS_ANDROID + BUILD_DEPS_LINUX_CROSS_SYSROOTS + 472*6dbdd20aSAndroid Build Coastguard Worker TEST_DEPS_ANDROID + UI_DEPS) 473*6dbdd20aSAndroid Build Coastguard Worker 474*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 475*6dbdd20aSAndroid Build Coastguard WorkerUI_DIR = os.path.join(ROOT_DIR, 'ui') 476*6dbdd20aSAndroid Build Coastguard WorkerTOOLS_DIR = os.path.join(ROOT_DIR, 'tools') 477*6dbdd20aSAndroid Build Coastguard WorkerNODE_MODULES_STATUS_FILE = os.path.join(UI_DIR, 'node_modules', '.last_install') 478*6dbdd20aSAndroid Build Coastguard WorkerTEST_DATA_SCRIPT = os.path.join(TOOLS_DIR, 'test_data') 479*6dbdd20aSAndroid Build Coastguard Worker 480*6dbdd20aSAndroid Build Coastguard Worker 481*6dbdd20aSAndroid Build Coastguard Workerdef CheckCallRetry(*args, **kwargs): 482*6dbdd20aSAndroid Build Coastguard Worker """ Like subprocess.check_call, with retries up to 5 times. """ 483*6dbdd20aSAndroid Build Coastguard Worker MAX_ATTEMPTS = 5 484*6dbdd20aSAndroid Build Coastguard Worker for attempt in range(1, MAX_ATTEMPTS + 1): 485*6dbdd20aSAndroid Build Coastguard Worker try: 486*6dbdd20aSAndroid Build Coastguard Worker return subprocess.check_call(*args, **kwargs) 487*6dbdd20aSAndroid Build Coastguard Worker except subprocess.CalledProcessError as error: 488*6dbdd20aSAndroid Build Coastguard Worker if attempt == MAX_ATTEMPTS: 489*6dbdd20aSAndroid Build Coastguard Worker raise error 490*6dbdd20aSAndroid Build Coastguard Worker else: 491*6dbdd20aSAndroid Build Coastguard Worker logging.error(error) 492*6dbdd20aSAndroid Build Coastguard Worker time.sleep(attempt * 3) 493*6dbdd20aSAndroid Build Coastguard Worker 494*6dbdd20aSAndroid Build Coastguard Worker 495*6dbdd20aSAndroid Build Coastguard Workerdef DownloadURL(url, out_file): 496*6dbdd20aSAndroid Build Coastguard Worker CheckCallRetry(['curl', '-L', '-#', '-o', out_file, url]) 497*6dbdd20aSAndroid Build Coastguard Worker 498*6dbdd20aSAndroid Build Coastguard Worker 499*6dbdd20aSAndroid Build Coastguard Workerdef GetArch(): 500*6dbdd20aSAndroid Build Coastguard Worker arch = machine() 501*6dbdd20aSAndroid Build Coastguard Worker if arch == 'arm64': 502*6dbdd20aSAndroid Build Coastguard Worker return 'arm64' 503*6dbdd20aSAndroid Build Coastguard Worker elif arch == 'aarch64': 504*6dbdd20aSAndroid Build Coastguard Worker return 'arm64' 505*6dbdd20aSAndroid Build Coastguard Worker else: 506*6dbdd20aSAndroid Build Coastguard Worker # Assume everything else is x64 matching previous behaviour. 507*6dbdd20aSAndroid Build Coastguard Worker return 'x64' 508*6dbdd20aSAndroid Build Coastguard Worker 509*6dbdd20aSAndroid Build Coastguard Worker 510*6dbdd20aSAndroid Build Coastguard Workerdef ReadFile(path): 511*6dbdd20aSAndroid Build Coastguard Worker if not os.path.exists(path): 512*6dbdd20aSAndroid Build Coastguard Worker return None 513*6dbdd20aSAndroid Build Coastguard Worker with open(path) as f: 514*6dbdd20aSAndroid Build Coastguard Worker return f.read().strip() 515*6dbdd20aSAndroid Build Coastguard Worker 516*6dbdd20aSAndroid Build Coastguard Worker 517*6dbdd20aSAndroid Build Coastguard Workerdef MkdirRecursive(path): 518*6dbdd20aSAndroid Build Coastguard Worker # Works with both relative and absolute paths 519*6dbdd20aSAndroid Build Coastguard Worker cwd = '/' if path.startswith('/') else ROOT_DIR 520*6dbdd20aSAndroid Build Coastguard Worker for part in path.split('/'): 521*6dbdd20aSAndroid Build Coastguard Worker cwd = os.path.join(cwd, part) 522*6dbdd20aSAndroid Build Coastguard Worker if not os.path.exists(cwd): 523*6dbdd20aSAndroid Build Coastguard Worker os.makedirs(cwd) 524*6dbdd20aSAndroid Build Coastguard Worker else: 525*6dbdd20aSAndroid Build Coastguard Worker assert (os.path.isdir(cwd)) 526*6dbdd20aSAndroid Build Coastguard Worker 527*6dbdd20aSAndroid Build Coastguard Worker 528*6dbdd20aSAndroid Build Coastguard Workerdef HashLocalFile(path): 529*6dbdd20aSAndroid Build Coastguard Worker if not os.path.exists(path): 530*6dbdd20aSAndroid Build Coastguard Worker return None 531*6dbdd20aSAndroid Build Coastguard Worker with open(path, 'rb') as f: 532*6dbdd20aSAndroid Build Coastguard Worker return hashlib.sha256(f.read()).hexdigest() 533*6dbdd20aSAndroid Build Coastguard Worker 534*6dbdd20aSAndroid Build Coastguard Worker 535*6dbdd20aSAndroid Build Coastguard Workerdef ExtractZipfilePreservePermissions(zf, info, path): 536*6dbdd20aSAndroid Build Coastguard Worker target_path = os.path.join(path, info.filename) 537*6dbdd20aSAndroid Build Coastguard Worker mode = info.external_attr >> 16 538*6dbdd20aSAndroid Build Coastguard Worker S_IFLNK = 0o120000 # symbolic link 539*6dbdd20aSAndroid Build Coastguard Worker if (mode & S_IFLNK) == S_IFLNK: 540*6dbdd20aSAndroid Build Coastguard Worker dst = zf.read(info).decode() 541*6dbdd20aSAndroid Build Coastguard Worker os.symlink(dst, target_path) 542*6dbdd20aSAndroid Build Coastguard Worker return 543*6dbdd20aSAndroid Build Coastguard Worker zf.extract(info.filename, path=path) 544*6dbdd20aSAndroid Build Coastguard Worker min_acls = 0o755 if info.filename.endswith('/') else 0o644 545*6dbdd20aSAndroid Build Coastguard Worker os.chmod(target_path, mode | min_acls) 546*6dbdd20aSAndroid Build Coastguard Worker 547*6dbdd20aSAndroid Build Coastguard Worker 548*6dbdd20aSAndroid Build Coastguard Workerdef IsGitRepoCheckoutOutAtRevision(path, revision): 549*6dbdd20aSAndroid Build Coastguard Worker return ReadFile(os.path.join(path, '.git', 'HEAD')) == revision 550*6dbdd20aSAndroid Build Coastguard Worker 551*6dbdd20aSAndroid Build Coastguard Worker 552*6dbdd20aSAndroid Build Coastguard Workerdef RmtreeIfExists(path): 553*6dbdd20aSAndroid Build Coastguard Worker # Git creates read-only files on windows, which cause failures with rmtree. 554*6dbdd20aSAndroid Build Coastguard Worker # This seems the socially accepted way to deal with it. 555*6dbdd20aSAndroid Build Coastguard Worker # See https://bugs.python.org/issue19643 . 556*6dbdd20aSAndroid Build Coastguard Worker def del_read_only_for_windows(_action, name, _exc): 557*6dbdd20aSAndroid Build Coastguard Worker os.chmod(name, stat.S_IWRITE) 558*6dbdd20aSAndroid Build Coastguard Worker os.remove(name) 559*6dbdd20aSAndroid Build Coastguard Worker 560*6dbdd20aSAndroid Build Coastguard Worker if not os.path.exists(path): 561*6dbdd20aSAndroid Build Coastguard Worker return 562*6dbdd20aSAndroid Build Coastguard Worker third_party_path = os.path.abspath(os.path.join(ROOT_DIR, 'third_party')) 563*6dbdd20aSAndroid Build Coastguard Worker buildtools_path = os.path.abspath(os.path.join(ROOT_DIR, 'buildtools')) 564*6dbdd20aSAndroid Build Coastguard Worker test_path = os.path.abspath(os.path.join(ROOT_DIR, 'test', 'data')) 565*6dbdd20aSAndroid Build Coastguard Worker if (not os.path.abspath(path).startswith(buildtools_path) and 566*6dbdd20aSAndroid Build Coastguard Worker not os.path.abspath(path).startswith(test_path) and 567*6dbdd20aSAndroid Build Coastguard Worker not os.path.abspath(path).startswith(third_party_path)): 568*6dbdd20aSAndroid Build Coastguard Worker # Safety check to prevent that some merge confilct ends up doing some 569*6dbdd20aSAndroid Build Coastguard Worker # rm -rf / or similar. 570*6dbdd20aSAndroid Build Coastguard Worker logging.fatal( 571*6dbdd20aSAndroid Build Coastguard Worker 'Cannot remove %s: outside of {buildtools, test/data, third_party}', 572*6dbdd20aSAndroid Build Coastguard Worker path) 573*6dbdd20aSAndroid Build Coastguard Worker sys.exit(1) 574*6dbdd20aSAndroid Build Coastguard Worker logging.info('Removing %s' % path) 575*6dbdd20aSAndroid Build Coastguard Worker if os.path.isdir(path): 576*6dbdd20aSAndroid Build Coastguard Worker shutil.rmtree(path, onerror=del_read_only_for_windows) 577*6dbdd20aSAndroid Build Coastguard Worker else: 578*6dbdd20aSAndroid Build Coastguard Worker os.remove(path) 579*6dbdd20aSAndroid Build Coastguard Worker 580*6dbdd20aSAndroid Build Coastguard Worker 581*6dbdd20aSAndroid Build Coastguard Workerdef CheckoutGitRepo(path, git_url, revision, check_only): 582*6dbdd20aSAndroid Build Coastguard Worker if IsGitRepoCheckoutOutAtRevision(path, revision): 583*6dbdd20aSAndroid Build Coastguard Worker return False 584*6dbdd20aSAndroid Build Coastguard Worker if check_only: 585*6dbdd20aSAndroid Build Coastguard Worker return True 586*6dbdd20aSAndroid Build Coastguard Worker path = path.replace('/', os.sep) 587*6dbdd20aSAndroid Build Coastguard Worker RmtreeIfExists(path) 588*6dbdd20aSAndroid Build Coastguard Worker MkdirRecursive(path) 589*6dbdd20aSAndroid Build Coastguard Worker logging.info('Fetching %s @ %s into %s', git_url, revision, path) 590*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(['git', 'init', path], cwd=path) 591*6dbdd20aSAndroid Build Coastguard Worker CheckCallRetry(['git', 'fetch', '--quiet', '--depth', '1', git_url, revision], 592*6dbdd20aSAndroid Build Coastguard Worker cwd=path) 593*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(['git', 'checkout', revision, '--quiet'], cwd=path) 594*6dbdd20aSAndroid Build Coastguard Worker CheckCallRetry( 595*6dbdd20aSAndroid Build Coastguard Worker ['git', 'submodule', 'update', '--init', '--recursive', '--quiet'], 596*6dbdd20aSAndroid Build Coastguard Worker cwd=path) 597*6dbdd20aSAndroid Build Coastguard Worker assert (IsGitRepoCheckoutOutAtRevision(path, revision)) 598*6dbdd20aSAndroid Build Coastguard Worker return True 599*6dbdd20aSAndroid Build Coastguard Worker 600*6dbdd20aSAndroid Build Coastguard Worker 601*6dbdd20aSAndroid Build Coastguard Workerdef InstallNodeModules(force_clean=False): 602*6dbdd20aSAndroid Build Coastguard Worker if force_clean: 603*6dbdd20aSAndroid Build Coastguard Worker node_modules = os.path.join(UI_DIR, 'node_modules') 604*6dbdd20aSAndroid Build Coastguard Worker logging.info('Clearing %s', node_modules) 605*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(['git', 'clean', '-qxffd', node_modules], 606*6dbdd20aSAndroid Build Coastguard Worker cwd=ROOT_DIR) 607*6dbdd20aSAndroid Build Coastguard Worker logging.info("Running `pnpm install --shamefully-hoist --frozen-lockfile` in {0}".format(UI_DIR)) 608*6dbdd20aSAndroid Build Coastguard Worker 609*6dbdd20aSAndroid Build Coastguard Worker # Some node modules have postinstall scripts (already bad) but worse 610*6dbdd20aSAndroid Build Coastguard Worker # sometimes they are in the form: "postinstall: 'node ./scripts/foo'" 611*6dbdd20aSAndroid Build Coastguard Worker # so here we need to ensure that our hermetic node is available in 612*6dbdd20aSAndroid Build Coastguard Worker # PATH. 613*6dbdd20aSAndroid Build Coastguard Worker env = os.environ.copy() 614*6dbdd20aSAndroid Build Coastguard Worker env['PATH'] = TOOLS_DIR + ':' + env['PATH'] 615*6dbdd20aSAndroid Build Coastguard Worker 616*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call([ 617*6dbdd20aSAndroid Build Coastguard Worker os.path.join(TOOLS_DIR, 'pnpm'), 618*6dbdd20aSAndroid Build Coastguard Worker 'install', 619*6dbdd20aSAndroid Build Coastguard Worker '--shamefully-hoist', 620*6dbdd20aSAndroid Build Coastguard Worker '--frozen-lockfile'], 621*6dbdd20aSAndroid Build Coastguard Worker cwd=UI_DIR, 622*6dbdd20aSAndroid Build Coastguard Worker env=env) 623*6dbdd20aSAndroid Build Coastguard Worker # pbjs has the bad habit of installing extra packages on its first 624*6dbdd20aSAndroid Build Coastguard Worker # run. Run it here, so we avoid fetches while building. 625*6dbdd20aSAndroid Build Coastguard Worker pbjs = ['node_modules/.bin/pbjs', '/dev/null', '-o', '/dev/null'] 626*6dbdd20aSAndroid Build Coastguard Worker subprocess.call(pbjs, cwd=UI_DIR, env=env) 627*6dbdd20aSAndroid Build Coastguard Worker with open(NODE_MODULES_STATUS_FILE, 'w') as f: 628*6dbdd20aSAndroid Build Coastguard Worker f.write(HashLocalFile(os.path.join(UI_DIR, 'pnpm-lock.yaml'))) 629*6dbdd20aSAndroid Build Coastguard Worker 630*6dbdd20aSAndroid Build Coastguard Worker 631*6dbdd20aSAndroid Build Coastguard Workerdef CheckNodeModules(): 632*6dbdd20aSAndroid Build Coastguard Worker """Returns True if the modules are up-to-date. 633*6dbdd20aSAndroid Build Coastguard Worker 634*6dbdd20aSAndroid Build Coastguard Worker There doesn't seem to be an easy way to check node modules versions. Instead 635*6dbdd20aSAndroid Build Coastguard Worker just check if pnpm-lock.json changed since the last `pnpm install` call. 636*6dbdd20aSAndroid Build Coastguard Worker """ 637*6dbdd20aSAndroid Build Coastguard Worker if not os.path.exists(NODE_MODULES_STATUS_FILE): 638*6dbdd20aSAndroid Build Coastguard Worker return False 639*6dbdd20aSAndroid Build Coastguard Worker with open(NODE_MODULES_STATUS_FILE, 'r') as f: 640*6dbdd20aSAndroid Build Coastguard Worker actual = f.read() 641*6dbdd20aSAndroid Build Coastguard Worker expected = HashLocalFile(os.path.join(UI_DIR, 'pnpm-lock.yaml')) 642*6dbdd20aSAndroid Build Coastguard Worker return expected == actual 643*6dbdd20aSAndroid Build Coastguard Worker 644*6dbdd20aSAndroid Build Coastguard Worker 645*6dbdd20aSAndroid Build Coastguard Workerdef CheckHashes(): 646*6dbdd20aSAndroid Build Coastguard Worker for dep in ALL_DEPS: 647*6dbdd20aSAndroid Build Coastguard Worker if dep.source_url.endswith('.git'): 648*6dbdd20aSAndroid Build Coastguard Worker continue 649*6dbdd20aSAndroid Build Coastguard Worker logging.info('Downloading %s for %s-%s', dep.source_url, dep.target_os, 650*6dbdd20aSAndroid Build Coastguard Worker dep.target_arch) 651*6dbdd20aSAndroid Build Coastguard Worker with tempfile.NamedTemporaryFile(delete=False) as f: 652*6dbdd20aSAndroid Build Coastguard Worker f.close() 653*6dbdd20aSAndroid Build Coastguard Worker DownloadURL(dep.source_url, f.name) 654*6dbdd20aSAndroid Build Coastguard Worker actual_checksum = HashLocalFile(f.name) 655*6dbdd20aSAndroid Build Coastguard Worker os.unlink(f.name) 656*6dbdd20aSAndroid Build Coastguard Worker if (actual_checksum != dep.checksum): 657*6dbdd20aSAndroid Build Coastguard Worker logging.fatal('SHA-256 mismatch for {} expected {} was {}'.format( 658*6dbdd20aSAndroid Build Coastguard Worker dep.source_url, dep.checksum, actual_checksum)) 659*6dbdd20aSAndroid Build Coastguard Worker 660*6dbdd20aSAndroid Build Coastguard Worker 661*6dbdd20aSAndroid Build Coastguard Workerdef CheckDepotToolsIsRecent(): 662*6dbdd20aSAndroid Build Coastguard Worker gn_py_path = shutil.which('gn.py') 663*6dbdd20aSAndroid Build Coastguard Worker if gn_py_path is None: 664*6dbdd20aSAndroid Build Coastguard Worker return True # depot_tools doesn't seem to be installed in the PATH. 665*6dbdd20aSAndroid Build Coastguard Worker dt_dir = os.path.abspath(os.path.dirname(gn_py_path)) 666*6dbdd20aSAndroid Build Coastguard Worker cmd = ['git', '-C', dt_dir, 'merge-base', '--is-ancestor', 'a0cf4321', 'HEAD'] 667*6dbdd20aSAndroid Build Coastguard Worker git_ret = subprocess.call(cmd, stderr=subprocess.DEVNULL) 668*6dbdd20aSAndroid Build Coastguard Worker if git_ret == 0: 669*6dbdd20aSAndroid Build Coastguard Worker return True 670*6dbdd20aSAndroid Build Coastguard Worker print('\033[91mYour depot_tools revision is too old. Please run:\033[0m') 671*6dbdd20aSAndroid Build Coastguard Worker print('git -C %s fetch origin && git -C %s checkout -B main -t origin/main' % 672*6dbdd20aSAndroid Build Coastguard Worker (dt_dir, dt_dir)) 673*6dbdd20aSAndroid Build Coastguard Worker return False 674*6dbdd20aSAndroid Build Coastguard Worker 675*6dbdd20aSAndroid Build Coastguard Worker 676*6dbdd20aSAndroid Build Coastguard Workerdef Main(): 677*6dbdd20aSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 678*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 679*6dbdd20aSAndroid Build Coastguard Worker '--android', 680*6dbdd20aSAndroid Build Coastguard Worker action='store_true', 681*6dbdd20aSAndroid Build Coastguard Worker help='NDK and emulator images target_os="android"') 682*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 683*6dbdd20aSAndroid Build Coastguard Worker '--linux-arm', 684*6dbdd20aSAndroid Build Coastguard Worker action='store_true', 685*6dbdd20aSAndroid Build Coastguard Worker help='Debian sysroots for target_os="linux" target_cpu="arm|arm64"') 686*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 687*6dbdd20aSAndroid Build Coastguard Worker '--ui', 688*6dbdd20aSAndroid Build Coastguard Worker action='store_true', 689*6dbdd20aSAndroid Build Coastguard Worker help='Node and NPM packages to Build the Web-based UI via ./ui/build') 690*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 691*6dbdd20aSAndroid Build Coastguard Worker '--grpc', action='store_true', help='Packages to build gRPC') 692*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument('--check-only') 693*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument('--filter', action='append') 694*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument('--verify', help='Check all URLs', action='store_true') 695*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 696*6dbdd20aSAndroid Build Coastguard Worker '--no-toolchain', help='Do not download toolchain', action='store_true') 697*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 698*6dbdd20aSAndroid Build Coastguard Worker '--build-os', 699*6dbdd20aSAndroid Build Coastguard Worker default=system().lower(), 700*6dbdd20aSAndroid Build Coastguard Worker choices=['windows', 'darwin', 'linux'], 701*6dbdd20aSAndroid Build Coastguard Worker help='Override the autodetected build operating system') 702*6dbdd20aSAndroid Build Coastguard Worker parser.add_argument( 703*6dbdd20aSAndroid Build Coastguard Worker '--build-arch', 704*6dbdd20aSAndroid Build Coastguard Worker default=GetArch(), 705*6dbdd20aSAndroid Build Coastguard Worker choices=['arm64', 'x64'], 706*6dbdd20aSAndroid Build Coastguard Worker help='Override the autodetected build CPU architecture') 707*6dbdd20aSAndroid Build Coastguard Worker args = parser.parse_args() 708*6dbdd20aSAndroid Build Coastguard Worker if args.verify: 709*6dbdd20aSAndroid Build Coastguard Worker CheckHashes() 710*6dbdd20aSAndroid Build Coastguard Worker return 0 711*6dbdd20aSAndroid Build Coastguard Worker 712*6dbdd20aSAndroid Build Coastguard Worker target_os = args.build_os 713*6dbdd20aSAndroid Build Coastguard Worker if args.ui and target_os == 'windows': 714*6dbdd20aSAndroid Build Coastguard Worker print('Building the UI on Windows is unsupported') 715*6dbdd20aSAndroid Build Coastguard Worker return 1 716*6dbdd20aSAndroid Build Coastguard Worker 717*6dbdd20aSAndroid Build Coastguard Worker if not CheckDepotToolsIsRecent(): 718*6dbdd20aSAndroid Build Coastguard Worker return 1 719*6dbdd20aSAndroid Build Coastguard Worker 720*6dbdd20aSAndroid Build Coastguard Worker deps = BUILD_DEPS_HOST 721*6dbdd20aSAndroid Build Coastguard Worker if not args.no_toolchain: 722*6dbdd20aSAndroid Build Coastguard Worker deps += BUILD_DEPS_TOOLCHAIN_HOST 723*6dbdd20aSAndroid Build Coastguard Worker if args.android: 724*6dbdd20aSAndroid Build Coastguard Worker deps += BUILD_DEPS_ANDROID + TEST_DEPS_ANDROID 725*6dbdd20aSAndroid Build Coastguard Worker if args.linux_arm: 726*6dbdd20aSAndroid Build Coastguard Worker deps += BUILD_DEPS_LINUX_CROSS_SYSROOTS 727*6dbdd20aSAndroid Build Coastguard Worker if args.ui: 728*6dbdd20aSAndroid Build Coastguard Worker deps += UI_DEPS 729*6dbdd20aSAndroid Build Coastguard Worker # TODO(b/360084012) Change the arg name to bigtrace 730*6dbdd20aSAndroid Build Coastguard Worker if args.grpc: 731*6dbdd20aSAndroid Build Coastguard Worker deps += BIGTRACE_DEPS 732*6dbdd20aSAndroid Build Coastguard Worker deps_updated = False 733*6dbdd20aSAndroid Build Coastguard Worker nodejs_updated = False 734*6dbdd20aSAndroid Build Coastguard Worker 735*6dbdd20aSAndroid Build Coastguard Worker for old_dir in CLEANUP_OLD_DIRS: 736*6dbdd20aSAndroid Build Coastguard Worker RmtreeIfExists(os.path.join(ROOT_DIR, old_dir)) 737*6dbdd20aSAndroid Build Coastguard Worker 738*6dbdd20aSAndroid Build Coastguard Worker for dep in deps: 739*6dbdd20aSAndroid Build Coastguard Worker target_arch = args.build_arch 740*6dbdd20aSAndroid Build Coastguard Worker matches_os = dep.target_os == 'all' or target_os == dep.target_os 741*6dbdd20aSAndroid Build Coastguard Worker matches_arch = dep.target_arch == 'all' or target_arch == dep.target_arch 742*6dbdd20aSAndroid Build Coastguard Worker if not matches_os or not matches_arch: 743*6dbdd20aSAndroid Build Coastguard Worker continue 744*6dbdd20aSAndroid Build Coastguard Worker if args.filter and not any(f in dep.target_folder for f in args.filter): 745*6dbdd20aSAndroid Build Coastguard Worker continue 746*6dbdd20aSAndroid Build Coastguard Worker local_path = os.path.join(ROOT_DIR, dep.target_folder) 747*6dbdd20aSAndroid Build Coastguard Worker if dep.source_url.endswith('.git'): 748*6dbdd20aSAndroid Build Coastguard Worker deps_updated |= CheckoutGitRepo(local_path, dep.source_url, dep.checksum, 749*6dbdd20aSAndroid Build Coastguard Worker args.check_only) 750*6dbdd20aSAndroid Build Coastguard Worker continue 751*6dbdd20aSAndroid Build Coastguard Worker is_compressed = any([local_path.endswith(ext) for ext in ['.zip', '.tgz', '.tbz2']]) 752*6dbdd20aSAndroid Build Coastguard Worker compressed_target_dir = os.path.splitext(local_path)[0] if is_compressed else None 753*6dbdd20aSAndroid Build Coastguard Worker compressed_dir_stamp = os.path.join(compressed_target_dir, '.stamp') if is_compressed else None 754*6dbdd20aSAndroid Build Coastguard Worker 755*6dbdd20aSAndroid Build Coastguard Worker if ((not is_compressed and HashLocalFile(local_path) == dep.checksum) or 756*6dbdd20aSAndroid Build Coastguard Worker (is_compressed and ReadFile(compressed_dir_stamp) == dep.checksum)): 757*6dbdd20aSAndroid Build Coastguard Worker continue 758*6dbdd20aSAndroid Build Coastguard Worker deps_updated = True 759*6dbdd20aSAndroid Build Coastguard Worker if args.check_only: 760*6dbdd20aSAndroid Build Coastguard Worker continue 761*6dbdd20aSAndroid Build Coastguard Worker MkdirRecursive(os.path.dirname(dep.target_folder)) 762*6dbdd20aSAndroid Build Coastguard Worker if HashLocalFile(local_path) != dep.checksum: 763*6dbdd20aSAndroid Build Coastguard Worker download_path = local_path + '.tmp' 764*6dbdd20aSAndroid Build Coastguard Worker logging.info('Downloading %s from %s', local_path, dep.source_url) 765*6dbdd20aSAndroid Build Coastguard Worker DownloadURL(dep.source_url, download_path) 766*6dbdd20aSAndroid Build Coastguard Worker os.chmod(download_path, 0o755) 767*6dbdd20aSAndroid Build Coastguard Worker actual_checksum = HashLocalFile(download_path) 768*6dbdd20aSAndroid Build Coastguard Worker if (actual_checksum != dep.checksum): 769*6dbdd20aSAndroid Build Coastguard Worker os.remove(download_path) 770*6dbdd20aSAndroid Build Coastguard Worker logging.fatal('SHA-256 mismatch for {} expected {} was {}'.format( 771*6dbdd20aSAndroid Build Coastguard Worker download_path, dep.checksum, actual_checksum)) 772*6dbdd20aSAndroid Build Coastguard Worker return 1 773*6dbdd20aSAndroid Build Coastguard Worker shutil.move(download_path, local_path) 774*6dbdd20aSAndroid Build Coastguard Worker if 'nodejs' in dep.target_folder: 775*6dbdd20aSAndroid Build Coastguard Worker nodejs_updated = True 776*6dbdd20aSAndroid Build Coastguard Worker 777*6dbdd20aSAndroid Build Coastguard Worker assert (HashLocalFile(local_path) == dep.checksum) 778*6dbdd20aSAndroid Build Coastguard Worker 779*6dbdd20aSAndroid Build Coastguard Worker if is_compressed: 780*6dbdd20aSAndroid Build Coastguard Worker logging.info('Extracting %s into %s' % (local_path, compressed_target_dir)) 781*6dbdd20aSAndroid Build Coastguard Worker assert (os.path.commonprefix((ROOT_DIR, compressed_target_dir)) == ROOT_DIR) 782*6dbdd20aSAndroid Build Coastguard Worker RmtreeIfExists(compressed_target_dir) 783*6dbdd20aSAndroid Build Coastguard Worker 784*6dbdd20aSAndroid Build Coastguard Worker # Decompress the archive. 785*6dbdd20aSAndroid Build Coastguard Worker if local_path.endswith('.tgz'): 786*6dbdd20aSAndroid Build Coastguard Worker MkdirRecursive(compressed_target_dir) 787*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(['tar', '-oxf', local_path], cwd=compressed_target_dir) 788*6dbdd20aSAndroid Build Coastguard Worker elif local_path.endswith('.zip'): 789*6dbdd20aSAndroid Build Coastguard Worker with zipfile.ZipFile(local_path, 'r') as zf: 790*6dbdd20aSAndroid Build Coastguard Worker for info in zf.infolist(): 791*6dbdd20aSAndroid Build Coastguard Worker ExtractZipfilePreservePermissions(zf, info, compressed_target_dir) 792*6dbdd20aSAndroid Build Coastguard Worker elif local_path.endswith('.tbz2'): 793*6dbdd20aSAndroid Build Coastguard Worker tar_path = '{}.tar.tmp'.format(local_path) 794*6dbdd20aSAndroid Build Coastguard Worker with open(tar_path, 'w') as f: 795*6dbdd20aSAndroid Build Coastguard Worker with bz2.open(local_path, 'r') as bf: 796*6dbdd20aSAndroid Build Coastguard Worker f.write(bf.read()) 797*6dbdd20aSAndroid Build Coastguard Worker MkdirRecursive(compressed_target_dir) 798*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(['tar', '-oxf', tar_path], cwd=compressed_target_dir) 799*6dbdd20aSAndroid Build Coastguard Worker 800*6dbdd20aSAndroid Build Coastguard Worker # If the zip contains one root folder, rebase one level up moving all 801*6dbdd20aSAndroid Build Coastguard Worker # its sub files and folders inside |target_dir|. 802*6dbdd20aSAndroid Build Coastguard Worker subdir = os.listdir(compressed_target_dir) 803*6dbdd20aSAndroid Build Coastguard Worker if len(subdir) == 1: 804*6dbdd20aSAndroid Build Coastguard Worker subdir = os.path.join(compressed_target_dir, subdir[0]) 805*6dbdd20aSAndroid Build Coastguard Worker if os.path.isdir(subdir): 806*6dbdd20aSAndroid Build Coastguard Worker for subf in os.listdir(subdir): 807*6dbdd20aSAndroid Build Coastguard Worker shutil.move(os.path.join(subdir, subf), compressed_target_dir) 808*6dbdd20aSAndroid Build Coastguard Worker os.rmdir(subdir) 809*6dbdd20aSAndroid Build Coastguard Worker 810*6dbdd20aSAndroid Build Coastguard Worker # Create stamp and remove the archive. 811*6dbdd20aSAndroid Build Coastguard Worker with open(compressed_dir_stamp, 'w') as stamp_file: 812*6dbdd20aSAndroid Build Coastguard Worker stamp_file.write(dep.checksum) 813*6dbdd20aSAndroid Build Coastguard Worker os.remove(local_path) 814*6dbdd20aSAndroid Build Coastguard Worker 815*6dbdd20aSAndroid Build Coastguard Worker if args.ui: 816*6dbdd20aSAndroid Build Coastguard Worker # Needs to happen after nodejs is installed above. 817*6dbdd20aSAndroid Build Coastguard Worker if args.check_only: 818*6dbdd20aSAndroid Build Coastguard Worker deps_updated |= not CheckNodeModules() 819*6dbdd20aSAndroid Build Coastguard Worker else: 820*6dbdd20aSAndroid Build Coastguard Worker InstallNodeModules(force_clean=nodejs_updated) 821*6dbdd20aSAndroid Build Coastguard Worker 822*6dbdd20aSAndroid Build Coastguard Worker cur_python_interpreter = sys.executable 823*6dbdd20aSAndroid Build Coastguard Worker test_data_synced = 0 == subprocess.call([ 824*6dbdd20aSAndroid Build Coastguard Worker cur_python_interpreter, TEST_DATA_SCRIPT, 'status', '--quiet', 825*6dbdd20aSAndroid Build Coastguard Worker '--ignore-new' 826*6dbdd20aSAndroid Build Coastguard Worker ]) 827*6dbdd20aSAndroid Build Coastguard Worker if args.check_only: 828*6dbdd20aSAndroid Build Coastguard Worker if not deps_updated and test_data_synced: 829*6dbdd20aSAndroid Build Coastguard Worker with open(args.check_only, 'w') as f: 830*6dbdd20aSAndroid Build Coastguard Worker f.write('OK') # The content is irrelevant, just keep GN happy. 831*6dbdd20aSAndroid Build Coastguard Worker return 0 832*6dbdd20aSAndroid Build Coastguard Worker argz = ' '.join( 833*6dbdd20aSAndroid Build Coastguard Worker [x for x in sys.argv[1:] if not x.startswith('--check-only')]) 834*6dbdd20aSAndroid Build Coastguard Worker print('\033[91mBuild deps are stale. ' + 835*6dbdd20aSAndroid Build Coastguard Worker 'Please run tools/install-build-deps %s\033[0m' % argz) 836*6dbdd20aSAndroid Build Coastguard Worker if not test_data_synced: 837*6dbdd20aSAndroid Build Coastguard Worker print('//test/data/ is out of sync. `tools/test_data status` for details') 838*6dbdd20aSAndroid Build Coastguard Worker return 1 839*6dbdd20aSAndroid Build Coastguard Worker 840*6dbdd20aSAndroid Build Coastguard Worker if not test_data_synced: 841*6dbdd20aSAndroid Build Coastguard Worker cmd = [cur_python_interpreter, TEST_DATA_SCRIPT, 'download', '--overwrite'] 842*6dbdd20aSAndroid Build Coastguard Worker if not sys.stdout.isatty(): 843*6dbdd20aSAndroid Build Coastguard Worker cmd += ['--verbose'] # For CI bots 844*6dbdd20aSAndroid Build Coastguard Worker subprocess.check_call(cmd) 845*6dbdd20aSAndroid Build Coastguard Worker 846*6dbdd20aSAndroid Build Coastguard Worker if deps_updated: 847*6dbdd20aSAndroid Build Coastguard Worker # Stale binary files may be compiled against old sysroot headers that aren't 848*6dbdd20aSAndroid Build Coastguard Worker # tracked by gn. 849*6dbdd20aSAndroid Build Coastguard Worker logging.warning('Remember to run "gn clean <output_directory>" ' + 850*6dbdd20aSAndroid Build Coastguard Worker 'to avoid stale binary files.') 851*6dbdd20aSAndroid Build Coastguard Worker 852*6dbdd20aSAndroid Build Coastguard Worker 853*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__': 854*6dbdd20aSAndroid Build Coastguard Worker logging.basicConfig(level=logging.INFO) 855*6dbdd20aSAndroid Build Coastguard Worker sys.exit(Main()) 856