mirror of
https://github.com/servo/servo.git
synced 2025-06-13 02:44:29 +00:00
Add ./mach bootstrap-android
This commit is contained in:
parent
c71c55e542
commit
b9d5f11b20
3 changed files with 66 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,6 +2,7 @@
|
||||||
/.cargo/*
|
/.cargo/*
|
||||||
!/.cargo/config.*
|
!/.cargo/config.*
|
||||||
/.servobuild
|
/.servobuild
|
||||||
|
/android-toolchains
|
||||||
/target
|
/target
|
||||||
/ports/android/bin
|
/ports/android/bin
|
||||||
/ports/android/libs
|
/ports/android/libs
|
||||||
|
|
|
@ -13,6 +13,7 @@ import base64
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import os.path as path
|
import os.path as path
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
@ -28,7 +29,7 @@ from mach.decorators import (
|
||||||
|
|
||||||
import servo.bootstrap as bootstrap
|
import servo.bootstrap as bootstrap
|
||||||
from servo.command_base import CommandBase, cd, check_call
|
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
|
@CommandProvider
|
||||||
|
@ -54,6 +55,56 @@ class MachCommands(CommandBase):
|
||||||
def bootstrap(self, force=False):
|
def bootstrap(self, force=False):
|
||||||
return bootstrap.bootstrap(self.context, force=force)
|
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',
|
@Command('update-hsts-preload',
|
||||||
description='Download the HSTS preload list',
|
description='Download the HSTS preload list',
|
||||||
category='bootstrap')
|
category='bootstrap')
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
from __future__ import absolute_import, print_function, unicode_literals
|
from __future__ import absolute_import, print_function, unicode_literals
|
||||||
|
|
||||||
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import platform
|
import platform
|
||||||
|
@ -165,3 +166,15 @@ def extract(src, dst, movedir=None):
|
||||||
os.rmdir(movedir)
|
os.rmdir(movedir)
|
||||||
|
|
||||||
os.remove(src)
|
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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue