From 5dcace5cb0bda5d0905b597906d4ec51b9a27bdc Mon Sep 17 00:00:00 2001
From: Richard Lau <rlau@redhat.com>
Date: Wed, 2 Mar 2022 21:30:06 -0500
Subject: [PATCH] build: use ccache in make-v8.sh on ppc64le and s390x

If `ccache` is available, use it during V8 builds on ppc64le and s390x.
Only create the `gcc` and `g++` shims if necessary.
---
 tools/make-v8.sh | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/tools/make-v8.sh b/tools/make-v8.sh
index 978b9f00860a65..62cabc70a6eac7 100755
--- a/tools/make-v8.sh
+++ b/tools/make-v8.sh
@@ -9,7 +9,7 @@ cd deps/v8 || exit
 find . -type d -name .git -print0 | xargs -0 rm -rf
 ../../tools/v8/fetch_deps.py .
 
-ARCH="`arch`"
+ARCH=$(arch)
 if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then
   TARGET_ARCH=$ARCH
   if [ "$ARCH" = "ppc64le" ]; then
@@ -18,22 +18,34 @@ if [ "$ARCH" = "s390x" ] || [ "$ARCH" = "ppc64le" ]; then
   # set paths manually for now to use locally installed gn
   export BUILD_TOOLS=/home/iojs/build-tools
   export LD_LIBRARY_PATH="$BUILD_TOOLS:$LD_LIBRARY_PATH"
-  # Avoid linking to ccache symbolic links as ccache decides which
-  # binary to run based on the name of the link (we always name them gcc/g++).
-  # shellcheck disable=SC2154
-  CC_PATH=`command -v "$CC" gcc | grep -v ccache | head -n 1`
-  # shellcheck disable=SC2154
-  CXX_PATH=`command -v "$CXX" g++ | grep -v ccache | head -n 1`
   rm -f "$BUILD_TOOLS/g++"
   rm -f "$BUILD_TOOLS/gcc"
-  ln -s "$CXX_PATH" "$BUILD_TOOLS/g++"
-  ln -s "$CC_PATH" "$BUILD_TOOLS/gcc"
+  # V8's build config looks for binaries called `gcc` and `g++` if not using
+  # clang. Ensure that `gcc` and `g++` point to the compilers we want to
+  # invoke, creating symbolic links placed at the front of PATH, if needed.
+  # Avoid linking to ccache symbolic links as ccache decides which binary
+  # to run based on the name of the link (i.e. `gcc`/`g++` in our case).
+  # shellcheck disable=SC2154
+  if [ "$CC" != "" ] && [ "$CC" != "gcc" ]; then
+    CC_PATH=$(command -v "$CC" gcc | grep -v ccache | head -n 1)
+    ln -s "$CC_PATH" "$BUILD_TOOLS/gcc"
+  fi
+  # shellcheck disable=SC2154
+  if [ "$CXX" != "" ] && [ "$CXX" != "g++" ]; then
+    CXX_PATH=$(command -v "$CXX" g++ | grep -v ccache | head -n 1)
+    ln -s "$CXX_PATH" "$BUILD_TOOLS/g++"
+  fi
   export PATH="$BUILD_TOOLS:$PATH"
+  # Propagate ccache to gn.
+  case "$CXX" in
+    *ccache*) CC_WRAPPER="cc_wrapper=\"ccache\"" ;;
+    *) ;;
+  esac
 
   g++ --version
   gcc --version
   export PKG_CONFIG_PATH=$BUILD_TOOLS/pkg-config
-  gn gen -v "out.gn/$BUILD_ARCH_TYPE" --args="is_component_build=false is_debug=false use_goma=false goma_dir=\"None\" use_custom_libcxx=false v8_target_cpu=\"$TARGET_ARCH\" target_cpu=\"$TARGET_ARCH\" v8_enable_backtrace=true"
+  gn gen -v "out.gn/$BUILD_ARCH_TYPE" --args="is_component_build=false is_debug=false use_goma=false goma_dir=\"None\" use_custom_libcxx=false v8_target_cpu=\"$TARGET_ARCH\" target_cpu=\"$TARGET_ARCH\" v8_enable_backtrace=true $CC_WRAPPER"
   ninja -v -C "out.gn/$BUILD_ARCH_TYPE" d8 cctest inspector-test
 else
   DEPOT_TOOLS_DIR="$(cd _depot_tools && pwd)"