aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorImanol Fernandez <mortimergoro@gmail.com>2017-05-08 14:26:07 +0200
committerImanol Fernandez <mortimergoro@gmail.com>2017-05-08 17:28:59 +0200
commit01228282cd7725a1c8d822006a42acc84c4eef2c (patch)
tree953eb66b57d0430633121061a2ea16c8041056cb /python
parentf6bd158fd4287226a881e58020f7dc154fa32532 (diff)
downloadservo-01228282cd7725a1c8d822006a42acc84c4eef2c.tar.gz
servo-01228282cd7725a1c8d822006a42acc84c4eef2c.zip
Support for Android armv7 and aarch64 target triples
Diffstat (limited to 'python')
-rw-r--r--python/servo/build_commands.py13
-rw-r--r--python/servo/command_base.py29
-rw-r--r--python/servo/package_commands.py14
3 files changed, 49 insertions, 7 deletions
diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py
index 792b6071145..7c256979ed4 100644
--- a/python/servo/build_commands.py
+++ b/python/servo/build_commands.py
@@ -221,11 +221,14 @@ class MachCommands(CommandBase):
opts += ["-j", jobs]
if verbose:
opts += ["-v"]
+
if android:
target = self.config["android"]["target"]
if target:
opts += ["--target", target]
+ if not android:
+ android = self.handle_android_target(target)
self.ensure_bootstrapped(target=target)
@@ -277,10 +280,15 @@ class MachCommands(CommandBase):
elif cpu_type in ["x86_64", "x86-64", "x64", "amd64"]:
host_suffix = "x86_64"
host = os_type + "-" + host_suffix
+
+ android_platform = self.config["android"]["platform"]
+ android_toolchain = self.config["android"]["toolchain_name"]
+ android_arch = "arch-" + self.config["android"]["arch"]
+
env['PATH'] = path.join(
- env['ANDROID_NDK'], "toolchains", "arm-linux-androideabi-4.9", "prebuilt", host, "bin"
+ env['ANDROID_NDK'], "toolchains", android_toolchain, "prebuilt", host, "bin"
) + ':' + env['PATH']
- env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms", "android-18", "arch-arm")
+ env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms", android_platform, android_arch)
support_include = path.join(env['ANDROID_NDK'], "sources", "android", "support", "include")
cxx_include = path.join(
env['ANDROID_NDK'], "sources", "cxx-stl", "llvm-libc++", "libcxx", "include")
@@ -294,6 +302,7 @@ class MachCommands(CommandBase):
"-I" + support_include,
"-I" + cxx_include,
"-I" + cxxabi_include])
+ env["NDK_ANDROID_VERSION"] = android_platform.replace("android-", "")
cargo_binary = "cargo" + BIN_SUFFIX
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index be275347007..e3cb447779c 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -277,8 +277,7 @@ class CommandBase(object):
self.config["android"].setdefault("sdk", "")
self.config["android"].setdefault("ndk", "")
self.config["android"].setdefault("toolchain", "")
- self.config["android"].setdefault("platform", "android-18")
- self.config["android"].setdefault("target", "arm-linux-androideabi")
+ self.handle_android_target("arm-linux-androideabi")
self.set_cargo_root()
self.set_use_stable_rust(False)
@@ -538,7 +537,31 @@ class CommandBase(object):
return path.join(self.context.topdir, "support", "android")
def android_build_dir(self, dev):
- return path.join(self.get_target_dir(), "arm-linux-androideabi", "debug" if dev else "release")
+ return path.join(self.get_target_dir(), self.config["android"]["target"], "debug" if dev else "release")
+
+ def handle_android_target(self, target):
+ if target == "arm-linux-androideabi":
+ self.config["android"]["platform"] = "android-18"
+ self.config["android"]["target"] = target
+ self.config["android"]["arch"] = "arm"
+ self.config["android"]["lib"] = "armeabi"
+ self.config["android"]["toolchain_name"] = target + "-4.9"
+ return True
+ elif target == "armv7-linux-androideabi":
+ self.config["android"]["platform"] = "android-18"
+ self.config["android"]["target"] = target
+ self.config["android"]["arch"] = "arm"
+ self.config["android"]["lib"] = "armeabi-v7a"
+ self.config["android"]["toolchain_name"] = "arm-linux-androideabi-4.9"
+ return True
+ elif target == "aarch64-linux-android":
+ self.config["android"]["platform"] = "android-21"
+ self.config["android"]["target"] = target
+ self.config["android"]["arch"] = "arm64"
+ self.config["android"]["lib"] = "arm64-v8a"
+ self.config["android"]["toolchain_name"] = target + "-4.9"
+ return True
+ return False
def ensure_bootstrapped(self, target=None):
if self.context.bootstrapped:
diff --git a/python/servo/package_commands.py b/python/servo/package_commands.py
index 63921037c25..ad842c9258a 100644
--- a/python/servo/package_commands.py
+++ b/python/servo/package_commands.py
@@ -141,10 +141,20 @@ class PackageCommands(CommandBase):
dir_to_root = self.get_top_dir()
target_dir = path.dirname(binary_path)
if android:
+ android_target = self.config["android"]["target"]
+ if "aarch64" in android_target:
+ build_type = "Arm64"
+ elif "armv7" in android_target:
+ build_type = "Armv7"
+ else:
+ build_type = "Arm"
+
if dev:
- task_name = "assembleArmDebug"
+ build_mode = "Debug"
else:
- task_name = "assembleArmRelease"
+ build_mode = "Release"
+
+ task_name = "assemble" + build_type + build_mode
try:
with cd(path.join("support", "android", "apk")):
subprocess.check_call(["./gradlew", "--no-daemon", task_name], env=env)