xref: /aosp_15_r20/external/toolchain-utils/compiler_wrapper/install_compiler_wrapper.sh (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
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