Skip to content

Commit

Permalink
Add --build and --emulator-x86 to ./mach bootstrap-android
Browse files Browse the repository at this point in the history
This allows not downloading dependencies that are not needed for a praticular task.
  • Loading branch information
SimonSapin committed Oct 11, 2018
1 parent 597f7c1 commit 89e1878
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 31 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -249,7 +249,7 @@ linker = "lld-link.exe"
#### Cross-compilation for Android

Run `./mach bootstrap-android` to get Android-specific tools. See wiki for
Run `./mach bootstrap-android --build` to get Android-specific tools. See wiki for
[details](https://github.com/servo/servo/wiki/Building-for-Android).

## The Rust compiler
Expand Down
2 changes: 1 addition & 1 deletion etc/ci/bootstrap-android-and-accept-licences.sh
Expand Up @@ -14,4 +14,4 @@ set -o pipefail
set +o pipefail

cd $(dirname ${0})/../..
yes | ./mach bootstrap-android
yes | ./mach bootstrap-android "${@}"
8 changes: 4 additions & 4 deletions etc/ci/buildbot_steps.yml
Expand Up @@ -180,7 +180,7 @@ android:
- ./mach clean-nightlies --keep 3 --force
- ./mach clean-cargo-cache --keep 3 --force
- ./etc/ci/clean_build_artifacts.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh --build
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach build --android --dev
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach package --android --dev
- bash ./etc/ci/lockfile_changed.sh
Expand All @@ -191,7 +191,7 @@ android-mac:
commands:
- ./mach clean-nightlies --keep 3 --force
- ./mach clean-cargo-cache --keep 3 --force
- ./etc/ci/bootstrap-android-and-accept-licences.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh --build
- ./mach build --android --dev
- ./mach package --android --dev
- bash ./etc/ci/lockfile_changed.sh
Expand All @@ -205,7 +205,7 @@ android-x86:
- ./mach clean-nightlies --keep 3 --force
- ./mach clean-cargo-cache --keep 3 --force
- ./etc/ci/clean_build_artifacts.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh --build --emulator-x86
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach build --target i686-linux-android --release
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach test-android-startup --release
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach test-wpt-android --release /_mozilla/mozilla/DOMParser.html /_mozilla/mozilla/webgl/context_creation_error.html
Expand All @@ -220,7 +220,7 @@ android-nightly:
- ./mach clean-nightlies --keep 3 --force
- ./mach clean-cargo-cache --keep 3 --force
- ./etc/ci/clean_build_artifacts.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh
- ./etc/ci/bootstrap-android-and-accept-licences.sh --build
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach build --android --release
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach package --android --release --maven
- env --unset ANDROID_NDK --unset ANDROID_SDK ./mach build --target=i686-linux-android --release
Expand Down
2 changes: 1 addition & 1 deletion etc/taskcluster/decision_task.py
Expand Up @@ -87,7 +87,7 @@ def android_arm32():
# wget: servo-media-gstreamer’s build script
.with_script("""
apt-get install -y --no-install-recommends openjdk-8-jdk-headless file wget
./etc/ci/bootstrap-android-and-accept-licences.sh
yes | ./mach bootstrap-android --build
./mach build --android --release
""")
.with_artifacts(
Expand Down
58 changes: 34 additions & 24 deletions python/servo/bootstrap_commands.py
Expand Up @@ -79,16 +79,21 @@ def bootstrap_gstreamer(self, force=False):
@Command('bootstrap-android',
description='Install the Android SDK and NDK.',
category='bootstrap')
def bootstrap_android(self):
@CommandArgument('--build',
action='store_true',
help='Install Android-specific dependencies for building')
@CommandArgument('--emulator-x86',
action='store_true',
help='Install Android x86 emulator and system image')
def bootstrap_android(self, build=False, emulator_x86=False):
if not (build or emulator_x86):
print("Must specify `--build` or `--emulator-x86` or both.")

ndk = "android-ndk-r12b-{system}-{arch}"
tools = "sdk-tools-{system}-4333796"

sdk_build_tools = "27.0.3"
emulator_images = [
("servo-arm", "25", "google_apis;armeabi-v7a"),
("servo-x86", "28", "google_apis;x86"),
]
emulator_platform = "android-28"
emulator_image = "system-images;%s;google_apis;x86" % emulator_platform

known_sha1 = {
# https://dl.google.com/android/repository/repository2-1.xml
Expand Down Expand Up @@ -135,29 +140,34 @@ def download(target_dir, name, flatten=False):
system = platform.system().lower()
machine = platform.machine().lower()
arch = {"i386": "x86"}.get(machine, machine)
download("ndk", ndk.format(system=system, arch=arch), flatten=True)
if build:
download("ndk", ndk.format(system=system, arch=arch), flatten=True)
download("sdk", tools.format(system=system))

subprocess.check_call([
path.join(toolchains, "sdk", "tools", "bin", "sdkmanager"),
"platform-tools",
"build-tools;" + sdk_build_tools,
"emulator",
] + [
arg
for avd_name, api_level, system_image in emulator_images
for arg in [
"platforms;android-" + api_level,
"system-images;android-%s;%s" % (api_level, system_image),
components = []
if emulator_x86:
components += [
"platform-tools",
"emulator",
"platforms;" + emulator_platform,
emulator_image,
]
])
for avd_name, api_level, system_image in emulator_images:
if build:
components += [
"platforms;android-18",
]
subprocess.check_call(
[path.join(toolchains, "sdk", "tools", "bin", "sdkmanager")] + components
)

if emulator_x86:
avd_path = path.join(toolchains, "avd", "servo-x86")
process = subprocess.Popen(stdin=subprocess.PIPE, stdout=subprocess.PIPE, args=[
path.join(toolchains, "sdk", "tools", "bin", "avdmanager"),
"create", "avd",
"--path", path.join(toolchains, "avd", avd_name),
"--name", avd_name,
"--package", "system-images;android-%s;%s" % (api_level, system_image),
"--path", avd_path,
"--name", "servo-x86",
"--package", emulator_image,
"--force",
])
output = b""
Expand All @@ -175,7 +185,7 @@ def download(target_dir, name, flatten=False):
if output.endswith(b"Do you wish to create a custom hardware profile? [no]"):
process.stdin.write("no\n")
assert process.wait() == 0
with open(path.join(toolchains, "avd", avd_name, "config.ini"), "a") as f:
with open(path.join(avd_path, "config.ini"), "a") as f:
f.write("disk.dataPartition.size=2G\n")

@Command('update-hsts-preload',
Expand Down

0 comments on commit 89e1878

Please sign in to comment.