1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6777b538SAndroid Build Coastguard Worker 3*6777b538SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors 4*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# Script to install everything needed to build chromium 8*6777b538SAndroid Build Coastguard Worker# including items requiring sudo privileges. 9*6777b538SAndroid Build Coastguard Worker# See https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Workerimport argparse 12*6777b538SAndroid Build Coastguard Workerimport functools 13*6777b538SAndroid Build Coastguard Workerimport os 14*6777b538SAndroid Build Coastguard Workerimport re 15*6777b538SAndroid Build Coastguard Workerimport shutil 16*6777b538SAndroid Build Coastguard Workerimport subprocess 17*6777b538SAndroid Build Coastguard Workerimport sys 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker@functools.lru_cache(maxsize=1) 21*6777b538SAndroid Build Coastguard Workerdef build_apt_package_list(): 22*6777b538SAndroid Build Coastguard Worker print("Building apt package list.", file=sys.stderr) 23*6777b538SAndroid Build Coastguard Worker output = subprocess.check_output(["apt-cache", "dumpavail"]).decode() 24*6777b538SAndroid Build Coastguard Worker arch_map = {"i386": ":i386"} 25*6777b538SAndroid Build Coastguard Worker package_regex = re.compile(r"^Package: (.+?)$.+?^Architecture: (.+?)$", 26*6777b538SAndroid Build Coastguard Worker re.M | re.S) 27*6777b538SAndroid Build Coastguard Worker return set(package + arch_map.get(arch, "") 28*6777b538SAndroid Build Coastguard Worker for package, arch in re.findall(package_regex, output)) 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Workerdef package_exists(package_name: str) -> bool: 32*6777b538SAndroid Build Coastguard Worker return package_name in build_apt_package_list() 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Workerdef parse_args(argv): 36*6777b538SAndroid Build Coastguard Worker parser = argparse.ArgumentParser( 37*6777b538SAndroid Build Coastguard Worker description="Install Chromium build dependencies.") 38*6777b538SAndroid Build Coastguard Worker parser.add_argument("--syms", 39*6777b538SAndroid Build Coastguard Worker action="store_true", 40*6777b538SAndroid Build Coastguard Worker help="Enable installation of debugging symbols") 41*6777b538SAndroid Build Coastguard Worker parser.add_argument( 42*6777b538SAndroid Build Coastguard Worker "--no-syms", 43*6777b538SAndroid Build Coastguard Worker action="store_false", 44*6777b538SAndroid Build Coastguard Worker dest="syms", 45*6777b538SAndroid Build Coastguard Worker help="Disable installation of debugging symbols", 46*6777b538SAndroid Build Coastguard Worker ) 47*6777b538SAndroid Build Coastguard Worker parser.add_argument( 48*6777b538SAndroid Build Coastguard Worker "--lib32", 49*6777b538SAndroid Build Coastguard Worker action="store_true", 50*6777b538SAndroid Build Coastguard Worker help="Enable installation of 32-bit libraries, e.g. for V8 snapshot", 51*6777b538SAndroid Build Coastguard Worker ) 52*6777b538SAndroid Build Coastguard Worker parser.add_argument( 53*6777b538SAndroid Build Coastguard Worker "--android", 54*6777b538SAndroid Build Coastguard Worker action="store_true", 55*6777b538SAndroid Build Coastguard Worker help="Enable installation of android dependencies", 56*6777b538SAndroid Build Coastguard Worker ) 57*6777b538SAndroid Build Coastguard Worker parser.add_argument( 58*6777b538SAndroid Build Coastguard Worker "--no-android", 59*6777b538SAndroid Build Coastguard Worker action="store_false", 60*6777b538SAndroid Build Coastguard Worker dest="android", 61*6777b538SAndroid Build Coastguard Worker help="Disable installation of android dependencies", 62*6777b538SAndroid Build Coastguard Worker ) 63*6777b538SAndroid Build Coastguard Worker parser.add_argument("--arm", 64*6777b538SAndroid Build Coastguard Worker action="store_true", 65*6777b538SAndroid Build Coastguard Worker help="Enable installation of arm cross toolchain") 66*6777b538SAndroid Build Coastguard Worker parser.add_argument( 67*6777b538SAndroid Build Coastguard Worker "--no-arm", 68*6777b538SAndroid Build Coastguard Worker action="store_false", 69*6777b538SAndroid Build Coastguard Worker dest="arm", 70*6777b538SAndroid Build Coastguard Worker help="Disable installation of arm cross toolchain", 71*6777b538SAndroid Build Coastguard Worker ) 72*6777b538SAndroid Build Coastguard Worker parser.add_argument( 73*6777b538SAndroid Build Coastguard Worker "--chromeos-fonts", 74*6777b538SAndroid Build Coastguard Worker action="store_true", 75*6777b538SAndroid Build Coastguard Worker help="Enable installation of Chrome OS fonts", 76*6777b538SAndroid Build Coastguard Worker ) 77*6777b538SAndroid Build Coastguard Worker parser.add_argument( 78*6777b538SAndroid Build Coastguard Worker "--no-chromeos-fonts", 79*6777b538SAndroid Build Coastguard Worker action="store_false", 80*6777b538SAndroid Build Coastguard Worker dest="chromeos_fonts", 81*6777b538SAndroid Build Coastguard Worker help="Disable installation of Chrome OS fonts", 82*6777b538SAndroid Build Coastguard Worker ) 83*6777b538SAndroid Build Coastguard Worker parser.add_argument( 84*6777b538SAndroid Build Coastguard Worker "--nacl", 85*6777b538SAndroid Build Coastguard Worker action="store_true", 86*6777b538SAndroid Build Coastguard Worker help="Enable installation of prerequisites for building NaCl", 87*6777b538SAndroid Build Coastguard Worker ) 88*6777b538SAndroid Build Coastguard Worker parser.add_argument( 89*6777b538SAndroid Build Coastguard Worker "--no-nacl", 90*6777b538SAndroid Build Coastguard Worker action="store_false", 91*6777b538SAndroid Build Coastguard Worker dest="nacl", 92*6777b538SAndroid Build Coastguard Worker help="Disable installation of prerequisites for building NaCl", 93*6777b538SAndroid Build Coastguard Worker ) 94*6777b538SAndroid Build Coastguard Worker parser.add_argument( 95*6777b538SAndroid Build Coastguard Worker "--backwards-compatible", 96*6777b538SAndroid Build Coastguard Worker action="store_true", 97*6777b538SAndroid Build Coastguard Worker help= 98*6777b538SAndroid Build Coastguard Worker "Enable installation of packages that are no longer currently needed and" 99*6777b538SAndroid Build Coastguard Worker + "have been removed from this script. Useful for bisection.", 100*6777b538SAndroid Build Coastguard Worker ) 101*6777b538SAndroid Build Coastguard Worker parser.add_argument( 102*6777b538SAndroid Build Coastguard Worker "--no-backwards-compatible", 103*6777b538SAndroid Build Coastguard Worker action="store_false", 104*6777b538SAndroid Build Coastguard Worker dest="backwards_compatible", 105*6777b538SAndroid Build Coastguard Worker help= 106*6777b538SAndroid Build Coastguard Worker "Disable installation of packages that are no longer currently needed and" 107*6777b538SAndroid Build Coastguard Worker + "have been removed from this script.", 108*6777b538SAndroid Build Coastguard Worker ) 109*6777b538SAndroid Build Coastguard Worker parser.add_argument("--no-prompt", 110*6777b538SAndroid Build Coastguard Worker action="store_true", 111*6777b538SAndroid Build Coastguard Worker help="Automatic yes to prompts") 112*6777b538SAndroid Build Coastguard Worker parser.add_argument( 113*6777b538SAndroid Build Coastguard Worker "--quick-check", 114*6777b538SAndroid Build Coastguard Worker action="store_true", 115*6777b538SAndroid Build Coastguard Worker help="Quickly try to determine if dependencies are installed", 116*6777b538SAndroid Build Coastguard Worker ) 117*6777b538SAndroid Build Coastguard Worker parser.add_argument( 118*6777b538SAndroid Build Coastguard Worker "--unsupported", 119*6777b538SAndroid Build Coastguard Worker action="store_true", 120*6777b538SAndroid Build Coastguard Worker help="Attempt installation even on unsupported systems", 121*6777b538SAndroid Build Coastguard Worker ) 122*6777b538SAndroid Build Coastguard Worker 123*6777b538SAndroid Build Coastguard Worker options = parser.parse_args(argv) 124*6777b538SAndroid Build Coastguard Worker 125*6777b538SAndroid Build Coastguard Worker if options.arm or options.android: 126*6777b538SAndroid Build Coastguard Worker options.lib32 = True 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard Worker return options 129*6777b538SAndroid Build Coastguard Worker 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Workerdef check_lsb_release(): 132*6777b538SAndroid Build Coastguard Worker if not shutil.which("lsb_release"): 133*6777b538SAndroid Build Coastguard Worker print("ERROR: lsb_release not found in $PATH", file=sys.stderr) 134*6777b538SAndroid Build Coastguard Worker print("try: sudo apt-get install lsb-release", file=sys.stderr) 135*6777b538SAndroid Build Coastguard Worker sys.exit(1) 136*6777b538SAndroid Build Coastguard Worker 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker@functools.lru_cache(maxsize=1) 139*6777b538SAndroid Build Coastguard Workerdef distro_codename(): 140*6777b538SAndroid Build Coastguard Worker return subprocess.check_output(["lsb_release", "--codename", 141*6777b538SAndroid Build Coastguard Worker "--short"]).decode().strip() 142*6777b538SAndroid Build Coastguard Worker 143*6777b538SAndroid Build Coastguard Worker 144*6777b538SAndroid Build Coastguard Workerdef check_distro(options): 145*6777b538SAndroid Build Coastguard Worker if options.unsupported or options.quick_check: 146*6777b538SAndroid Build Coastguard Worker return 147*6777b538SAndroid Build Coastguard Worker 148*6777b538SAndroid Build Coastguard Worker distro_id = subprocess.check_output(["lsb_release", "--id", 149*6777b538SAndroid Build Coastguard Worker "--short"]).decode().strip() 150*6777b538SAndroid Build Coastguard Worker 151*6777b538SAndroid Build Coastguard Worker supported_codenames = ["bionic", "focal", "jammy", "noble"] 152*6777b538SAndroid Build Coastguard Worker supported_ids = ["Debian"] 153*6777b538SAndroid Build Coastguard Worker 154*6777b538SAndroid Build Coastguard Worker if (distro_codename() not in supported_codenames 155*6777b538SAndroid Build Coastguard Worker and distro_id not in supported_ids): 156*6777b538SAndroid Build Coastguard Worker print( 157*6777b538SAndroid Build Coastguard Worker "WARNING: The following distributions are supported,", 158*6777b538SAndroid Build Coastguard Worker "but distributions not in the list below can also try to install", 159*6777b538SAndroid Build Coastguard Worker "dependencies by passing the `--unsupported` parameter", 160*6777b538SAndroid Build Coastguard Worker "\tUbuntu 18.04 LTS (bionic with EoL April 2028)", 161*6777b538SAndroid Build Coastguard Worker "\tUbuntu 20.04 LTS (focal with EoL April 2030)", 162*6777b538SAndroid Build Coastguard Worker "\tUbuntu 22.04 LTS (jammy with EoL April 2032)", 163*6777b538SAndroid Build Coastguard Worker "\tUbuntu 24.04 LTS (noble with EoL June 2029)", 164*6777b538SAndroid Build Coastguard Worker "\tDebian 10 (buster) or later", 165*6777b538SAndroid Build Coastguard Worker sep="\n", 166*6777b538SAndroid Build Coastguard Worker file=sys.stderr, 167*6777b538SAndroid Build Coastguard Worker ) 168*6777b538SAndroid Build Coastguard Worker sys.exit(1) 169*6777b538SAndroid Build Coastguard Worker 170*6777b538SAndroid Build Coastguard Worker 171*6777b538SAndroid Build Coastguard Workerdef check_architecture(): 172*6777b538SAndroid Build Coastguard Worker architecture = subprocess.check_output(["uname", "-m"]).decode().strip() 173*6777b538SAndroid Build Coastguard Worker if architecture not in ["i686", "x86_64", 'aarch64']: 174*6777b538SAndroid Build Coastguard Worker print("Only x86 and ARM64 architectures are currently supported", 175*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 176*6777b538SAndroid Build Coastguard Worker sys.exit(1) 177*6777b538SAndroid Build Coastguard Worker 178*6777b538SAndroid Build Coastguard Worker 179*6777b538SAndroid Build Coastguard Workerdef check_root(): 180*6777b538SAndroid Build Coastguard Worker if os.geteuid() != 0: 181*6777b538SAndroid Build Coastguard Worker print("Running as non-root user.", file=sys.stderr) 182*6777b538SAndroid Build Coastguard Worker print("You might have to enter your password one or more times for 'sudo'.", 183*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 184*6777b538SAndroid Build Coastguard Worker print(file=sys.stderr) 185*6777b538SAndroid Build Coastguard Worker 186*6777b538SAndroid Build Coastguard Worker 187*6777b538SAndroid Build Coastguard Workerdef apt_update(options): 188*6777b538SAndroid Build Coastguard Worker if options.lib32 or options.nacl: 189*6777b538SAndroid Build Coastguard Worker subprocess.check_call(["sudo", "dpkg", "--add-architecture", "i386"]) 190*6777b538SAndroid Build Coastguard Worker subprocess.check_call(["sudo", "apt-get", "update"]) 191*6777b538SAndroid Build Coastguard Worker 192*6777b538SAndroid Build Coastguard Worker 193*6777b538SAndroid Build Coastguard Worker# Packages needed for development 194*6777b538SAndroid Build Coastguard Workerdef dev_list(): 195*6777b538SAndroid Build Coastguard Worker packages = [ 196*6777b538SAndroid Build Coastguard Worker "binutils", 197*6777b538SAndroid Build Coastguard Worker "bison", 198*6777b538SAndroid Build Coastguard Worker "bzip2", 199*6777b538SAndroid Build Coastguard Worker "cdbs", 200*6777b538SAndroid Build Coastguard Worker "curl", 201*6777b538SAndroid Build Coastguard Worker "dbus-x11", 202*6777b538SAndroid Build Coastguard Worker "devscripts", 203*6777b538SAndroid Build Coastguard Worker "dpkg-dev", 204*6777b538SAndroid Build Coastguard Worker "elfutils", 205*6777b538SAndroid Build Coastguard Worker "fakeroot", 206*6777b538SAndroid Build Coastguard Worker "flex", 207*6777b538SAndroid Build Coastguard Worker "git-core", 208*6777b538SAndroid Build Coastguard Worker "gperf", 209*6777b538SAndroid Build Coastguard Worker "libasound2-dev", 210*6777b538SAndroid Build Coastguard Worker "libatspi2.0-dev", 211*6777b538SAndroid Build Coastguard Worker "libbrlapi-dev", 212*6777b538SAndroid Build Coastguard Worker "libbz2-dev", 213*6777b538SAndroid Build Coastguard Worker "libc6-dev", 214*6777b538SAndroid Build Coastguard Worker "libcairo2-dev", 215*6777b538SAndroid Build Coastguard Worker "libcap-dev", 216*6777b538SAndroid Build Coastguard Worker "libcups2-dev", 217*6777b538SAndroid Build Coastguard Worker "libcurl4-gnutls-dev", 218*6777b538SAndroid Build Coastguard Worker "libdrm-dev", 219*6777b538SAndroid Build Coastguard Worker "libelf-dev", 220*6777b538SAndroid Build Coastguard Worker "libevdev-dev", 221*6777b538SAndroid Build Coastguard Worker "libffi-dev", 222*6777b538SAndroid Build Coastguard Worker "libfuse2", 223*6777b538SAndroid Build Coastguard Worker "libgbm-dev", 224*6777b538SAndroid Build Coastguard Worker "libglib2.0-dev", 225*6777b538SAndroid Build Coastguard Worker "libglu1-mesa-dev", 226*6777b538SAndroid Build Coastguard Worker "libgtk-3-dev", 227*6777b538SAndroid Build Coastguard Worker "libkrb5-dev", 228*6777b538SAndroid Build Coastguard Worker "libnspr4-dev", 229*6777b538SAndroid Build Coastguard Worker "libnss3-dev", 230*6777b538SAndroid Build Coastguard Worker "libpam0g-dev", 231*6777b538SAndroid Build Coastguard Worker "libpci-dev", 232*6777b538SAndroid Build Coastguard Worker "libpulse-dev", 233*6777b538SAndroid Build Coastguard Worker "libsctp-dev", 234*6777b538SAndroid Build Coastguard Worker "libspeechd-dev", 235*6777b538SAndroid Build Coastguard Worker "libsqlite3-dev", 236*6777b538SAndroid Build Coastguard Worker "libssl-dev", 237*6777b538SAndroid Build Coastguard Worker "libsystemd-dev", 238*6777b538SAndroid Build Coastguard Worker "libudev-dev", 239*6777b538SAndroid Build Coastguard Worker "libva-dev", 240*6777b538SAndroid Build Coastguard Worker "libwww-perl", 241*6777b538SAndroid Build Coastguard Worker "libxshmfence-dev", 242*6777b538SAndroid Build Coastguard Worker "libxslt1-dev", 243*6777b538SAndroid Build Coastguard Worker "libxss-dev", 244*6777b538SAndroid Build Coastguard Worker "libxt-dev", 245*6777b538SAndroid Build Coastguard Worker "libxtst-dev", 246*6777b538SAndroid Build Coastguard Worker "lighttpd", 247*6777b538SAndroid Build Coastguard Worker "locales", 248*6777b538SAndroid Build Coastguard Worker "openbox", 249*6777b538SAndroid Build Coastguard Worker "p7zip", 250*6777b538SAndroid Build Coastguard Worker "patch", 251*6777b538SAndroid Build Coastguard Worker "perl", 252*6777b538SAndroid Build Coastguard Worker "pkg-config", 253*6777b538SAndroid Build Coastguard Worker "rpm", 254*6777b538SAndroid Build Coastguard Worker "ruby", 255*6777b538SAndroid Build Coastguard Worker "subversion", 256*6777b538SAndroid Build Coastguard Worker "uuid-dev", 257*6777b538SAndroid Build Coastguard Worker "wdiff", 258*6777b538SAndroid Build Coastguard Worker "x11-utils", 259*6777b538SAndroid Build Coastguard Worker "xcompmgr", 260*6777b538SAndroid Build Coastguard Worker "xz-utils", 261*6777b538SAndroid Build Coastguard Worker "zip", 262*6777b538SAndroid Build Coastguard Worker ] 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Worker # Packages needed for chromeos only 265*6777b538SAndroid Build Coastguard Worker packages += [ 266*6777b538SAndroid Build Coastguard Worker "libbluetooth-dev", 267*6777b538SAndroid Build Coastguard Worker "libxkbcommon-dev", 268*6777b538SAndroid Build Coastguard Worker "mesa-common-dev", 269*6777b538SAndroid Build Coastguard Worker "zstd", 270*6777b538SAndroid Build Coastguard Worker ] 271*6777b538SAndroid Build Coastguard Worker 272*6777b538SAndroid Build Coastguard Worker if package_exists("realpath"): 273*6777b538SAndroid Build Coastguard Worker packages.append("realpath") 274*6777b538SAndroid Build Coastguard Worker 275*6777b538SAndroid Build Coastguard Worker if package_exists("libjpeg-dev"): 276*6777b538SAndroid Build Coastguard Worker packages.append("libjpeg-dev") 277*6777b538SAndroid Build Coastguard Worker else: 278*6777b538SAndroid Build Coastguard Worker packages.append("libjpeg62-dev") 279*6777b538SAndroid Build Coastguard Worker 280*6777b538SAndroid Build Coastguard Worker if package_exists("libudev1"): 281*6777b538SAndroid Build Coastguard Worker packages.append("libudev1") 282*6777b538SAndroid Build Coastguard Worker else: 283*6777b538SAndroid Build Coastguard Worker packages.append("libudev0") 284*6777b538SAndroid Build Coastguard Worker 285*6777b538SAndroid Build Coastguard Worker if package_exists("libbrlapi0.8"): 286*6777b538SAndroid Build Coastguard Worker packages.append("libbrlapi0.8") 287*6777b538SAndroid Build Coastguard Worker elif package_exists("libbrlapi0.7"): 288*6777b538SAndroid Build Coastguard Worker packages.append("libbrlapi0.7") 289*6777b538SAndroid Build Coastguard Worker elif package_exists("libbrlapi0.6"): 290*6777b538SAndroid Build Coastguard Worker packages.append("libbrlapi0.6") 291*6777b538SAndroid Build Coastguard Worker else: 292*6777b538SAndroid Build Coastguard Worker packages.append("libbrlapi0.5") 293*6777b538SAndroid Build Coastguard Worker 294*6777b538SAndroid Build Coastguard Worker if package_exists("libav-tools"): 295*6777b538SAndroid Build Coastguard Worker packages.append("libav-tools") 296*6777b538SAndroid Build Coastguard Worker 297*6777b538SAndroid Build Coastguard Worker if package_exists("libvulkan-dev"): 298*6777b538SAndroid Build Coastguard Worker packages.append("libvulkan-dev") 299*6777b538SAndroid Build Coastguard Worker 300*6777b538SAndroid Build Coastguard Worker if package_exists("libinput-dev"): 301*6777b538SAndroid Build Coastguard Worker packages.append("libinput-dev") 302*6777b538SAndroid Build Coastguard Worker 303*6777b538SAndroid Build Coastguard Worker # Cross-toolchain strip is needed for building the sysroots. 304*6777b538SAndroid Build Coastguard Worker if package_exists("binutils-arm-linux-gnueabihf"): 305*6777b538SAndroid Build Coastguard Worker packages.append("binutils-arm-linux-gnueabihf") 306*6777b538SAndroid Build Coastguard Worker if package_exists("binutils-aarch64-linux-gnu"): 307*6777b538SAndroid Build Coastguard Worker packages.append("binutils-aarch64-linux-gnu") 308*6777b538SAndroid Build Coastguard Worker if package_exists("binutils-mipsel-linux-gnu"): 309*6777b538SAndroid Build Coastguard Worker packages.append("binutils-mipsel-linux-gnu") 310*6777b538SAndroid Build Coastguard Worker if package_exists("binutils-mips64el-linux-gnuabi64"): 311*6777b538SAndroid Build Coastguard Worker packages.append("binutils-mips64el-linux-gnuabi64") 312*6777b538SAndroid Build Coastguard Worker 313*6777b538SAndroid Build Coastguard Worker # 64-bit systems need a minimum set of 32-bit compat packages for the 314*6777b538SAndroid Build Coastguard Worker # pre-built NaCl binaries. 315*6777b538SAndroid Build Coastguard Worker if "ELF 64-bit" in subprocess.check_output(["file", "-L", 316*6777b538SAndroid Build Coastguard Worker "/sbin/init"]).decode(): 317*6777b538SAndroid Build Coastguard Worker # ARM64 may not support these. 318*6777b538SAndroid Build Coastguard Worker if package_exists("libc6-i386"): 319*6777b538SAndroid Build Coastguard Worker packages.append("libc6-i386") 320*6777b538SAndroid Build Coastguard Worker if package_exists("lib32stdc++6"): 321*6777b538SAndroid Build Coastguard Worker packages.append("lib32stdc++6") 322*6777b538SAndroid Build Coastguard Worker 323*6777b538SAndroid Build Coastguard Worker # lib32gcc-s1 used to be called lib32gcc1 in older distros. 324*6777b538SAndroid Build Coastguard Worker if package_exists("lib32gcc-s1"): 325*6777b538SAndroid Build Coastguard Worker packages.append("lib32gcc-s1") 326*6777b538SAndroid Build Coastguard Worker elif package_exists("lib32gcc1"): 327*6777b538SAndroid Build Coastguard Worker packages.append("lib32gcc1") 328*6777b538SAndroid Build Coastguard Worker 329*6777b538SAndroid Build Coastguard Worker return packages 330*6777b538SAndroid Build Coastguard Worker 331*6777b538SAndroid Build Coastguard Worker 332*6777b538SAndroid Build Coastguard Worker# List of required run-time libraries 333*6777b538SAndroid Build Coastguard Workerdef lib_list(): 334*6777b538SAndroid Build Coastguard Worker packages = [ 335*6777b538SAndroid Build Coastguard Worker "libasound2", 336*6777b538SAndroid Build Coastguard Worker "libatk1.0-0", 337*6777b538SAndroid Build Coastguard Worker "libatspi2.0-0", 338*6777b538SAndroid Build Coastguard Worker "libc6", 339*6777b538SAndroid Build Coastguard Worker "libcairo2", 340*6777b538SAndroid Build Coastguard Worker "libcap2", 341*6777b538SAndroid Build Coastguard Worker "libcgi-session-perl", 342*6777b538SAndroid Build Coastguard Worker "libcups2", 343*6777b538SAndroid Build Coastguard Worker "libdrm2", 344*6777b538SAndroid Build Coastguard Worker "libegl1", 345*6777b538SAndroid Build Coastguard Worker "libevdev2", 346*6777b538SAndroid Build Coastguard Worker "libexpat1", 347*6777b538SAndroid Build Coastguard Worker "libfontconfig1", 348*6777b538SAndroid Build Coastguard Worker "libfreetype6", 349*6777b538SAndroid Build Coastguard Worker "libgbm1", 350*6777b538SAndroid Build Coastguard Worker "libglib2.0-0", 351*6777b538SAndroid Build Coastguard Worker "libgl1", 352*6777b538SAndroid Build Coastguard Worker "libgtk-3-0", 353*6777b538SAndroid Build Coastguard Worker "libpam0g", 354*6777b538SAndroid Build Coastguard Worker "libpango-1.0-0", 355*6777b538SAndroid Build Coastguard Worker "libpangocairo-1.0-0", 356*6777b538SAndroid Build Coastguard Worker "libpci3", 357*6777b538SAndroid Build Coastguard Worker "libpcre3", 358*6777b538SAndroid Build Coastguard Worker "libpixman-1-0", 359*6777b538SAndroid Build Coastguard Worker "libspeechd2", 360*6777b538SAndroid Build Coastguard Worker "libstdc++6", 361*6777b538SAndroid Build Coastguard Worker "libsqlite3-0", 362*6777b538SAndroid Build Coastguard Worker "libuuid1", 363*6777b538SAndroid Build Coastguard Worker "libwayland-egl1", 364*6777b538SAndroid Build Coastguard Worker "libwayland-egl1-mesa", 365*6777b538SAndroid Build Coastguard Worker "libx11-6", 366*6777b538SAndroid Build Coastguard Worker "libx11-xcb1", 367*6777b538SAndroid Build Coastguard Worker "libxau6", 368*6777b538SAndroid Build Coastguard Worker "libxcb1", 369*6777b538SAndroid Build Coastguard Worker "libxcomposite1", 370*6777b538SAndroid Build Coastguard Worker "libxcursor1", 371*6777b538SAndroid Build Coastguard Worker "libxdamage1", 372*6777b538SAndroid Build Coastguard Worker "libxdmcp6", 373*6777b538SAndroid Build Coastguard Worker "libxext6", 374*6777b538SAndroid Build Coastguard Worker "libxfixes3", 375*6777b538SAndroid Build Coastguard Worker "libxi6", 376*6777b538SAndroid Build Coastguard Worker "libxinerama1", 377*6777b538SAndroid Build Coastguard Worker "libxrandr2", 378*6777b538SAndroid Build Coastguard Worker "libxrender1", 379*6777b538SAndroid Build Coastguard Worker "libxtst6", 380*6777b538SAndroid Build Coastguard Worker "x11-utils", 381*6777b538SAndroid Build Coastguard Worker "xserver-xorg-core", # TODO(crbug.com/1417069): Experimental. 382*6777b538SAndroid Build Coastguard Worker "xserver-xorg-video-dummy", # TODO(crbug.com/1417069): Experimental. 383*6777b538SAndroid Build Coastguard Worker "xvfb", 384*6777b538SAndroid Build Coastguard Worker "zlib1g", 385*6777b538SAndroid Build Coastguard Worker ] 386*6777b538SAndroid Build Coastguard Worker 387*6777b538SAndroid Build Coastguard Worker # Run-time libraries required by chromeos only 388*6777b538SAndroid Build Coastguard Worker packages += [ 389*6777b538SAndroid Build Coastguard Worker "libpulse0", 390*6777b538SAndroid Build Coastguard Worker "libbz2-1.0", 391*6777b538SAndroid Build Coastguard Worker ] 392*6777b538SAndroid Build Coastguard Worker 393*6777b538SAndroid Build Coastguard Worker # May not exist (e.g. ARM64) 394*6777b538SAndroid Build Coastguard Worker if package_exists("lib32z1"): 395*6777b538SAndroid Build Coastguard Worker packages.append("lib32z1") 396*6777b538SAndroid Build Coastguard Worker 397*6777b538SAndroid Build Coastguard Worker if package_exists("libffi8"): 398*6777b538SAndroid Build Coastguard Worker packages.append("libffi8") 399*6777b538SAndroid Build Coastguard Worker elif package_exists("libffi7"): 400*6777b538SAndroid Build Coastguard Worker packages.append("libffi7") 401*6777b538SAndroid Build Coastguard Worker elif package_exists("libffi6"): 402*6777b538SAndroid Build Coastguard Worker packages.append("libffi6") 403*6777b538SAndroid Build Coastguard Worker 404*6777b538SAndroid Build Coastguard Worker if package_exists("libpng16-16"): 405*6777b538SAndroid Build Coastguard Worker packages.append("libpng16-16") 406*6777b538SAndroid Build Coastguard Worker else: 407*6777b538SAndroid Build Coastguard Worker packages.append("libpng12-0") 408*6777b538SAndroid Build Coastguard Worker 409*6777b538SAndroid Build Coastguard Worker if package_exists("libnspr4"): 410*6777b538SAndroid Build Coastguard Worker packages.extend(["libnspr4", "libnss3"]) 411*6777b538SAndroid Build Coastguard Worker else: 412*6777b538SAndroid Build Coastguard Worker packages.extend(["libnspr4-0d", "libnss3-1d"]) 413*6777b538SAndroid Build Coastguard Worker 414*6777b538SAndroid Build Coastguard Worker if package_exists("appmenu-gtk"): 415*6777b538SAndroid Build Coastguard Worker packages.append("appmenu-gtk") 416*6777b538SAndroid Build Coastguard Worker if package_exists("libgnome-keyring0"): 417*6777b538SAndroid Build Coastguard Worker packages.append("libgnome-keyring0") 418*6777b538SAndroid Build Coastguard Worker if package_exists("libgnome-keyring-dev"): 419*6777b538SAndroid Build Coastguard Worker packages.append("libgnome-keyring-dev") 420*6777b538SAndroid Build Coastguard Worker if package_exists("libvulkan1"): 421*6777b538SAndroid Build Coastguard Worker packages.append("libvulkan1") 422*6777b538SAndroid Build Coastguard Worker if package_exists("libinput10"): 423*6777b538SAndroid Build Coastguard Worker packages.append("libinput10") 424*6777b538SAndroid Build Coastguard Worker 425*6777b538SAndroid Build Coastguard Worker # Work around for dependency On Ubuntu 24.04 LTS (noble) 426*6777b538SAndroid Build Coastguard Worker if distro_codename() == "noble": 427*6777b538SAndroid Build Coastguard Worker packages.append("libncurses6") 428*6777b538SAndroid Build Coastguard Worker else: 429*6777b538SAndroid Build Coastguard Worker packages.append("libncurses5") 430*6777b538SAndroid Build Coastguard Worker 431*6777b538SAndroid Build Coastguard Worker return packages 432*6777b538SAndroid Build Coastguard Worker 433*6777b538SAndroid Build Coastguard Worker 434*6777b538SAndroid Build Coastguard Workerdef lib32_list(options): 435*6777b538SAndroid Build Coastguard Worker if not options.lib32: 436*6777b538SAndroid Build Coastguard Worker print("Skipping 32-bit libraries.", file=sys.stderr) 437*6777b538SAndroid Build Coastguard Worker return [] 438*6777b538SAndroid Build Coastguard Worker print("Including 32-bit libraries.", file=sys.stderr) 439*6777b538SAndroid Build Coastguard Worker 440*6777b538SAndroid Build Coastguard Worker packages = [ 441*6777b538SAndroid Build Coastguard Worker # 32-bit libraries needed for a 32-bit build 442*6777b538SAndroid Build Coastguard Worker # includes some 32-bit libraries required by the Android SDK 443*6777b538SAndroid Build Coastguard Worker # See https://developer.android.com/sdk/installing/index.html?pkg=tools 444*6777b538SAndroid Build Coastguard Worker "libasound2:i386", 445*6777b538SAndroid Build Coastguard Worker "libatk-bridge2.0-0:i386", 446*6777b538SAndroid Build Coastguard Worker "libatk1.0-0:i386", 447*6777b538SAndroid Build Coastguard Worker "libatspi2.0-0:i386", 448*6777b538SAndroid Build Coastguard Worker "libdbus-1-3:i386", 449*6777b538SAndroid Build Coastguard Worker "libegl1:i386", 450*6777b538SAndroid Build Coastguard Worker "libgl1:i386", 451*6777b538SAndroid Build Coastguard Worker "libglib2.0-0:i386", 452*6777b538SAndroid Build Coastguard Worker "libnss3:i386", 453*6777b538SAndroid Build Coastguard Worker "libpango-1.0-0:i386", 454*6777b538SAndroid Build Coastguard Worker "libpangocairo-1.0-0:i386", 455*6777b538SAndroid Build Coastguard Worker "libstdc++6:i386", 456*6777b538SAndroid Build Coastguard Worker "libwayland-egl1:i386", 457*6777b538SAndroid Build Coastguard Worker "libx11-xcb1:i386", 458*6777b538SAndroid Build Coastguard Worker "libxcomposite1:i386", 459*6777b538SAndroid Build Coastguard Worker "libxdamage1:i386", 460*6777b538SAndroid Build Coastguard Worker "libxkbcommon0:i386", 461*6777b538SAndroid Build Coastguard Worker "libxrandr2:i386", 462*6777b538SAndroid Build Coastguard Worker "libxtst6:i386", 463*6777b538SAndroid Build Coastguard Worker "zlib1g:i386", 464*6777b538SAndroid Build Coastguard Worker # 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf 465*6777b538SAndroid Build Coastguard Worker "linux-libc-dev:i386", 466*6777b538SAndroid Build Coastguard Worker "libpci3:i386", 467*6777b538SAndroid Build Coastguard Worker ] 468*6777b538SAndroid Build Coastguard Worker 469*6777b538SAndroid Build Coastguard Worker # When cross building for arm/Android on 64-bit systems the host binaries 470*6777b538SAndroid Build Coastguard Worker # that are part of v8 need to be compiled with -m32 which means 471*6777b538SAndroid Build Coastguard Worker # that basic multilib support is needed. 472*6777b538SAndroid Build Coastguard Worker if "ELF 64-bit" in subprocess.check_output(["file", "-L", 473*6777b538SAndroid Build Coastguard Worker "/sbin/init"]).decode(): 474*6777b538SAndroid Build Coastguard Worker # gcc-multilib conflicts with the arm cross compiler but 475*6777b538SAndroid Build Coastguard Worker # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the 476*6777b538SAndroid Build Coastguard Worker # appropriate value of X and Y by seeing what version the current 477*6777b538SAndroid Build Coastguard Worker # distribution's g++-multilib package depends on. 478*6777b538SAndroid Build Coastguard Worker lines = subprocess.check_output( 479*6777b538SAndroid Build Coastguard Worker ["apt-cache", "depends", "g++-multilib", "--important"]).decode() 480*6777b538SAndroid Build Coastguard Worker pattern = re.compile(r"g\+\+-[0-9.]+-multilib") 481*6777b538SAndroid Build Coastguard Worker packages += re.findall(pattern, lines) 482*6777b538SAndroid Build Coastguard Worker 483*6777b538SAndroid Build Coastguard Worker # Work around for 32-bit dependency On Ubuntu 24.04 LTS (noble) 484*6777b538SAndroid Build Coastguard Worker if distro_codename() == "noble": 485*6777b538SAndroid Build Coastguard Worker packages.append("libncurses6:i386") 486*6777b538SAndroid Build Coastguard Worker else: 487*6777b538SAndroid Build Coastguard Worker packages.append("libncurses5:i386") 488*6777b538SAndroid Build Coastguard Worker 489*6777b538SAndroid Build Coastguard Worker return packages 490*6777b538SAndroid Build Coastguard Worker 491*6777b538SAndroid Build Coastguard Worker 492*6777b538SAndroid Build Coastguard Worker# Packages that have been removed from this script. Regardless of configuration 493*6777b538SAndroid Build Coastguard Worker# or options passed to this script, whenever a package is removed, it should be 494*6777b538SAndroid Build Coastguard Worker# added here. 495*6777b538SAndroid Build Coastguard Workerdef backwards_compatible_list(options): 496*6777b538SAndroid Build Coastguard Worker if not options.backwards_compatible: 497*6777b538SAndroid Build Coastguard Worker print("Skipping backwards compatible packages.", file=sys.stderr) 498*6777b538SAndroid Build Coastguard Worker return [] 499*6777b538SAndroid Build Coastguard Worker print("Including backwards compatible packages.", file=sys.stderr) 500*6777b538SAndroid Build Coastguard Worker 501*6777b538SAndroid Build Coastguard Worker packages = [ 502*6777b538SAndroid Build Coastguard Worker "7za", 503*6777b538SAndroid Build Coastguard Worker "fonts-indic", 504*6777b538SAndroid Build Coastguard Worker "fonts-ipafont", 505*6777b538SAndroid Build Coastguard Worker "fonts-stix", 506*6777b538SAndroid Build Coastguard Worker "fonts-thai-tlwg", 507*6777b538SAndroid Build Coastguard Worker "fonts-tlwg-garuda", 508*6777b538SAndroid Build Coastguard Worker "g++", 509*6777b538SAndroid Build Coastguard Worker "g++-4.8-multilib-arm-linux-gnueabihf", 510*6777b538SAndroid Build Coastguard Worker "gcc-4.8-multilib-arm-linux-gnueabihf", 511*6777b538SAndroid Build Coastguard Worker "g++-9-multilib-arm-linux-gnueabihf", 512*6777b538SAndroid Build Coastguard Worker "gcc-9-multilib-arm-linux-gnueabihf", 513*6777b538SAndroid Build Coastguard Worker "gcc-arm-linux-gnueabihf", 514*6777b538SAndroid Build Coastguard Worker "g++-10-multilib-arm-linux-gnueabihf", 515*6777b538SAndroid Build Coastguard Worker "gcc-10-multilib-arm-linux-gnueabihf", 516*6777b538SAndroid Build Coastguard Worker "g++-10-arm-linux-gnueabihf", 517*6777b538SAndroid Build Coastguard Worker "gcc-10-arm-linux-gnueabihf", 518*6777b538SAndroid Build Coastguard Worker "git-svn", 519*6777b538SAndroid Build Coastguard Worker "language-pack-da", 520*6777b538SAndroid Build Coastguard Worker "language-pack-fr", 521*6777b538SAndroid Build Coastguard Worker "language-pack-he", 522*6777b538SAndroid Build Coastguard Worker "language-pack-zh-hant", 523*6777b538SAndroid Build Coastguard Worker "libappindicator-dev", 524*6777b538SAndroid Build Coastguard Worker "libappindicator1", 525*6777b538SAndroid Build Coastguard Worker "libappindicator3-1", 526*6777b538SAndroid Build Coastguard Worker "libappindicator3-dev", 527*6777b538SAndroid Build Coastguard Worker "libdconf-dev", 528*6777b538SAndroid Build Coastguard Worker "libdconf1", 529*6777b538SAndroid Build Coastguard Worker "libdconf1:i386", 530*6777b538SAndroid Build Coastguard Worker "libexif-dev", 531*6777b538SAndroid Build Coastguard Worker "libexif12", 532*6777b538SAndroid Build Coastguard Worker "libexif12:i386", 533*6777b538SAndroid Build Coastguard Worker "libgbm-dev", 534*6777b538SAndroid Build Coastguard Worker "libgbm-dev-lts-trusty", 535*6777b538SAndroid Build Coastguard Worker "libgbm-dev-lts-xenial", 536*6777b538SAndroid Build Coastguard Worker "libgconf-2-4:i386", 537*6777b538SAndroid Build Coastguard Worker "libgconf2-dev", 538*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-dev", 539*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-dev-lts-trusty", 540*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-dev-lts-xenial", 541*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-glx:i386", 542*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-glx-lts-trusty:i386", 543*6777b538SAndroid Build Coastguard Worker "libgl1-mesa-glx-lts-xenial:i386", 544*6777b538SAndroid Build Coastguard Worker "libgles2-mesa-dev", 545*6777b538SAndroid Build Coastguard Worker "libgles2-mesa-dev-lts-trusty", 546*6777b538SAndroid Build Coastguard Worker "libgles2-mesa-dev-lts-xenial", 547*6777b538SAndroid Build Coastguard Worker "libgtk-3-0:i386", 548*6777b538SAndroid Build Coastguard Worker "libgtk2.0-0", 549*6777b538SAndroid Build Coastguard Worker "libgtk2.0-0:i386", 550*6777b538SAndroid Build Coastguard Worker "libgtk2.0-dev", 551*6777b538SAndroid Build Coastguard Worker "mesa-common-dev", 552*6777b538SAndroid Build Coastguard Worker "mesa-common-dev-lts-trusty", 553*6777b538SAndroid Build Coastguard Worker "mesa-common-dev-lts-xenial", 554*6777b538SAndroid Build Coastguard Worker "msttcorefonts", 555*6777b538SAndroid Build Coastguard Worker "python-dev", 556*6777b538SAndroid Build Coastguard Worker "python-setuptools", 557*6777b538SAndroid Build Coastguard Worker "snapcraft", 558*6777b538SAndroid Build Coastguard Worker "ttf-dejavu-core", 559*6777b538SAndroid Build Coastguard Worker "ttf-indic-fonts", 560*6777b538SAndroid Build Coastguard Worker "ttf-kochi-gothic", 561*6777b538SAndroid Build Coastguard Worker "ttf-kochi-mincho", 562*6777b538SAndroid Build Coastguard Worker "ttf-mscorefonts-installer", 563*6777b538SAndroid Build Coastguard Worker "xfonts-mathml", 564*6777b538SAndroid Build Coastguard Worker ] 565*6777b538SAndroid Build Coastguard Worker 566*6777b538SAndroid Build Coastguard Worker if package_exists("python-is-python2"): 567*6777b538SAndroid Build Coastguard Worker packages.extend(["python-is-python2", "python2-dev"]) 568*6777b538SAndroid Build Coastguard Worker else: 569*6777b538SAndroid Build Coastguard Worker packages.append("python") 570*6777b538SAndroid Build Coastguard Worker 571*6777b538SAndroid Build Coastguard Worker if package_exists("python-crypto"): 572*6777b538SAndroid Build Coastguard Worker packages.append("python-crypto") 573*6777b538SAndroid Build Coastguard Worker 574*6777b538SAndroid Build Coastguard Worker if package_exists("python-numpy"): 575*6777b538SAndroid Build Coastguard Worker packages.append("python-numpy") 576*6777b538SAndroid Build Coastguard Worker 577*6777b538SAndroid Build Coastguard Worker if package_exists("python-openssl"): 578*6777b538SAndroid Build Coastguard Worker packages.append("python-openssl") 579*6777b538SAndroid Build Coastguard Worker 580*6777b538SAndroid Build Coastguard Worker if package_exists("python-psutil"): 581*6777b538SAndroid Build Coastguard Worker packages.append("python-psutil") 582*6777b538SAndroid Build Coastguard Worker 583*6777b538SAndroid Build Coastguard Worker if package_exists("python-yaml"): 584*6777b538SAndroid Build Coastguard Worker packages.append("python-yaml") 585*6777b538SAndroid Build Coastguard Worker 586*6777b538SAndroid Build Coastguard Worker if package_exists("apache2.2-bin"): 587*6777b538SAndroid Build Coastguard Worker packages.append("apache2.2-bin") 588*6777b538SAndroid Build Coastguard Worker else: 589*6777b538SAndroid Build Coastguard Worker packages.append("apache2-bin") 590*6777b538SAndroid Build Coastguard Worker 591*6777b538SAndroid Build Coastguard Worker php_versions = [ 592*6777b538SAndroid Build Coastguard Worker ("php8.1-cgi", "libapache2-mod-php8.1"), 593*6777b538SAndroid Build Coastguard Worker ("php8.0-cgi", "libapache2-mod-php8.0"), 594*6777b538SAndroid Build Coastguard Worker ("php7.4-cgi", "libapache2-mod-php7.4"), 595*6777b538SAndroid Build Coastguard Worker ("php7.3-cgi", "libapache2-mod-php7.3"), 596*6777b538SAndroid Build Coastguard Worker ("php7.2-cgi", "libapache2-mod-php7.2"), 597*6777b538SAndroid Build Coastguard Worker ("php7.1-cgi", "libapache2-mod-php7.1"), 598*6777b538SAndroid Build Coastguard Worker ("php7.0-cgi", "libapache2-mod-php7.0"), 599*6777b538SAndroid Build Coastguard Worker ("php5-cgi", "libapache2-mod-php5"), 600*6777b538SAndroid Build Coastguard Worker ] 601*6777b538SAndroid Build Coastguard Worker 602*6777b538SAndroid Build Coastguard Worker for php_cgi, mod_php in php_versions: 603*6777b538SAndroid Build Coastguard Worker if package_exists(php_cgi): 604*6777b538SAndroid Build Coastguard Worker packages.extend([php_cgi, mod_php]) 605*6777b538SAndroid Build Coastguard Worker break 606*6777b538SAndroid Build Coastguard Worker 607*6777b538SAndroid Build Coastguard Worker return [package for package in packages if package_exists(package)] 608*6777b538SAndroid Build Coastguard Worker 609*6777b538SAndroid Build Coastguard Worker 610*6777b538SAndroid Build Coastguard Workerdef arm_list(options): 611*6777b538SAndroid Build Coastguard Worker if not options.arm: 612*6777b538SAndroid Build Coastguard Worker print("Skipping ARM cross toolchain.", file=sys.stderr) 613*6777b538SAndroid Build Coastguard Worker return [] 614*6777b538SAndroid Build Coastguard Worker print("Including ARM cross toolchain.", file=sys.stderr) 615*6777b538SAndroid Build Coastguard Worker 616*6777b538SAndroid Build Coastguard Worker # arm cross toolchain packages needed to build chrome on armhf 617*6777b538SAndroid Build Coastguard Worker packages = [ 618*6777b538SAndroid Build Coastguard Worker "libc6-dev-armhf-cross", 619*6777b538SAndroid Build Coastguard Worker "linux-libc-dev-armhf-cross", 620*6777b538SAndroid Build Coastguard Worker "g++-arm-linux-gnueabihf", 621*6777b538SAndroid Build Coastguard Worker ] 622*6777b538SAndroid Build Coastguard Worker 623*6777b538SAndroid Build Coastguard Worker # Work around for dependency issue Ubuntu: http://crbug.com/435056 624*6777b538SAndroid Build Coastguard Worker if distro_codename() == "bionic": 625*6777b538SAndroid Build Coastguard Worker packages.extend([ 626*6777b538SAndroid Build Coastguard Worker "g++-5-multilib-arm-linux-gnueabihf", 627*6777b538SAndroid Build Coastguard Worker "gcc-5-multilib-arm-linux-gnueabihf", 628*6777b538SAndroid Build Coastguard Worker "gcc-arm-linux-gnueabihf", 629*6777b538SAndroid Build Coastguard Worker ]) 630*6777b538SAndroid Build Coastguard Worker elif distro_codename() == "focal": 631*6777b538SAndroid Build Coastguard Worker packages.extend([ 632*6777b538SAndroid Build Coastguard Worker "g++-10-multilib-arm-linux-gnueabihf", 633*6777b538SAndroid Build Coastguard Worker "gcc-10-multilib-arm-linux-gnueabihf", 634*6777b538SAndroid Build Coastguard Worker "gcc-arm-linux-gnueabihf", 635*6777b538SAndroid Build Coastguard Worker ]) 636*6777b538SAndroid Build Coastguard Worker elif distro_codename() == "jammy": 637*6777b538SAndroid Build Coastguard Worker packages.extend([ 638*6777b538SAndroid Build Coastguard Worker "gcc-arm-linux-gnueabihf", 639*6777b538SAndroid Build Coastguard Worker "g++-11-arm-linux-gnueabihf", 640*6777b538SAndroid Build Coastguard Worker "gcc-11-arm-linux-gnueabihf", 641*6777b538SAndroid Build Coastguard Worker ]) 642*6777b538SAndroid Build Coastguard Worker elif distro_codename() == "noble": 643*6777b538SAndroid Build Coastguard Worker packages.extend([ 644*6777b538SAndroid Build Coastguard Worker "gcc-arm-linux-gnueabihf", 645*6777b538SAndroid Build Coastguard Worker "g++-13-arm-linux-gnueabihf", 646*6777b538SAndroid Build Coastguard Worker "gcc-13-arm-linux-gnueabihf", 647*6777b538SAndroid Build Coastguard Worker ]) 648*6777b538SAndroid Build Coastguard Worker 649*6777b538SAndroid Build Coastguard Worker return packages 650*6777b538SAndroid Build Coastguard Worker 651*6777b538SAndroid Build Coastguard Worker 652*6777b538SAndroid Build Coastguard Workerdef nacl_list(options): 653*6777b538SAndroid Build Coastguard Worker if not options.nacl: 654*6777b538SAndroid Build Coastguard Worker print("Skipping NaCl, NaCl toolchain, NaCl ports dependencies.", 655*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 656*6777b538SAndroid Build Coastguard Worker return [] 657*6777b538SAndroid Build Coastguard Worker print("Including NaCl, NaCl toolchain, NaCl ports dependencies.", 658*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 659*6777b538SAndroid Build Coastguard Worker 660*6777b538SAndroid Build Coastguard Worker packages = [ 661*6777b538SAndroid Build Coastguard Worker "g++-mingw-w64-i686", 662*6777b538SAndroid Build Coastguard Worker "lib32z1-dev", 663*6777b538SAndroid Build Coastguard Worker "libasound2:i386", 664*6777b538SAndroid Build Coastguard Worker "libcap2:i386", 665*6777b538SAndroid Build Coastguard Worker "libelf-dev:i386", 666*6777b538SAndroid Build Coastguard Worker "libfontconfig1:i386", 667*6777b538SAndroid Build Coastguard Worker "libglib2.0-0:i386", 668*6777b538SAndroid Build Coastguard Worker "libgpm2:i386", 669*6777b538SAndroid Build Coastguard Worker "libnss3:i386", 670*6777b538SAndroid Build Coastguard Worker "libpango-1.0-0:i386", 671*6777b538SAndroid Build Coastguard Worker "libssl-dev:i386", 672*6777b538SAndroid Build Coastguard Worker "libtinfo-dev", 673*6777b538SAndroid Build Coastguard Worker "libtinfo-dev:i386", 674*6777b538SAndroid Build Coastguard Worker "libtool", 675*6777b538SAndroid Build Coastguard Worker "libuuid1:i386", 676*6777b538SAndroid Build Coastguard Worker "libxcomposite1:i386", 677*6777b538SAndroid Build Coastguard Worker "libxcursor1:i386", 678*6777b538SAndroid Build Coastguard Worker "libxdamage1:i386", 679*6777b538SAndroid Build Coastguard Worker "libxi6:i386", 680*6777b538SAndroid Build Coastguard Worker "libxrandr2:i386", 681*6777b538SAndroid Build Coastguard Worker "libxss1:i386", 682*6777b538SAndroid Build Coastguard Worker "libxtst6:i386", 683*6777b538SAndroid Build Coastguard Worker "texinfo", 684*6777b538SAndroid Build Coastguard Worker "xvfb", 685*6777b538SAndroid Build Coastguard Worker # Packages to build NaCl, its toolchains, and its ports. 686*6777b538SAndroid Build Coastguard Worker "ant", 687*6777b538SAndroid Build Coastguard Worker "autoconf", 688*6777b538SAndroid Build Coastguard Worker "bison", 689*6777b538SAndroid Build Coastguard Worker "cmake", 690*6777b538SAndroid Build Coastguard Worker "gawk", 691*6777b538SAndroid Build Coastguard Worker "intltool", 692*6777b538SAndroid Build Coastguard Worker "xutils-dev", 693*6777b538SAndroid Build Coastguard Worker "xsltproc", 694*6777b538SAndroid Build Coastguard Worker ] 695*6777b538SAndroid Build Coastguard Worker 696*6777b538SAndroid Build Coastguard Worker # Some package names have changed over time 697*6777b538SAndroid Build Coastguard Worker if package_exists("libssl-dev"): 698*6777b538SAndroid Build Coastguard Worker packages.append("libssl-dev:i386") 699*6777b538SAndroid Build Coastguard Worker elif package_exists("libssl1.1"): 700*6777b538SAndroid Build Coastguard Worker packages.append("libssl1.1:i386") 701*6777b538SAndroid Build Coastguard Worker elif package_exists("libssl1.0.2"): 702*6777b538SAndroid Build Coastguard Worker packages.append("libssl1.0.2:i386") 703*6777b538SAndroid Build Coastguard Worker else: 704*6777b538SAndroid Build Coastguard Worker packages.append("libssl1.0.0:i386") 705*6777b538SAndroid Build Coastguard Worker 706*6777b538SAndroid Build Coastguard Worker if package_exists("libtinfo5"): 707*6777b538SAndroid Build Coastguard Worker packages.append("libtinfo5") 708*6777b538SAndroid Build Coastguard Worker 709*6777b538SAndroid Build Coastguard Worker if package_exists("libudev1"): 710*6777b538SAndroid Build Coastguard Worker packages.append("libudev1:i386") 711*6777b538SAndroid Build Coastguard Worker else: 712*6777b538SAndroid Build Coastguard Worker packages.append("libudev0:i386") 713*6777b538SAndroid Build Coastguard Worker 714*6777b538SAndroid Build Coastguard Worker # Work around for nacl dependency On Ubuntu 24.04 LTS (noble) 715*6777b538SAndroid Build Coastguard Worker if distro_codename() == "noble": 716*6777b538SAndroid Build Coastguard Worker packages.append("libncurses6:i386") 717*6777b538SAndroid Build Coastguard Worker packages.append("lib32ncurses-dev") 718*6777b538SAndroid Build Coastguard Worker else: 719*6777b538SAndroid Build Coastguard Worker packages.append("libncurses5:i386") 720*6777b538SAndroid Build Coastguard Worker packages.append("lib32ncurses5-dev") 721*6777b538SAndroid Build Coastguard Worker 722*6777b538SAndroid Build Coastguard Worker return packages 723*6777b538SAndroid Build Coastguard Worker 724*6777b538SAndroid Build Coastguard Worker 725*6777b538SAndroid Build Coastguard Worker# Debian is in the process of transitioning to automatic debug packages, which 726*6777b538SAndroid Build Coastguard Worker# have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages). 727*6777b538SAndroid Build Coastguard Worker# Untransitioned packages have the -dbg suffix. And on some systems, neither 728*6777b538SAndroid Build Coastguard Worker# will be available, so exclude the ones that are missing. 729*6777b538SAndroid Build Coastguard Workerdef dbg_package_name(package): 730*6777b538SAndroid Build Coastguard Worker if package_exists(package + "-dbgsym"): 731*6777b538SAndroid Build Coastguard Worker return [package + "-dbgsym"] 732*6777b538SAndroid Build Coastguard Worker if package_exists(package + "-dbg"): 733*6777b538SAndroid Build Coastguard Worker return [package + "-dbg"] 734*6777b538SAndroid Build Coastguard Worker return [] 735*6777b538SAndroid Build Coastguard Worker 736*6777b538SAndroid Build Coastguard Worker 737*6777b538SAndroid Build Coastguard Workerdef dbg_list(options): 738*6777b538SAndroid Build Coastguard Worker if not options.syms: 739*6777b538SAndroid Build Coastguard Worker print("Skipping debugging symbols.", file=sys.stderr) 740*6777b538SAndroid Build Coastguard Worker return [] 741*6777b538SAndroid Build Coastguard Worker print("Including debugging symbols.", file=sys.stderr) 742*6777b538SAndroid Build Coastguard Worker 743*6777b538SAndroid Build Coastguard Worker packages = [ 744*6777b538SAndroid Build Coastguard Worker dbg_package for package in lib_list() 745*6777b538SAndroid Build Coastguard Worker for dbg_package in dbg_package_name(package) 746*6777b538SAndroid Build Coastguard Worker ] 747*6777b538SAndroid Build Coastguard Worker 748*6777b538SAndroid Build Coastguard Worker # Debugging symbols packages not following common naming scheme 749*6777b538SAndroid Build Coastguard Worker if not dbg_package_name("libstdc++6"): 750*6777b538SAndroid Build Coastguard Worker for version in ["8", "7", "6", "5", "4.9", "4.8", "4.7", "4.6"]: 751*6777b538SAndroid Build Coastguard Worker if package_exists("libstdc++6-%s-dbg" % version): 752*6777b538SAndroid Build Coastguard Worker packages.append("libstdc++6-%s-dbg" % version) 753*6777b538SAndroid Build Coastguard Worker break 754*6777b538SAndroid Build Coastguard Worker 755*6777b538SAndroid Build Coastguard Worker if not dbg_package_name("libatk1.0-0"): 756*6777b538SAndroid Build Coastguard Worker packages.extend(dbg_package_name("libatk1.0")) 757*6777b538SAndroid Build Coastguard Worker 758*6777b538SAndroid Build Coastguard Worker if not dbg_package_name("libpango-1.0-0"): 759*6777b538SAndroid Build Coastguard Worker packages.extend(dbg_package_name("libpango1.0-dev")) 760*6777b538SAndroid Build Coastguard Worker 761*6777b538SAndroid Build Coastguard Worker return packages 762*6777b538SAndroid Build Coastguard Worker 763*6777b538SAndroid Build Coastguard Worker 764*6777b538SAndroid Build Coastguard Workerdef package_list(options): 765*6777b538SAndroid Build Coastguard Worker packages = (dev_list() + lib_list() + dbg_list(options) + 766*6777b538SAndroid Build Coastguard Worker lib32_list(options) + arm_list(options) + nacl_list(options) + 767*6777b538SAndroid Build Coastguard Worker backwards_compatible_list(options)) 768*6777b538SAndroid Build Coastguard Worker 769*6777b538SAndroid Build Coastguard Worker # Sort all the :i386 packages to the front, to avoid confusing dpkg-query 770*6777b538SAndroid Build Coastguard Worker # (https://crbug.com/446172). 771*6777b538SAndroid Build Coastguard Worker return sorted(set(packages), key=lambda x: (not x.endswith(":i386"), x)) 772*6777b538SAndroid Build Coastguard Worker 773*6777b538SAndroid Build Coastguard Worker 774*6777b538SAndroid Build Coastguard Workerdef missing_packages(packages): 775*6777b538SAndroid Build Coastguard Worker try: 776*6777b538SAndroid Build Coastguard Worker subprocess.run( 777*6777b538SAndroid Build Coastguard Worker ["dpkg-query", "-W", "-f", " "] + packages, 778*6777b538SAndroid Build Coastguard Worker check=True, 779*6777b538SAndroid Build Coastguard Worker capture_output=True, 780*6777b538SAndroid Build Coastguard Worker ) 781*6777b538SAndroid Build Coastguard Worker return [] 782*6777b538SAndroid Build Coastguard Worker except subprocess.CalledProcessError as e: 783*6777b538SAndroid Build Coastguard Worker return [ 784*6777b538SAndroid Build Coastguard Worker line.split(" ")[-1] for line in e.stderr.decode().strip().splitlines() 785*6777b538SAndroid Build Coastguard Worker ] 786*6777b538SAndroid Build Coastguard Worker 787*6777b538SAndroid Build Coastguard Worker 788*6777b538SAndroid Build Coastguard Workerdef package_is_installable(package): 789*6777b538SAndroid Build Coastguard Worker result = subprocess.run(["apt-cache", "show", package], capture_output=True) 790*6777b538SAndroid Build Coastguard Worker return result.returncode == 0 791*6777b538SAndroid Build Coastguard Worker 792*6777b538SAndroid Build Coastguard Worker 793*6777b538SAndroid Build Coastguard Workerdef quick_check(options): 794*6777b538SAndroid Build Coastguard Worker if not options.quick_check: 795*6777b538SAndroid Build Coastguard Worker return 796*6777b538SAndroid Build Coastguard Worker 797*6777b538SAndroid Build Coastguard Worker missing = missing_packages(package_list(options)) 798*6777b538SAndroid Build Coastguard Worker if not missing: 799*6777b538SAndroid Build Coastguard Worker sys.exit(0) 800*6777b538SAndroid Build Coastguard Worker 801*6777b538SAndroid Build Coastguard Worker not_installed = [] 802*6777b538SAndroid Build Coastguard Worker unknown = [] 803*6777b538SAndroid Build Coastguard Worker for p in missing: 804*6777b538SAndroid Build Coastguard Worker if package_is_installable(p): 805*6777b538SAndroid Build Coastguard Worker not_installed.append(p) 806*6777b538SAndroid Build Coastguard Worker else: 807*6777b538SAndroid Build Coastguard Worker unknown.append(p) 808*6777b538SAndroid Build Coastguard Worker 809*6777b538SAndroid Build Coastguard Worker if not_installed: 810*6777b538SAndroid Build Coastguard Worker print("WARNING: The following packages are not installed:", file=sys.stderr) 811*6777b538SAndroid Build Coastguard Worker print(" ".join(not_installed), file=sys.stderr) 812*6777b538SAndroid Build Coastguard Worker 813*6777b538SAndroid Build Coastguard Worker if unknown: 814*6777b538SAndroid Build Coastguard Worker print("WARNING: The following packages are unknown to your system", 815*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 816*6777b538SAndroid Build Coastguard Worker print("(maybe missing a repo or need to 'sudo apt-get update'):", 817*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 818*6777b538SAndroid Build Coastguard Worker print(" ".join(unknown), file=sys.stderr) 819*6777b538SAndroid Build Coastguard Worker 820*6777b538SAndroid Build Coastguard Worker sys.exit(1) 821*6777b538SAndroid Build Coastguard Worker 822*6777b538SAndroid Build Coastguard Worker 823*6777b538SAndroid Build Coastguard Workerdef find_missing_packages(options): 824*6777b538SAndroid Build Coastguard Worker print("Finding missing packages...", file=sys.stderr) 825*6777b538SAndroid Build Coastguard Worker 826*6777b538SAndroid Build Coastguard Worker packages = package_list(options) 827*6777b538SAndroid Build Coastguard Worker packages_str = " ".join(packages) 828*6777b538SAndroid Build Coastguard Worker print("Packages required: " + packages_str, file=sys.stderr) 829*6777b538SAndroid Build Coastguard Worker 830*6777b538SAndroid Build Coastguard Worker query_cmd = ["apt-get", "--just-print", "install"] + packages 831*6777b538SAndroid Build Coastguard Worker env = os.environ.copy() 832*6777b538SAndroid Build Coastguard Worker env["LANGUAGE"] = "en" 833*6777b538SAndroid Build Coastguard Worker env["LANG"] = "C" 834*6777b538SAndroid Build Coastguard Worker cmd_output = subprocess.check_output(query_cmd, env=env).decode() 835*6777b538SAndroid Build Coastguard Worker lines = cmd_output.splitlines() 836*6777b538SAndroid Build Coastguard Worker 837*6777b538SAndroid Build Coastguard Worker install = [] 838*6777b538SAndroid Build Coastguard Worker for pattern in ( 839*6777b538SAndroid Build Coastguard Worker "The following NEW packages will be installed:", 840*6777b538SAndroid Build Coastguard Worker "The following packages will be upgraded:", 841*6777b538SAndroid Build Coastguard Worker ): 842*6777b538SAndroid Build Coastguard Worker if pattern in lines: 843*6777b538SAndroid Build Coastguard Worker for line in lines[lines.index(pattern) + 1:]: 844*6777b538SAndroid Build Coastguard Worker if not line.startswith(" "): 845*6777b538SAndroid Build Coastguard Worker break 846*6777b538SAndroid Build Coastguard Worker install += line.strip().split(" ") 847*6777b538SAndroid Build Coastguard Worker return install 848*6777b538SAndroid Build Coastguard Worker 849*6777b538SAndroid Build Coastguard Worker 850*6777b538SAndroid Build Coastguard Workerdef install_packages(options): 851*6777b538SAndroid Build Coastguard Worker try: 852*6777b538SAndroid Build Coastguard Worker packages = find_missing_packages(options) 853*6777b538SAndroid Build Coastguard Worker if packages: 854*6777b538SAndroid Build Coastguard Worker quiet = ["-qq", "--assume-yes"] if options.no_prompt else [] 855*6777b538SAndroid Build Coastguard Worker subprocess.check_call(["sudo", "apt-get", "install"] + quiet + packages) 856*6777b538SAndroid Build Coastguard Worker print(file=sys.stderr) 857*6777b538SAndroid Build Coastguard Worker else: 858*6777b538SAndroid Build Coastguard Worker print("No missing packages, and the packages are up to date.", 859*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 860*6777b538SAndroid Build Coastguard Worker 861*6777b538SAndroid Build Coastguard Worker except subprocess.CalledProcessError as e: 862*6777b538SAndroid Build Coastguard Worker # An apt-get exit status of 100 indicates that a real error has occurred. 863*6777b538SAndroid Build Coastguard Worker print("`apt-get --just-print install ...` failed", file=sys.stderr) 864*6777b538SAndroid Build Coastguard Worker print("It produced the following output:", file=sys.stderr) 865*6777b538SAndroid Build Coastguard Worker print(e.output.decode(), file=sys.stderr) 866*6777b538SAndroid Build Coastguard Worker print(file=sys.stderr) 867*6777b538SAndroid Build Coastguard Worker print("You will have to install the above packages yourself.", 868*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 869*6777b538SAndroid Build Coastguard Worker print(file=sys.stderr) 870*6777b538SAndroid Build Coastguard Worker sys.exit(100) 871*6777b538SAndroid Build Coastguard Worker 872*6777b538SAndroid Build Coastguard Worker 873*6777b538SAndroid Build Coastguard Worker# Install the Chrome OS default fonts. This must go after running 874*6777b538SAndroid Build Coastguard Worker# apt-get, since install-chromeos-fonts depends on curl. 875*6777b538SAndroid Build Coastguard Workerdef install_chromeos_fonts(options): 876*6777b538SAndroid Build Coastguard Worker if not options.chromeos_fonts: 877*6777b538SAndroid Build Coastguard Worker print("Skipping installation of Chrome OS fonts.", file=sys.stderr) 878*6777b538SAndroid Build Coastguard Worker return 879*6777b538SAndroid Build Coastguard Worker print("Installing Chrome OS fonts.", file=sys.stderr) 880*6777b538SAndroid Build Coastguard Worker 881*6777b538SAndroid Build Coastguard Worker dir = os.path.abspath(os.path.dirname(__file__)) 882*6777b538SAndroid Build Coastguard Worker 883*6777b538SAndroid Build Coastguard Worker try: 884*6777b538SAndroid Build Coastguard Worker subprocess.check_call( 885*6777b538SAndroid Build Coastguard Worker ["sudo", 886*6777b538SAndroid Build Coastguard Worker os.path.join(dir, "linux", "install-chromeos-fonts.py")]) 887*6777b538SAndroid Build Coastguard Worker except subprocess.CalledProcessError: 888*6777b538SAndroid Build Coastguard Worker print("ERROR: The installation of the Chrome OS default fonts failed.", 889*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 890*6777b538SAndroid Build Coastguard Worker if (subprocess.check_output( 891*6777b538SAndroid Build Coastguard Worker ["stat", "-f", "-c", "%T", dir], ).decode().startswith("nfs")): 892*6777b538SAndroid Build Coastguard Worker print( 893*6777b538SAndroid Build Coastguard Worker "The reason is that your repo is installed on a remote file system.", 894*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 895*6777b538SAndroid Build Coastguard Worker else: 896*6777b538SAndroid Build Coastguard Worker print( 897*6777b538SAndroid Build Coastguard Worker "This is expected if your repo is installed on a remote file system.", 898*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 899*6777b538SAndroid Build Coastguard Worker 900*6777b538SAndroid Build Coastguard Worker print("It is recommended to install your repo on a local file system.", 901*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 902*6777b538SAndroid Build Coastguard Worker print("You can skip the installation of the Chrome OS default fonts with", 903*6777b538SAndroid Build Coastguard Worker file=sys.stderr) 904*6777b538SAndroid Build Coastguard Worker print("the command line option: --no-chromeos-fonts.", file=sys.stderr) 905*6777b538SAndroid Build Coastguard Worker sys.exit(1) 906*6777b538SAndroid Build Coastguard Worker 907*6777b538SAndroid Build Coastguard Worker 908*6777b538SAndroid Build Coastguard Workerdef install_locales(): 909*6777b538SAndroid Build Coastguard Worker print("Installing locales.", file=sys.stderr) 910*6777b538SAndroid Build Coastguard Worker CHROMIUM_LOCALES = [ 911*6777b538SAndroid Build Coastguard Worker "da_DK.UTF-8", "en_US.UTF-8", "fr_FR.UTF-8", "he_IL.UTF-8", "zh_TW.UTF-8" 912*6777b538SAndroid Build Coastguard Worker ] 913*6777b538SAndroid Build Coastguard Worker LOCALE_GEN = "/etc/locale.gen" 914*6777b538SAndroid Build Coastguard Worker if os.path.exists(LOCALE_GEN): 915*6777b538SAndroid Build Coastguard Worker old_locale_gen = open(LOCALE_GEN).read() 916*6777b538SAndroid Build Coastguard Worker for locale in CHROMIUM_LOCALES: 917*6777b538SAndroid Build Coastguard Worker subprocess.check_call( 918*6777b538SAndroid Build Coastguard Worker ["sudo", "sed", "-i", 919*6777b538SAndroid Build Coastguard Worker "s/^# %s/%s/" % (locale, locale), LOCALE_GEN]) 920*6777b538SAndroid Build Coastguard Worker 921*6777b538SAndroid Build Coastguard Worker # Regenerating locales can take a while, so only do it if we need to. 922*6777b538SAndroid Build Coastguard Worker locale_gen = open(LOCALE_GEN).read() 923*6777b538SAndroid Build Coastguard Worker if locale_gen != old_locale_gen: 924*6777b538SAndroid Build Coastguard Worker subprocess.check_call(["sudo", "locale-gen"]) 925*6777b538SAndroid Build Coastguard Worker else: 926*6777b538SAndroid Build Coastguard Worker print("Locales already up-to-date.", file=sys.stderr) 927*6777b538SAndroid Build Coastguard Worker else: 928*6777b538SAndroid Build Coastguard Worker for locale in CHROMIUM_LOCALES: 929*6777b538SAndroid Build Coastguard Worker subprocess.check_call(["sudo", "locale-gen", locale]) 930*6777b538SAndroid Build Coastguard Worker 931*6777b538SAndroid Build Coastguard Worker 932*6777b538SAndroid Build Coastguard Workerdef main(): 933*6777b538SAndroid Build Coastguard Worker options = parse_args(sys.argv[1:]) 934*6777b538SAndroid Build Coastguard Worker check_lsb_release() 935*6777b538SAndroid Build Coastguard Worker check_distro(options) 936*6777b538SAndroid Build Coastguard Worker check_architecture() 937*6777b538SAndroid Build Coastguard Worker quick_check(options) 938*6777b538SAndroid Build Coastguard Worker check_root() 939*6777b538SAndroid Build Coastguard Worker apt_update(options) 940*6777b538SAndroid Build Coastguard Worker install_packages(options) 941*6777b538SAndroid Build Coastguard Worker install_chromeos_fonts(options) 942*6777b538SAndroid Build Coastguard Worker install_locales() 943*6777b538SAndroid Build Coastguard Worker return 0 944*6777b538SAndroid Build Coastguard Worker 945*6777b538SAndroid Build Coastguard Worker 946*6777b538SAndroid Build Coastguard Workerif __name__ == "__main__": 947*6777b538SAndroid Build Coastguard Worker sys.exit(main()) 948