diff options
author | Cassidy Burden <cburden@google.com> | 2016-08-03 16:19:34 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-08-04 13:11:18 -0700 |
commit | a0955f22087ecdab7a7f51909cc424725b3643dd (patch) | |
tree | 77fc85383d388ae357eff6d076401b57f9b951fb /binary_search_tool | |
parent | b1d0c4e00ed787befa9591231ac5d04d2cf6795d (diff) | |
download | toolchain-utils-a0955f22087ecdab7a7f51909cc424725b3643dd.tar.gz |
binary search tool: Support @file compiler arguments
Gradle passes arguments to gcc/clang by using the @file argument.
Implement expansion of this argument so that bisect_driver can analyze
all arguments being sent to the compiler.
TEST=Tested with NDK sample app
Change-Id: I1e1dae001a062c118b6d5c36e367612c9e4116b7
Reviewed-on: https://chrome-internal-review.googlesource.com/272935
Commit-Ready: Cassidy Burden <cburden@google.com>
Tested-by: Cassidy Burden <cburden@google.com>
Reviewed-by: Caroline Tice <cmtice@google.com>
Diffstat (limited to 'binary_search_tool')
-rwxr-xr-x | binary_search_tool/compiler_wrapper.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/binary_search_tool/compiler_wrapper.py b/binary_search_tool/compiler_wrapper.py index 42723ec0..54d5d7ea 100755 --- a/binary_search_tool/compiler_wrapper.py +++ b/binary_search_tool/compiler_wrapper.py @@ -15,6 +15,7 @@ https://docs.google.com/document/d/1yDgaUIa2O5w6dc3sSTe1ry-1ehKajTGJGQCbyn0fcEM from __future__ import print_function import os +import shlex import sys import bisect_driver @@ -25,6 +26,15 @@ DEFAULT_BISECT_DIR = os.path.expanduser('~/ANDROID_BISECT') BISECT_DIR = os.environ.get('BISECT_DIR') or DEFAULT_BISECT_DIR +def ProcessArgFile(arg_file): + args = [] + # Read in entire file at once and parse as if in shell + with open(arg_file, 'rb') as f: + args.extend(shlex.split(f.read())) + + return args + + def Main(_): if not os.path.islink(sys.argv[0]): print("Compiler wrapper can't be called directly!") @@ -35,6 +45,14 @@ def Main(_): if BISECT_STAGE not in bisect_driver.VALID_MODES: os.execv(WRAPPED, [WRAPPED] + sys.argv[1:]) + # Handle @file argument syntax with compiler + for idx, _ in enumerate(execargs): + # @file can be nested in other @file arguments, use While to re-evaluate + # the first argument of the embedded file. + while execargs[idx][0] == '@': + args_in_file = ProcessArgFile(execargs[idx][1:]) + execargs = execargs[0:idx] + args_in_file + execargs[idx + 1:] + bisect_driver.bisect_driver(BISECT_STAGE, BISECT_DIR, execargs) |