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

Unified Diff: build/linux/sysroot_scripts/install-sysroot.py

Issue 1430143002: Install both 32 and 64 bit x86 sysroots when arm is the target_cpu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update a comment Created 5 years, 1 month 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/linux/sysroot_scripts/install-sysroot.py
diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py
index c1112891e282c0b255925f97cf6dfbbe63c1d562..38e8a5179f9d234c6ae8378c3c9f32529dad1c82 100755
--- a/build/linux/sysroot_scripts/install-sysroot.py
+++ b/build/linux/sysroot_scripts/install-sysroot.py
@@ -24,8 +24,13 @@ import shutil
import subprocess
import sys
-
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.dirname(os.path.dirname(os.path.join(SCRIPT_DIR))))
+import detect_host_arch
+import gyp_chromium
+import gyp_environment
+
+
URL_PREFIX = 'http://storage.googleapis.com'
URL_PATH = 'chrome-linux-sysroot/toolchain'
REVISION_AMD64 = 'a2d45701cb21244b9514e420950ba6ba687fb655'
@@ -60,25 +65,29 @@ def GetSha1(filename):
return sha1.hexdigest()
-def DetectArch(gyp_defines):
+def DetectArch(gyp_defines, is_android):
# Check for optional target_arch and only install for that architecture.
# If target_arch is not specified, then only install for the host
# architecture.
- if 'target_arch=x64' in gyp_defines:
+ target_arch = gyp_defines.get('target_arch')
+ if target_arch == 'x64':
return 'amd64'
- elif 'target_arch=ia32' in gyp_defines:
+ elif target_arch == 'ia32':
return 'i386'
- elif 'target_arch=arm' in gyp_defines:
+ elif target_arch == 'arm':
return 'arm'
- elif 'target_arch=mipsel' in gyp_defines:
+ elif target_arch == 'arm64':
+ return 'arm64'
+ elif target_arch == 'mipsel':
return 'mips'
+ elif target_arch:
+ raise Exception('Unrecognized target_arch: %s' % target_arch)
+
+ if is_android:
+ return 'arm'
# Figure out host arch using build/detect_host_arch.py and
# set target_arch to host arch
- build_dir = os.path.dirname(os.path.dirname(os.path.join(SCRIPT_DIR)))
- sys.path.append(build_dir)
- import detect_host_arch
-
detected_host_arch = detect_host_arch.HostArch()
if detected_host_arch == 'x64':
return 'amd64'
@@ -94,22 +103,23 @@ def DetectArch(gyp_defines):
return None
-def UsingSysroot(target_arch, gyp_defines):
+def UsingSysroot(target_arch, is_android, gyp_defines):
# ChromeOS uses a chroot, so doesn't need a sysroot
- if 'chromeos=1' in gyp_defines:
+ if gyp_defines.get('chromeos'):
return False
- # When cross-compiling we always use a sysroot
- if target_arch in ('arm', 'mips', 'i386'):
+ # When cross-compiling non-Android builds we always use a sysroot
+ if not is_android and target_arch in ('arm', 'mips', 'i386'):
return True
# Setting use_sysroot=1 GYP_DEFINES forces the use of the sysroot even
# when not cross compiling
- if 'use_sysroot=1' in gyp_defines:
+ if gyp_defines.get('use_sysroot'):
return True
# Official builds always use the sysroot.
- if 'branding=Chrome' in gyp_defines and 'buildtype=Official' in gyp_defines:
+ if (gyp_defines.get('branding') == 'Chrome' and
+ gyp_defines.get('buildtype') == 'Official'):
return True
return False
@@ -119,19 +129,36 @@ def main():
if options.running_as_hook and not sys.platform.startswith('linux'):
return 0
- gyp_defines = os.environ.get('GYP_DEFINES', '')
+ gyp_environment.SetEnvironment()
+ supplemental_includes = gyp_chromium.GetSupplementalFiles()
+ gyp_defines = gyp_chromium.GetGypVars(supplemental_includes)
+ is_android = gyp_defines.get('OS') == 'android'
if options.arch:
target_arch = options.arch
else:
- target_arch = DetectArch(gyp_defines)
+ target_arch = DetectArch(gyp_defines, is_android)
if not target_arch:
- print 'Unable to detect host architecture'
+ print 'Unable to detect target architecture'
return 1
- if options.running_as_hook and not UsingSysroot(target_arch, gyp_defines):
+ if (options.running_as_hook and
+ not UsingSysroot(target_arch, is_android, gyp_defines)):
return 0
+ if is_android:
+ # 32-bit Android builds require a 32-bit host sysroot for the v8 snapshot.
+ if '64' not in target_arch:
+ ret = _InstallSysroot('i386')
+ if ret:
+ return ret
+ # Always need host sysroot (which we assume is x64).
+ target_arch = 'amd64'
+
+ return _InstallSysroot(target_arch)
+
+
+def _InstallSysroot(target_arch):
# The sysroot directory should match the one specified in build/common.gypi.
# TODO(thestig) Consider putting this else where to avoid having to recreate
# it on every build.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698