#!/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:
#  /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=`llvm-dwarfdump $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
