Home | History | Annotate | Download | only in toolchain-utils
      1 #!/bin/bash
      2 
      3 #  This script is supposed to verify which compiler (GCC or clang) was
      4 #  used to build the packages in a ChromeOS image.  To use the script,
      5 #  just pass the path to the tree containing the *.debug files for a
      6 #  ChromeOS image.  It then reads the debug info in each .debug file
      7 #  it can find, checking the AT_producer field to determine whether
      8 #  the package was built with clang or GCC.  It counts the total
      9 #  number of .debug files found as well as how many are built with
     10 #  each compiler.  It writes out these statistics when it is done.
     11 #
     12 #  For a locally-built ChromeOS image, the debug directory is usually:
     13 #  ${chromeos_root}/chroot/build/${board}/usr/lib/debug (from outside
     14 #   chroot)
     15 #  or
     16 #  /build/${board}/usr/lib/debug (from inside chroot)
     17 #
     18 #  For a buildbot-built image you can usually download the debug tree
     19 #  (using 'gsutil cp') from
     20 #  gs://chromeos-archive-image/<path-to-your-artifact-tree>/debug.tgz
     21 #  After downloading it somewhere, you will need to uncompress and
     22 #  untar it before running this script.
     23 #
     24 
     25 DEBUG_TREE=$1
     26 
     27 clang_count=0
     28 gcc_count=0
     29 file_count=0
     30 
     31 # Verify the argument.
     32 
     33 if [[ $# != 1 ]]; then
     34     echo "Usage error:"
     35     echo "compiler-test.sh <debug_directory>"
     36     exit 1
     37 fi
     38 
     39 
     40 if [[ ! -d ${DEBUG_TREE} ]] ; then
     41     echo "Cannot find ${DEBUG_TREE}."
     42     exit 1
     43 fi
     44 
     45 cd ${DEBUG_TREE}
     46 for f in `find . -name "*.debug" -type f` ; do
     47     at_producer=`readelf --debug-dump=info $f | head -25 | grep AT_producer `;
     48     if echo ${at_producer} | grep -q 'GNU C' ; then
     49         ((gcc_count++))
     50     elif echo ${at_producer} | grep -q 'clang'; then
     51         ((clang_count++));
     52     fi;
     53     ((file_count++))
     54 done
     55 
     56 echo "GCC count: ${gcc_count}"
     57 echo "Clang count: ${clang_count}"
     58 echo "Total file count: ${file_count}"
     59 
     60 
     61 exit 0
     62