mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Add ./mach build-gonk command
This commit is contained in:
parent
748e0c55d1
commit
5b3868089e
3 changed files with 84 additions and 1 deletions
|
@ -137,6 +137,42 @@ class MachCommands(CommandBase):
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@Command('build-gonk',
|
||||||
|
description='Build the Gonk port',
|
||||||
|
category='build')
|
||||||
|
@CommandArgument('--jobs', '-j',
|
||||||
|
default=None,
|
||||||
|
help='Number of jobs to run in parallel')
|
||||||
|
@CommandArgument('--verbose', '-v',
|
||||||
|
action='store_true',
|
||||||
|
help='Print verbose output')
|
||||||
|
@CommandArgument('--release', '-r',
|
||||||
|
action='store_true',
|
||||||
|
help='Build in release mode')
|
||||||
|
def build_gonk(self, jobs=None, verbose=False, release=False):
|
||||||
|
self.ensure_bootstrapped()
|
||||||
|
|
||||||
|
ret = None
|
||||||
|
opts = []
|
||||||
|
if jobs is not None:
|
||||||
|
opts += ["-j", jobs]
|
||||||
|
if verbose:
|
||||||
|
opts += ["-v"]
|
||||||
|
if release:
|
||||||
|
opts += ["--release"]
|
||||||
|
|
||||||
|
opts += ["--target", "arm-linux-androideabi"]
|
||||||
|
env=self.build_env(gonk=True)
|
||||||
|
build_start = time()
|
||||||
|
with cd(path.join("ports", "gonk")):
|
||||||
|
ret = subprocess.call(["cargo", "build"] + opts, env=env)
|
||||||
|
elapsed = time() - build_start
|
||||||
|
|
||||||
|
print("Gonk build completed in %0.2fs" % elapsed)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@Command('build-tests',
|
@Command('build-tests',
|
||||||
description='Build the Servo test suites',
|
description='Build the Servo test suites',
|
||||||
category='build')
|
category='build')
|
||||||
|
|
|
@ -88,6 +88,10 @@ class CommandBase(object):
|
||||||
self.config["android"].setdefault("ndk", "")
|
self.config["android"].setdefault("ndk", "")
|
||||||
self.config["android"].setdefault("toolchain", "")
|
self.config["android"].setdefault("toolchain", "")
|
||||||
|
|
||||||
|
self.config.setdefault("gonk", {})
|
||||||
|
self.config["gonk"].setdefault("b2g", "")
|
||||||
|
self.config["gonk"].setdefault("product", "flame")
|
||||||
|
|
||||||
_rust_snapshot_path = None
|
_rust_snapshot_path = None
|
||||||
_cargo_build_id = None
|
_cargo_build_id = None
|
||||||
|
|
||||||
|
@ -104,7 +108,7 @@ class CommandBase(object):
|
||||||
self._cargo_build_id = open(filename).read().strip()
|
self._cargo_build_id = open(filename).read().strip()
|
||||||
return self._cargo_build_id
|
return self._cargo_build_id
|
||||||
|
|
||||||
def build_env(self):
|
def build_env(self, gonk=False):
|
||||||
"""Return an extended environment dictionary."""
|
"""Return an extended environment dictionary."""
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
extra_path = []
|
extra_path = []
|
||||||
|
@ -142,6 +146,38 @@ class CommandBase(object):
|
||||||
if self.config["android"]["toolchain"]:
|
if self.config["android"]["toolchain"]:
|
||||||
env["ANDROID_TOOLCHAIN"] = self.config["android"]["toolchain"]
|
env["ANDROID_TOOLCHAIN"] = self.config["android"]["toolchain"]
|
||||||
|
|
||||||
|
if gonk:
|
||||||
|
if self.config["gonk"]["b2g"]:
|
||||||
|
env["GONKDIR"] = self.config["gonk"]["b2g"]
|
||||||
|
if "GONKDIR" not in env:
|
||||||
|
# Things can get pretty opaque if this hasn't been set
|
||||||
|
print("Please set $GONKDIR in your environment or servobild file")
|
||||||
|
os.exit(1)
|
||||||
|
if self.config["gonk"]["product"]:
|
||||||
|
env["GONK_PRODUCT"] = self.config["gonk"]["product"]
|
||||||
|
|
||||||
|
env["CC"] = "arm-linux-androideabi-gcc"
|
||||||
|
env["ARCH_DIR"] = "arch-arm"
|
||||||
|
env["CPPFLAGS"] = ("-DANDROID -DTARGET_OS_GONK -DGR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE=1 "
|
||||||
|
"-isystem %(gonkdir)s/bionic/libc/%(archdir)s/include -isystem %(gonkdir)s/bionic/libc/include/ "
|
||||||
|
"-isystem %(gonkdir)s/bionic/libc/kernel/common -isystem %(gonkdir)s/bionic/libc/kernel/%(archdir)s "
|
||||||
|
"-isystem %(gonkdir)s/bionic/libm/include -I%(gonkdir)s/system -I%(gonkdir)s/system/core/include "
|
||||||
|
"-isystem %(gonkdir)s/bionic -I%(gonkdir)s/frameworks/native/opengl/include -I%(gonkdir)s/external/zlib "
|
||||||
|
"-I%(gonkdir)s/hardware/libhardware/include/hardware/") % {"gonkdir": env["GONKDIR"], "archdir": env["ARCH_DIR"] }
|
||||||
|
env["CXXFLAGS"] = ("-O2 -mandroid -fPIC %(cppflags)s -I%(gonkdir)s/ndk/sources/cxx-stl/stlport/stlport "
|
||||||
|
"-I%(gonkdir)s/ndk/sources/cxx-stl/system/include") % {"gonkdir": env["GONKDIR"], "cppflags": env["CPPFLAGS"] }
|
||||||
|
env["CFLAGS"] = ("-O2 -mandroid -fPIC %(cppflags)s -I%(gonkdir)s/ndk/sources/cxx-stl/stlport/stlport "
|
||||||
|
"-I%(gonkdir)s/ndk/sources/cxx-stl/system/include") % {"gonkdir": env["GONKDIR"], "cppflags": env["CPPFLAGS"] }
|
||||||
|
|
||||||
|
another_extra_path = path.join(env["GONKDIR"], "prebuilts", "gcc", "linux-x86", "arm", "arm-linux-androideabi-4.7", "bin")
|
||||||
|
env["PATH"] = "%s%s%s" % (another_extra_path, os.pathsep, env["PATH"])
|
||||||
|
env["LDFLAGS"] = ("-mandroid -L%(gonkdir)s/out/target/product/%(gonkproduct)s/obj/lib "
|
||||||
|
"-Wl,-rpath-link=%(gonkdir)s/out/target/product/%(gonkproduct)s/obj/lib "
|
||||||
|
"--sysroot=%(gonkdir)s/out/target/product/%(gonkproduct)s/obj/") % {"gonkdir": env["GONKDIR"], "gonkproduct": env["GONK_PRODUCT"] }
|
||||||
|
|
||||||
|
# Not strictly necessary for a vanilla build, but might be when tweaking the openssl build
|
||||||
|
env["OPENSSL_PATH"] = "%(gonkdir)s/out/target/product/%(gonkproduct)s/obj/lib" % {"gonkdir": env["GONKDIR"], "gonkproduct": env["GONK_PRODUCT"] }
|
||||||
|
|
||||||
# FIXME: These are set because they are the variable names that
|
# FIXME: These are set because they are the variable names that
|
||||||
# android-rs-glue expects. However, other submodules have makefiles that
|
# android-rs-glue expects. However, other submodules have makefiles that
|
||||||
# reference the env var names above. Once glutin is enabled and set as
|
# reference the env var names above. Once glutin is enabled and set as
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
# Copy this file to .servobuild in the Servo root directory
|
||||||
|
# Be sure to set the cache-dir correctly, otherwise extra snapshots
|
||||||
|
# may get downloaded
|
||||||
|
|
||||||
# Tool options
|
# Tool options
|
||||||
[tools]
|
[tools]
|
||||||
# Where Rust compiler snapshots and other downloads will be stored. Can be
|
# Where Rust compiler snapshots and other downloads will be stored. Can be
|
||||||
|
@ -23,3 +27,10 @@ debug-mozjs = false
|
||||||
sdk = "/opt/android-sdk"
|
sdk = "/opt/android-sdk"
|
||||||
ndk = "/opt/android-ndk"
|
ndk = "/opt/android-ndk"
|
||||||
toolchain = "/opt/android-toolchain"
|
toolchain = "/opt/android-toolchain"
|
||||||
|
|
||||||
|
# Gonk information
|
||||||
|
# Please fill the ndk/toolchain for android too
|
||||||
|
[gonk]
|
||||||
|
# Path to B2G repo and build
|
||||||
|
b2g = "/opt/B2G"
|
||||||
|
product = "flame"
|
Loading…
Add table
Add a link
Reference in a new issue