aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/servo/bootstrap_commands.py53
-rw-r--r--python/servo/util.py13
2 files changed, 65 insertions, 1 deletions
diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py
index b422a553003..f2f672f7653 100644
--- a/python/servo/bootstrap_commands.py
+++ b/python/servo/bootstrap_commands.py
@@ -13,6 +13,7 @@ import base64
import json
import os
import os.path as path
+import platform
import re
import subprocess
import sys
@@ -28,7 +29,7 @@ from mach.decorators import (
import servo.bootstrap as bootstrap
from servo.command_base import CommandBase, cd, check_call
-from servo.util import delete, download_bytes
+from servo.util import delete, download_bytes, download_file, check_hash, extract
@CommandProvider
@@ -54,6 +55,56 @@ class MachCommands(CommandBase):
def bootstrap(self, force=False):
return bootstrap.bootstrap(self.context, force=force)
+ @Command('bootstrap-android',
+ description='Install the Android SDK and NDK.',
+ category='bootstrap')
+ def bootstrap_android(self):
+
+ ndk_version = "r12b"
+ ndk_sha512 = "2d85b476436ca50896e4b7c5d0f15547fd14a6ebec7e0081022b28f791709af7" \
+ "8ea5ebddcdf4722b5e94daeac288d509bd5f240b0280167edef8e199da3d0501"
+
+ sdk_version = "r25.2.3"
+ sdk_sha512 = "dfc30ee3e2714cf8008ab1f99757deded002d21b23a8d2ab07952e1afd1c9312" \
+ "4ddec06660babf6a46c54e5e7e135c8c0cb4cc512378a8509da074dbf7e253d7"
+ sdk_platform = "25"
+ sdk_build_tools = "25.0.2"
+
+
+ def download(kind, name, sha512):
+ toolchains = path.join(self.context.topdir, "android-toolchains")
+ directory = path.join(toolchains, kind)
+ final = path.join(directory, name)
+ if path.isdir(final):
+ return final
+
+ base_url = "https://dl.google.com/android/repository/"
+ filename = name + ".zip"
+ url = base_url + filename
+ archive = path.join(directory, filename)
+ extract_to = final + ".tmp"
+
+ if not path.isdir(directory):
+ os.makedirs(directory)
+ download_file(filename, url, archive)
+ check_hash(archive, sha512, "sha512")
+ print("Extracting " + filename)
+ extract(archive, extract_to)
+ contents = os.listdir(extract_to)
+ assert len(contents) == 1
+ extracted_dir = path.join(extract_to, contents[0])
+ assert path.isdir(extracted_dir)
+ os.rename(extracted_dir, final)
+ os.rmdir(extract_to)
+ return final
+
+ system = platform.system().lower()
+ machine = platform.machine().lower()
+ os_ = {"darwin": "macosx"}.get(system, system)
+ arch = {"i386": "x86"}.get(machine, machine)
+ ndk = download("ndk", "android-ndk-%s-%s-%s" % (ndk_version, system, arch), ndk_sha512)
+ sdk = download("sdk", "tools_%s-%s" % (sdk_version, os_), sdk_sha512)
+
@Command('update-hsts-preload',
description='Download the HSTS preload list',
category='bootstrap')
diff --git a/python/servo/util.py b/python/servo/util.py
index 2043b0e2868..a4e126d3240 100644
--- a/python/servo/util.py
+++ b/python/servo/util.py
@@ -9,6 +9,7 @@
from __future__ import absolute_import, print_function, unicode_literals
+import hashlib
import os
import os.path
import platform
@@ -165,3 +166,15 @@ def extract(src, dst, movedir=None):
os.rmdir(movedir)
os.remove(src)
+
+def check_hash(filename, expected, algorithm):
+ hasher = hashlib.new(algorithm)
+ with open(filename, "rb") as f:
+ while True:
+ block = f.read(16 * 1024)
+ if len(block) == 0:
+ break
+ hasher.update(block)
+ if hasher.hexdigest() != expected:
+ print("Incorrect {} hash for {}".format(algorithm, filename))
+ sys.exit(1)