aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool
diff options
context:
space:
mode:
authorCassidy Burden <cburden@google.com>2016-08-03 16:19:34 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-08-04 13:11:18 -0700
commita0955f22087ecdab7a7f51909cc424725b3643dd (patch)
tree77fc85383d388ae357eff6d076401b57f9b951fb /binary_search_tool
parentb1d0c4e00ed787befa9591231ac5d04d2cf6795d (diff)
downloadtoolchain-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-xbinary_search_tool/compiler_wrapper.py18
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)