Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: tools/binary_size/paths.py

Issue 2801663003: //tools/binary_size: Add Disassemble() to console.py. Tweak metadata. (Closed)
Patch Set: Review comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/binary_size/models.py ('k') | tools/binary_size/testdata/ActualDiff.golden » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/binary_size/paths.py
diff --git a/tools/binary_size/paths.py b/tools/binary_size/paths.py
new file mode 100644
index 0000000000000000000000000000000000000000..360ab32d7d808d9e1be35dc7863ad34419787ad3
--- /dev/null
+++ b/tools/binary_size/paths.py
@@ -0,0 +1,97 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Functions for dealing with determining --tool-prefix."""
+
+import distutils.spawn
+import logging
+import os
+
+_STATUS_DETECTED = 1
+_STATUS_VERIFIED = 2
+
+
+def AddOptions(parser):
+ parser.add_argument('--tool-prefix', default='',
+ help='Path prefix for c++filt.')
+ parser.add_argument('--output-directory',
+ help='Path to the root build directory.')
+
+
+class LazyPaths(object):
+ def __init__(self, args=None, tool_prefix=None, output_directory=None,
+ input_file=None):
+ tool_prefix = tool_prefix or (args and args.tool_prefix)
+ output_directory = output_directory or (args and args.output_directory)
+ self._tool_prefix = tool_prefix
+ self._output_directory = output_directory
+ self._input_file = input_file
+ self._output_directory_status = _STATUS_DETECTED if output_directory else 0
+ self._tool_prefix_status = _STATUS_DETECTED if tool_prefix else 0
+
+ @property
+ def tool_prefix(self):
+ if self._tool_prefix_status < _STATUS_DETECTED:
+ self._tool_prefix_status = _STATUS_DETECTED
+ self._tool_prefix = self._DetectToolPrefix() or ''
+ logging.debug('Detected --tool-prefix=%s', self._tool_prefix)
+ return self._tool_prefix
+
+ @property
+ def output_directory(self):
+ if self._output_directory_status < _STATUS_DETECTED:
+ self._output_directory_status = _STATUS_DETECTED
+ self._output_directory = self._DetectOutputDirectory()
+ logging.debug('Detected --output-directory=%s', self._output_directory)
+ return self._output_directory
+
+ def VerifyOutputDirectory(self):
+ output_directory = self.output_directory
+ if self._output_directory_status < _STATUS_VERIFIED:
+ self._output_directory_status = _STATUS_VERIFIED
+ if not output_directory or not os.path.isdir(output_directory):
+ raise Exception('Bad --output-directory. Path not found: %s' %
+ output_directory)
+ logging.info('Using --output-directory=%s', output_directory)
+ return output_directory
+
+ def VerifyToolPrefix(self):
+ tool_prefix = self.tool_prefix
+ if self._tool_prefix_status < _STATUS_VERIFIED:
+ self._tool_prefix_status = _STATUS_VERIFIED
+ if os.path.sep not in tool_prefix:
+ full_path = distutils.spawn.find_executable(tool_prefix + 'c++filt')
+ else:
+ full_path = tool_prefix + 'c++filt'
+
+ if not full_path or not os.path.isfile(full_path):
+ raise Exception('Bad --tool-prefix. Path not found: %s' % full_path)
+ logging.info('Using --tool-prefix=%s', self._tool_prefix)
+ return tool_prefix
+
+ def _DetectOutputDirectory(self):
+ # See if input file is in out/Release.
+ abs_path = os.path.abspath(self._input_file)
+ release_idx = abs_path.find('Release')
+ if release_idx != -1:
+ output_directory = abs_path[:release_idx] + 'Release'
+ output_directory = os.path.relpath(abs_path[:release_idx] + '/Release')
+ return output_directory
+
+ # See if CWD=output directory.
+ if os.path.exists('build.ninja'):
+ return '.'
+ return None
+
+ def _DetectToolPrefix(self):
+ output_directory = self.output_directory
+ if output_directory:
+ # Auto-detect from build_vars.txt
+ build_vars_path = os.path.join(output_directory, 'build_vars.txt')
+ if os.path.exists(build_vars_path):
+ with open(build_vars_path) as f:
+ build_vars = dict(l.rstrip().split('=', 1) for l in f if '=' in l)
+ return os.path.normpath(
+ os.path.join(output_directory, build_vars['android_tool_prefix']))
+ return None
« no previous file with comments | « tools/binary_size/models.py ('k') | tools/binary_size/testdata/ActualDiff.golden » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698