Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / installer / linux / sysroot_scripts / install-debian.wheezy.sysroot.py
index 4010668..91c168a 100755 (executable)
@@ -15,6 +15,7 @@
 # image. The image will normally need to be rebuilt every time chrome's build
 # dependancies are changed.
 
+import hashlib
 import platform
 import optparse
 import os
@@ -25,17 +26,36 @@ import sys
 
 
 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-URL_PREFIX = 'https://commondatastorage.googleapis.com'
+URL_PREFIX = 'http://storage.googleapis.com'
 URL_PATH = 'chrome-linux-sysroot/toolchain'
-REVISION = 259398
+REVISION_AMD64 = 264817
+REVISION_I386 = 264817
+REVISION_ARM = 285950
 TARBALL_AMD64 = 'debian_wheezy_amd64_sysroot.tgz'
 TARBALL_I386 = 'debian_wheezy_i386_sysroot.tgz'
+TARBALL_ARM = 'debian_wheezy_arm_sysroot.tgz'
+TARBALL_AMD64_SHA1SUM = '74b7231e12aaf45c5c5489d9aebb56bd6abb3653'
+TARBALL_I386_SHA1SUM = 'fe3d284926839683b00641bc66c9023f872ea4b4'
+TARBALL_ARM_SHA1SUM = 'fc2f54db168887c5190c4c6686c869bedf668b4e'
 SYSROOT_DIR_AMD64 = 'debian_wheezy_amd64-sysroot'
 SYSROOT_DIR_I386 = 'debian_wheezy_i386-sysroot'
+SYSROOT_DIR_ARM = 'debian_wheezy_arm-sysroot'
+
+
+def get_sha1(filename):
+  sha1 = hashlib.sha1()
+  with open(filename, 'rb') as f:
+    while True:
+      # Read in 1mb chunks, so it doesn't all have to be loaded into memory.
+      chunk = f.read(1024*1024)
+      if not chunk:
+        break
+      sha1.update(chunk)
+  return sha1.hexdigest()
 
 
 def main(args):
-  if options.arch not in ['amd64', 'i386']:
+  if options.arch not in ['amd64', 'i386', 'arm']:
     print 'Unknown architecture: %s' % options.arch
     return 1
 
@@ -45,33 +65,47 @@ def main(args):
     if not sys.platform.startswith('linux'):
       return 0
 
-    # Only install the sysroot for an Official Chrome Linux build.
-    defined = ['branding=Chrome', 'buildtype=Official']
-    undefined = ['chromeos=1']
     gyp_defines = os.environ.get('GYP_DEFINES', '')
-    for option in defined:
-      if option not in gyp_defines:
-        return 0
-    for option in undefined:
-      if option in gyp_defines:
-        return 0
+
+    # Only install the sysroot for an Official Chrome Linux build, except
+    # for ARM where we always use a sysroot.
+    if options.arch != 'arm':
+      defined = ['branding=Chrome', 'buildtype=Official']
+      undefined = ['chromeos=1']
+      for option in defined:
+        if option not in gyp_defines:
+          return 0
+      for option in undefined:
+        if option in gyp_defines:
+          return 0
 
     # Check for optional target_arch and only install for that architecture.
     # If target_arch is not specified, then only install for the host
     # architecture.
-    host_arch = ''
+    target_arch = ''
     if 'target_arch=x64' in gyp_defines:
-      host_arch = 'amd64'
+      target_arch = 'amd64'
     elif 'target_arch=ia32' in gyp_defines:
-      host_arch = 'i386'
+      target_arch = 'i386'
+    elif 'target_arch=arm' in gyp_defines:
+      target_arch = 'arm'
     else:
-      # Figure out host arch, like the host_arch variable in build/common.gypi.
-      machine_type = platform.machine()
-      if machine_type in ['amd64', 'x86_64']:
-        host_arch = 'amd64'
-      elif re.match('(i[3-6]86|i86pc)$', machine_type):
-        host_arch = 'i386'
-    if host_arch != options.arch:
+      # Figure out host arch using build/detect_host_arch.py and
+      # set target_arch to host arch
+      SRC_DIR = os.path.abspath(
+          os.path.join(SCRIPT_DIR, '..', '..', '..', '..'))
+      sys.path.append(os.path.join(SRC_DIR, 'build'))
+      import detect_host_arch
+
+      detected_host_arch = detect_host_arch.HostArch()
+      if detected_host_arch == 'x64':
+        target_arch = 'amd64'
+      elif detected_host_arch == 'ia32':
+        target_arch = 'i386'
+      elif detected_host_arch == 'arm':
+        target_arch = 'arm'
+
+    if target_arch != options.arch:
       return 0
 
   # The sysroot directory should match the one specified in build/common.gypi.
@@ -81,10 +115,23 @@ def main(args):
   if options.arch == 'amd64':
     sysroot = os.path.join(linux_dir, SYSROOT_DIR_AMD64)
     tarball_filename = TARBALL_AMD64
-  else:
+    tarball_sha1sum = TARBALL_AMD64_SHA1SUM
+    revision = REVISION_AMD64
+  elif options.arch == 'arm':
+    sysroot = os.path.join(linux_dir, SYSROOT_DIR_ARM)
+    tarball_filename = TARBALL_ARM
+    tarball_sha1sum = TARBALL_ARM_SHA1SUM
+    revision = REVISION_ARM
+  elif options.arch == 'i386':
     sysroot = os.path.join(linux_dir, SYSROOT_DIR_I386)
     tarball_filename = TARBALL_I386
-  url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, REVISION, tarball_filename)
+    tarball_sha1sum = TARBALL_I386_SHA1SUM
+    revision = REVISION_I386
+  else:
+    assert(false)
+
+
+  url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, revision, tarball_filename)
 
   stamp = os.path.join(sysroot, '.stamp')
   if os.path.exists(stamp):
@@ -99,7 +146,15 @@ def main(args):
     shutil.rmtree(sysroot)
   os.mkdir(sysroot)
   tarball = os.path.join(sysroot, tarball_filename)
-  subprocess.check_call(['curl', '-L', url, '-o', tarball])
+  print 'Downloading %s' % url
+  sys.stdout.flush()
+  sys.stderr.flush()
+  subprocess.check_call(['curl', '--fail', '-L', url, '-o', tarball])
+  sha1sum = get_sha1(tarball)
+  if sha1sum != tarball_sha1sum:
+    print 'Tarball sha1sum is wrong.'
+    print 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum)
+    return 1
   subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot])
   os.remove(tarball)
 
@@ -110,10 +165,9 @@ def main(args):
 
 if __name__ == '__main__':
   parser = optparse.OptionParser('usage: %prog [OPTIONS]')
-  parser.add_option('', '--linux-only', dest='linux_only', action='store_true',
+  parser.add_option('--linux-only', action='store_true',
                     default=False, help='Only install sysroot for official '
                                         'Linux builds')
-  parser.add_option('', '--arch', dest='arch',
-                    help='Sysroot architecture, i386 or amd64')
+  parser.add_option('--arch', help='Sysroot architecture: i386, amd64 or arm')
   options, args = parser.parse_args()
-  sys.exit(main(options))
+  sys.exit(main(args))