1*760c253cSXin Li#!/bin/bash 2*760c253cSXin Li# 3*760c253cSXin Li# Copyright 2020 The ChromiumOS Authors 4*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be 5*760c253cSXin Li# found in the LICENSE file. 6*760c253cSXin Li 7*760c253cSXin Li# This script rebuilds and installs compiler wrappers 8*760c253cSXin Li 9*760c253cSXin Liif [[ ! -e /etc/cros_chroot_version ]]; then 10*760c253cSXin Li echo "Please run this script inside chroot" 11*760c253cSXin Li exit 1 12*760c253cSXin Lifi 13*760c253cSXin Liset -e 14*760c253cSXin Li 15*760c253cSXin Li# Use a unique value here, since folks doing wrapper dev _likely_ want builds 16*760c253cSXin Li# to always be redone. 17*760c253cSXin Liversion_suffix="manually_installed_wrapper_at_unix_$(date +%s.%6N)" 18*760c253cSXin Liecho "Using toolchain hash: ${version_suffix}" 19*760c253cSXin Licd "$(dirname "$(readlink -m "$0")")" 20*760c253cSXin Li 21*760c253cSXin Libuild_py() { 22*760c253cSXin Li ./build.py --version_suffix="${version_suffix}" "$@" 23*760c253cSXin Li} 24*760c253cSXin Li 25*760c253cSXin Liecho "Updated files:" 26*760c253cSXin Li# Update the host wrapper 27*760c253cSXin Libuild_py \ 28*760c253cSXin Li --config=cros.host \ 29*760c253cSXin Li --use_ccache=false \ 30*760c253cSXin Li --use_llvm_next=false \ 31*760c253cSXin Li --output_file=./clang_host_wrapper 32*760c253cSXin Lisudo mv ./clang_host_wrapper /usr/bin/clang_host_wrapper 33*760c253cSXin Liecho "/usr/bin/clang_host_wrapper" 34*760c253cSXin Lisudo cp ../bisect_driver.py /usr/bin 35*760c253cSXin Liecho "/usr/bin/clang_host_wrapper/bisect_driver.py" 36*760c253cSXin Li 37*760c253cSXin Li# Update the target wrappers 38*760c253cSXin Libuild_py \ 39*760c253cSXin Li --config=cros.hardened \ 40*760c253cSXin Li --use_ccache=false \ 41*760c253cSXin Li --use_llvm_next=false \ 42*760c253cSXin Li --output_file=./sysroot_wrapper.hardened.noccache 43*760c253cSXin Libuild_py \ 44*760c253cSXin Li --config=cros.hardened \ 45*760c253cSXin Li --use_ccache=true \ 46*760c253cSXin Li --use_llvm_next=false \ 47*760c253cSXin Li --output_file=./sysroot_wrapper.hardened.ccache 48*760c253cSXin Li 49*760c253cSXin Li# Update clang target wrappers. 50*760c253cSXin Lisudo cp ./sysroot_wrapper.hardened.noccache ./sysroot_wrapper.hardened.ccache /usr/bin 51*760c253cSXin Liecho "Updated clang wrapper /usr/bin/sysroot_wrapper.hardened.noccache" 52*760c253cSXin Liecho "Updated clang wrapper /usr/bin/sysroot_wrapper.hardened.ccache" 53*760c253cSXin Li 54*760c253cSXin Li# Update GCC target wrappers. 55*760c253cSXin Lifor GCC in cross-x86_64-cros-linux-gnu/gcc cross-armv7a-cros-linux-gnueabihf/gcc cross-aarch64-cros-linux-gnu/gcc; do 56*760c253cSXin Li if ! FILES="$(equery f "${GCC}")"; then 57*760c253cSXin Li if [[ $(equery l "${GCC}" 2>&1 | wc -c) -eq 0 ]]; then 58*760c253cSXin Li echo "no ${GCC} package found; skipping" >&2 59*760c253cSXin Li continue 60*760c253cSXin Li fi 61*760c253cSXin Li # Something went wrong, and the equery above probably complained about it. 62*760c253cSXin Li exit 1 63*760c253cSXin Li fi 64*760c253cSXin Li echo "Updating ${GCC} wrapper." 65*760c253cSXin Li sudo cp ./sysroot_wrapper.hardened.noccache "$(grep sysroot_wrapper.hardened.noccache <<< "${FILES}")" 66*760c253cSXin Li grep sysroot_wrapper.hardened.noccache <<< "${FILES}" 67*760c253cSXin Li sudo cp ./sysroot_wrapper.hardened.ccache "$(grep sysroot_wrapper.hardened.ccache <<< "${FILES}")" 68*760c253cSXin Li grep sysroot_wrapper.hardened.ccache <<< "${FILES}" 69*760c253cSXin Li sudo cp ../bisect_driver.py "$(grep bisect_driver.py <<< "${FILES}")" 70*760c253cSXin Li grep bisect_driver.py <<< "${FILES}" 71*760c253cSXin Lidone 72*760c253cSXin Lirm -f ./sysroot_wrapper.hardened.noccache ./sysroot_wrapper.hardened.ccache 73