aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-09-17 13:12:10 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-09-24 15:14:46 +0200
commitb27881523c021aa83407b75ea2dd271af69ca20d (patch)
tree87d4eccbb9585db026c55adb0aacba313698be2c /python
parentc576412f8358db641347b878febc7d7af022b4c3 (diff)
downloadservo-b27881523c021aa83407b75ea2dd271af69ca20d.tar.gz
servo-b27881523c021aa83407b75ea2dd271af69ca20d.zip
Enable GStreamer support on Android
Diffstat (limited to 'python')
-rw-r--r--python/servo/build_commands.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py
index 8182f42dc9e..ff6429622a4 100644
--- a/python/servo/build_commands.py
+++ b/python/servo/build_commands.py
@@ -13,8 +13,12 @@ import datetime
import os
import os.path as path
import platform
-import sys
+import re
import shutil
+import subprocess
+import sys
+import urllib
+import zipfile
from time import time
@@ -394,6 +398,45 @@ class MachCommands(CommandBase):
if not os.path.exists(aar_out_dir):
os.makedirs(aar_out_dir)
env["AAR_OUT_DIR"] = aar_out_dir
+ # GStreamer and its dependencies use pkg-config and this flag is required
+ # to make it work in a cross-compilation context.
+ env["PKG_CONFIG_ALLOW_CROSS"] = '1'
+ # Build the name of the package containing all GStreamer dependencies
+ # according to the build target.
+ gst_lib = None
+ if re.match("arm-([a-z])*-androideabi", target):
+ gst_lib = "gst-build-armeabi"
+ elif re.match("armv7-([a-z])*-androideabi", target):
+ gst_lib = "gst-build-armeabi-v7a"
+ elif re.match("x86_64-([a-z])*-android", target):
+ gst_lib = "gst-build-x86_64"
+ elif re.match("i686-([a-z])*-android", target):
+ gst_lib = "gst-build-x86"
+ else:
+ raise Exception("Invalid target architecture '%s'" % target)
+
+ gst_lib_zip = "%s.zip" % gst_lib
+ gst_dir = os.path.join(base_path, "gstreamer")
+ gst_lib_path = os.path.join(base_path, gst_dir, gst_lib)
+ pkg_config_path = os.path.join(gst_lib_path, "pkgconfig")
+ env["PKG_CONFIG_PATH"] = pkg_config_path
+ if not os.path.exists(gst_lib_path):
+ # Download GStreamer dependencies if they have not already been downloaded
+ print("Downloading GStreamer dependencies")
+ gst_url = "https://github.com/servo/libgstreamer_android_gen/blob/master/out/%s?raw=true" % gst_lib_zip
+ urllib.urlretrieve(gst_url, gst_lib_zip)
+ zip_ref = zipfile.ZipFile(gst_lib_zip, "r")
+ zip_ref.extractall(gst_dir)
+ os.remove(gst_lib_zip)
+
+ # Change pkgconfig info to make all GStreamer dependencies point
+ # to the libgstreamer_android.so bundle.
+ for each in os.listdir(pkg_config_path):
+ if each.endswith('.pc'):
+ print("Setting pkgconfig info for %s" % each)
+ pc = os.path.join(pkg_config_path, each)
+ expr = "s#libdir=.*#libdir=%s#g" % gst_lib_path
+ subprocess.call(["perl", "-i", "-pe", expr, pc])
if very_verbose:
print (["Calling", "cargo", "build"] + opts)