Closed Bug 959228 Opened 10 years ago Closed 10 years ago

need android build slave for Servo

Categories

(Release Engineering :: General, defect)

x86
Linux
defect
Not set
major

Tracking

(Not tracked)

RESOLVED WONTFIX

People

(Reporter: jack, Assigned: larsberg)

Details

We'd like one of our linux build slaves repurposed for doing android cross compiles. This would just check that Servo builds, but not run the tests yet as we don't have a suitable test harness yet.

This requires:

1) Android NDK and SDK installed
2) Android toolchain crated somewhere (ndk/build/tools/make-standalone-toolchain.sh)
3) Servo's configure will need `--android-sdk-path=/path/to/sdk`, `--android-ndk-path=/path/to/ndk`, `--android-cross-path=/path/to/toolchain`, and `--target-triples=arm-linux-androideabi`.

Whatever version of the SDK/NDK is the most current is fine. I'm not sure what versions we're compatible with. If it's more convenient to use an older one and that is able to build, that is fine too.
Still trying to find an owner for this.

> 2) Android toolchain crated somewhere
> (ndk/build/tools/make-standalone-toolchain.sh)

Is something we need to run once, or as part of every build (I'm guessing the former, just want to be sure).

> 3) Servo's configure will need `--android-sdk-path=/path/to/sdk`,
> `--android-ndk-path=/path/to/ndk`,
> `--android-cross-path=/path/to/toolchain`, and
> `--target-triples=arm-linux-androideabi`.
> 
> Whatever version of the SDK/NDK is the most current is fine. I'm not sure
> what versions we're compatible with. If it's more convenient to use an older
> one and that is able to build, that is fine too.

The latest we have available right now is NDK 8 and SDK 16. Hopefully those will work. If not, we'll have to look at making newer ones available.
make-standalone-toolchain only needs to be run once.

After some discussion with Lars, it seems that latest Rust requires API level 18. I'm not sure if NDK 9 is required, but that's what we've been using.
So, there's a few things that need to be done here:
1) Build an RPM of version 18 of the Android SDK. We already have a spec file for building version 16, and it should be relatively easy to tweak it to build 18. This will probably need to be done on something imaged with our base image. The spec file is at https://github.com/mozilla/build-puppet/blob/master/modules/packages/manifests/mozilla/android_sdk16.spec, and both https://wiki.mozilla.org/ReleaseEngineering/How_To/Build_An_Android_SDK_rpm and https://bugzilla.mozilla.org/show_bug.cgi?id=775720 will probably help with the build. If we do end up needing NDK 9 that may end up being trickier. We have a spec file for it (https://hg.mozilla.org/build/rpm-sources/file/73c170662308/android-ndk/centos6-i686/android-ndk8.spec), but I'm not sure how well it'll work. We haven't built a new NDK in ages.

2) Create a mozharness config. Should be similar to the Linux one (https://github.com/mozilla/servo/tree/master/bld/linux.py), but include the appropriate packages (like the SDK). It's probably worthwhile putting the configure options in here somewhere (see below for more). If "make check" doesn't make sense to run for Android you'll need to modify the actions to turn it off.

3) Modify servo_build.py (https://github.com/mozilla/build-mozharness/blob/master/scripts/servo_build.py) to support extra configure args. The arg will need to be listed in config_options and used in the configure method.

4) Enable the build in Buildbot. This should be as simple as adding a new builder (a block like https://github.com/mozilla/build-puppet/blob/master/modules/buildmaster/files/servo/master.cfg#L141).

5) Add the new builder to the builder list that
Whoops, the last part should read:
5) Add the new builder to the builder list that gets passed down to bors.cfg: https://github.com/mozilla/build-puppet/blob/master/manifests/servo-config.pp#L107
I just became aware of bug 933189, which might end up with someone else building the SDK (if they upgrade all the way the 18), or at least making it much easier to (if they stick with 17).
After I finish the current Rust upgrade, we should be able to run with Android 16, as we have gotten a workaround from the Rust team to no longer require an 18+ feature (weak symbols).
(In reply to lbergstrom from comment #6)
> After I finish the current Rust upgrade, we should be able to run with
> Android 16, as we have gotten a workaround from the Rust team to no longer
> require an 18+ feature (weak symbols).

Oh, great. You can scratch all of step 1 if SDK 16/NDK 8 will work for you!
Assignee: nobody → lbergstrom
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → WONTFIX
Component: General Automation → General
You need to log in before you can comment on or make changes to this bug.