| #!/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 |