skia2/toolchain/clang_trampoline.sh
Kevin Lubick 62f57a02b3 [includes] Enforce IWYU on src/utils
Client changes:
 - cl/443664347
 - cl/444232853
 - http://ag/17915718
 - http://ag/17913178
 - https://crrev.com/c/3602239

Change-Id: I16bcdbbe2b13bbf52f007b0f131e9ee0c14ed237
Bug: skia:13052
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/532257
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
2022-04-28 17:32:20 +00:00

47 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2021 Google LLC
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
export LD_LIBRARY_PATH="external/clang_linux_amd64/usr/lib/x86_64-linux-gnu:external/clang_linux_amd64/usr/lib/llvm-13/lib"
# If compilation fails, we want to exit right away
set -e
# We only want to run include-what-you-use if SKIA_ENFORCE_IWYU_FOR_THIS_FILE is in the arguments
# passed in (i.e. the "skia_opt_file_into_iwyu" feature is enabled) and we are not linking
# (as detected by the presence of -fuse-ld).
if [[ "$@" != *SKIA_ENFORCE_IWYU_FOR_THIS_FILE* || "$@" == *use-ld* ]]; then
external/clang_linux_amd64/bin/clang $@
exit 0
else
# Now try to compile with Clang, and then verify with IWYU
external/clang_linux_amd64/bin/clang $@
# IWYU always returns a non-zero code because it doesn't produce the .o file (that's why
# we ran Clang first). As such, we do not want bash to fail after running IWYU.
set +e
# Get absolute path to the mapping file because resolving the relative path is tricky, given
# how Bazel locates the toolchain files.
MAPPING_FILE=$(realpath $(dirname ${BASH_SOURCE[0]}))"/IWYU_mapping.imp"
# IWYU always outputs something to stderr, which can be noisy if everything is fixed.
# Otherwise, we send the exact same arguments to include-what-you-use that we would for
# regular compilation with clang.
# We always allow SkTypes.h because
external/clang_linux_amd64/usr/bin/include-what-you-use \
-Xiwyu --keep="include/core/SkTypes.h" \
-Xiwyu --mapping_file=$MAPPING_FILE $@ 2>/dev/null
# IWYU returns 2 if everything looks good. It returns some other non-zero exit code otherwise.
if [ $? -eq 2 ]; then
exit 0 # keep the build going
else
# Run IWYU again, but this time display the output. Then return non-zero to fail the build.
# These flags are a little different, but only in ways that affect what was displayed, not the
# analysis. If we aren't sure why IWYU wants to include something, try changing verbose to 3.
external/clang_linux_amd64/usr/bin/include-what-you-use \
-Xiwyu --keep="include/core/SkTypes.h" \
-Xiwyu --mapping_file=$MAPPING_FILE -Xiwyu --no_comments \
-Xiwyu --quoted_includes_first -Xiwyu --verbose=3 $@
exit 1 # fail the build
fi
fi