mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
|
# Copyright 2016 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.
|
||
|
|
||
|
import contextlib
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
from pylib import constants
|
||
|
|
||
|
DIR_SOURCE_ROOT = os.environ.get(
|
||
|
'CHECKOUT_SOURCE_ROOT',
|
||
|
os.path.abspath(os.path.join(os.path.dirname(__file__),
|
||
|
os.pardir, os.pardir, os.pardir, os.pardir)))
|
||
|
|
||
|
BUILD_COMMON_PATH = os.path.join(
|
||
|
DIR_SOURCE_ROOT, 'build', 'util', 'lib', 'common')
|
||
|
|
||
|
# third-party libraries
|
||
|
ANDROID_PLATFORM_DEVELOPMENT_SCRIPTS_PATH = os.path.join(
|
||
|
DIR_SOURCE_ROOT, 'third_party', 'android_platform', 'development',
|
||
|
'scripts')
|
||
|
DEVIL_PATH = os.path.join(
|
||
|
DIR_SOURCE_ROOT, 'third_party', 'catapult', 'devil')
|
||
|
PYMOCK_PATH = os.path.join(
|
||
|
DIR_SOURCE_ROOT, 'third_party', 'pymock')
|
||
|
|
||
|
@contextlib.contextmanager
|
||
|
def SysPath(path, position=None):
|
||
|
if position is None:
|
||
|
sys.path.append(path)
|
||
|
else:
|
||
|
sys.path.insert(position, path)
|
||
|
try:
|
||
|
yield
|
||
|
finally:
|
||
|
if sys.path[-1] == path:
|
||
|
sys.path.pop()
|
||
|
else:
|
||
|
sys.path.remove(path)
|
||
|
|
||
|
|
||
|
# Map of CPU architecture name to (toolchain_name, binprefix) pairs.
|
||
|
# TODO(digit): Use the build_vars.txt file generated by gn.
|
||
|
_TOOL_ARCH_MAP = {
|
||
|
'arm': ('arm-linux-androideabi-4.9', 'arm-linux-androideabi'),
|
||
|
'arm64': ('aarch64-linux-android-4.9', 'aarch64-linux-android'),
|
||
|
'x86': ('x86-4.9', 'i686-linux-android'),
|
||
|
'x86_64': ('x86_64-4.9', 'x86_64-linux-android'),
|
||
|
'x64': ('x86_64-4.9', 'x86_64-linux-android'),
|
||
|
'mips': ('mipsel-linux-android-4.9', 'mipsel-linux-android'),
|
||
|
}
|
||
|
|
||
|
# Cache used to speed up the results of ToolPath()
|
||
|
# Maps (arch, tool_name) pairs to fully qualified program paths.
|
||
|
# Useful because ToolPath() is called repeatedly for demangling C++ symbols.
|
||
|
_cached_tool_paths = {}
|
||
|
|
||
|
|
||
|
def ToolPath(tool, cpu_arch):
|
||
|
"""Return a fully qualifed path to an arch-specific toolchain program.
|
||
|
|
||
|
Args:
|
||
|
tool: Unprefixed toolchain program name (e.g. 'objdump')
|
||
|
cpu_arch: Target CPU architecture (e.g. 'arm64')
|
||
|
Returns:
|
||
|
Fully qualified path (e.g. ..../aarch64-linux-android-objdump')
|
||
|
Raises:
|
||
|
Exception if the toolchain could not be found.
|
||
|
"""
|
||
|
tool_path = _cached_tool_paths.get((tool, cpu_arch))
|
||
|
if tool_path:
|
||
|
return tool_path
|
||
|
|
||
|
toolchain_source, toolchain_prefix = _TOOL_ARCH_MAP.get(
|
||
|
cpu_arch, (None, None))
|
||
|
if not toolchain_source:
|
||
|
raise Exception('Could not find tool chain for ' + cpu_arch)
|
||
|
|
||
|
toolchain_subdir = (
|
||
|
'toolchains/%s/prebuilt/linux-x86_64/bin' % toolchain_source)
|
||
|
|
||
|
tool_path = os.path.join(constants.ANDROID_NDK_ROOT,
|
||
|
toolchain_subdir,
|
||
|
toolchain_prefix + '-' + tool)
|
||
|
|
||
|
_cached_tool_paths[(tool, cpu_arch)] = tool_path
|
||
|
return tool_path
|
||
|
|
||
|
|
||
|
def GetAaptPath():
|
||
|
"""Returns the path to the 'aapt' executable."""
|
||
|
return os.path.join(constants.ANDROID_SDK_TOOLS, 'aapt')
|