#!/bin/bash
# This script is supposed to verify which compiler (GCC or clang) was
# used to build the packages in a ChromeOS image. To use the script,
# just pass the path to the tree containing the *.debug files for a
# ChromeOS image. It then reads the debug info in each .debug file
# it can find, checking the AT_producer field to determine whether
# the package was built with clang or GCC. It counts the total
# number of .debug files found as well as how many are built with
# each compiler. It writes out these statistics when it is done.
#
# For a locally-built ChromeOS image, the debug directory is usually:
# ${chromeos_root}/chroot/build/${board}/usr/lib/debug (from outside
# chroot)
# or
# /build/${board}/usr/lib/debug (from inside chroot)
#
# For a buildbot-built image you can usually download the debug tree
# (using 'gsutil cp') from
# gs://chromeos-archive-image/<path-to-your-artifact-tree>/debug.tgz
# After downloading it somewhere, you will need to uncompress and
# untar it before running this script.
#
DEBUG_TREE=$1
clang_count=0
gcc_count=0
file_count=0
# Verify the argument.
if [[ $# != 1 ]]; then
echo "Usage error:"
echo "compiler-test.sh <debug_directory>"
exit 1
fi
if [[ ! -d ${DEBUG_TREE} ]] ; then
echo "Cannot find ${DEBUG_TREE}."
exit 1
fi
cd ${DEBUG_TREE}
for f in `find . -name "*.debug" -type f` ; do
at_producer=`readelf --debug-dump=info $f | head -25 | grep AT_producer `;
if echo ${at_producer} | grep -q 'GNU C' ; then
((gcc_count++))
elif echo ${at_producer} | grep -q 'clang'; then
((clang_count++));
fi;
((file_count++))
done
echo "GCC count: ${gcc_count}"
echo "Clang count: ${clang_count}"
echo "Total file count: ${file_count}"
exit 0