mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Add Android build config to mach/servobuild
This commit is contained in:
parent
d4e977a2be
commit
b736256d53
4 changed files with 45 additions and 2 deletions
11
README.md
11
README.md
|
@ -87,12 +87,21 @@ cd servo
|
|||
``` sh
|
||||
git clone https://github.com/servo/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
|
||||
ANDROID_NDK=/path/to/ndk ANDROID_SDK=/path/to/sdk make
|
||||
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
|
||||
|
||||
### Commandline Arguments
|
||||
|
|
|
@ -27,17 +27,27 @@ class MachCommands(CommandBase):
|
|||
@CommandArgument('--jobs', '-j',
|
||||
default=None,
|
||||
help='Number of jobs to run in parallel')
|
||||
@CommandArgument('--android',
|
||||
default=None,
|
||||
action='store_true',
|
||||
help='Build for Android')
|
||||
@CommandArgument('--verbose', '-v',
|
||||
action='store_true',
|
||||
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()
|
||||
|
||||
if android is None:
|
||||
android = self.config["build"]["android"]
|
||||
|
||||
opts = []
|
||||
if release:
|
||||
opts += ["--release"]
|
||||
if target:
|
||||
opts += ["--target", target]
|
||||
elif android:
|
||||
opts += ["--target", "arm-linux-androideabi"]
|
||||
if jobs is not None:
|
||||
opts += ["-j", jobs]
|
||||
if verbose:
|
||||
|
@ -47,6 +57,10 @@ class MachCommands(CommandBase):
|
|||
status = subprocess.call(
|
||||
["cargo", "build"] + opts,
|
||||
env=self.build_env())
|
||||
if android:
|
||||
status = status or subprocess.call(
|
||||
["make", "-C", "ports/android"],
|
||||
env=self.build_env())
|
||||
elapsed = time() - build_start
|
||||
|
||||
print("Build completed in %0.2fs" % elapsed)
|
||||
|
|
|
@ -73,6 +73,14 @@ class CommandBase(object):
|
|||
self.config["tools"]["cargo-root"] = path.join(
|
||||
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
|
||||
|
||||
def rust_snapshot_path(self):
|
||||
|
@ -111,6 +119,14 @@ class CommandBase(object):
|
|||
os.pathsep,
|
||||
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
|
||||
|
||||
def ensure_bootstrapped(self):
|
||||
|
|
|
@ -9,6 +9,10 @@ rust-root = "/path/to/rust"
|
|||
system-cargo = false
|
||||
cargo-root = "/path/to/cargo"
|
||||
|
||||
[build]
|
||||
# Set "android = true" or use `mach build --android` to build the Android app.
|
||||
android = false
|
||||
|
||||
# Android information
|
||||
[android]
|
||||
sdk = "/opt/android-sdk"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue