Add Android build config to mach/servobuild

This commit is contained in:
Matt Brubeck 2014-09-30 13:45:21 -07:00
parent d4e977a2be
commit b736256d53
4 changed files with 45 additions and 2 deletions

View file

@ -87,12 +87,21 @@ cd servo
``` sh ``` sh
git clone https://github.com/servo/servo git clone https://github.com/servo/servo
cd servo cd servo
ANDROID_TOOLCHAIN=/path/to/toolchain ANDROID_NDK=/path/to/ndk PATH=$PATH:/path/to/toolchain/bin ./mach build --target arm-linux-androideabi ANDROID_TOOLCHAIN=/path/to/toolchain ANDROID_NDK=/path/to/ndk PATH=$PATH:/path/to/toolchain/bin ./mach build --android
cd ports/android cd ports/android
ANDROID_NDK=/path/to/ndk ANDROID_SDK=/path/to/sdk make ANDROID_NDK=/path/to/ndk ANDROID_SDK=/path/to/sdk make
ANDROID_SDK=/path/to/sdk make install ANDROID_SDK=/path/to/sdk make install
``` ```
Rather than setting the `ANDROID_*` environment variables every time, you can
also create a `.servobuild` file and then edit it to contain the correct paths
to the Android SDK/NDK tools:
```
cp servobuild.example .servobuild
# edit .servobuild
```
## Running ## Running
### Commandline Arguments ### Commandline Arguments

View file

@ -27,17 +27,27 @@ class MachCommands(CommandBase):
@CommandArgument('--jobs', '-j', @CommandArgument('--jobs', '-j',
default=None, default=None,
help='Number of jobs to run in parallel') help='Number of jobs to run in parallel')
@CommandArgument('--android',
default=None,
action='store_true',
help='Build for Android')
@CommandArgument('--verbose', '-v', @CommandArgument('--verbose', '-v',
action='store_true', action='store_true',
help='Print verbose output') help='Print verbose output')
def build(self, target, release=False, jobs=None, verbose=False): def build(self, target=None, release=False, jobs=None, android=None,
verbose=False):
self.ensure_bootstrapped() self.ensure_bootstrapped()
if android is None:
android = self.config["build"]["android"]
opts = [] opts = []
if release: if release:
opts += ["--release"] opts += ["--release"]
if target: if target:
opts += ["--target", target] opts += ["--target", target]
elif android:
opts += ["--target", "arm-linux-androideabi"]
if jobs is not None: if jobs is not None:
opts += ["-j", jobs] opts += ["-j", jobs]
if verbose: if verbose:
@ -47,6 +57,10 @@ class MachCommands(CommandBase):
status = subprocess.call( status = subprocess.call(
["cargo", "build"] + opts, ["cargo", "build"] + opts,
env=self.build_env()) env=self.build_env())
if android:
status = status or subprocess.call(
["make", "-C", "ports/android"],
env=self.build_env())
elapsed = time() - build_start elapsed = time() - build_start
print("Build completed in %0.2fs" % elapsed) print("Build completed in %0.2fs" % elapsed)

View file

@ -73,6 +73,14 @@ class CommandBase(object):
self.config["tools"]["cargo-root"] = path.join( self.config["tools"]["cargo-root"] = path.join(
context.topdir, "cargo") context.topdir, "cargo")
self.config.setdefault("build", {})
self.config["build"].setdefault("android", False)
self.config.setdefault("android", {})
self.config["android"].setdefault("sdk", "")
self.config["android"].setdefault("ndk", "")
self.config["android"].setdefault("toolchain", "")
_rust_snapshot_path = None _rust_snapshot_path = None
def rust_snapshot_path(self): def rust_snapshot_path(self):
@ -111,6 +119,14 @@ class CommandBase(object):
os.pathsep, os.pathsep,
env.get("LD_LIBRARY_PATH", "")) env.get("LD_LIBRARY_PATH", ""))
# Paths to Android build tools:
if self.config["android"]["sdk"]:
env["ANDROID_SDK"] = self.config["android"]["sdk"]
if self.config["android"]["ndk"]:
env["ANDROID_NDK"] = self.config["android"]["ndk"]
if self.config["android"]["toolchain"]:
env["ANDROID_TOOLCHAIN"] = self.config["android"]["toolchain"]
return env return env
def ensure_bootstrapped(self): def ensure_bootstrapped(self):

View file

@ -9,6 +9,10 @@ rust-root = "/path/to/rust"
system-cargo = false system-cargo = false
cargo-root = "/path/to/cargo" cargo-root = "/path/to/cargo"
[build]
# Set "android = true" or use `mach build --android` to build the Android app.
android = false
# Android information # Android information
[android] [android]
sdk = "/opt/android-sdk" sdk = "/opt/android-sdk"