Add example cross files
authorXavier Claessens <xavier.claessens@collabora.com>
Mon, 3 Dec 2018 14:16:14 +0000 (09:16 -0500)
committerJordan Petridis <jpetridis@gnome.org>
Tue, 11 Dec 2018 15:47:07 +0000 (15:47 +0000)
These are example cross files that will be used by the CI. They
could require manual editing to change hardcoded paths to toolchains
when used on different environment.

cross-files/README.md [new file with mode: 0644]
cross-files/android_arm64_api28.txt [new file with mode: 0644]
cross-files/mingw_w64_x86-64.txt [new file with mode: 0644]

diff --git a/cross-files/README.md b/cross-files/README.md
new file mode 100644 (file)
index 0000000..469ef12
--- /dev/null
@@ -0,0 +1,40 @@
+# Cross compiling GStreamer with gst-build
+
+GStreamer can be cross compiled for various platforms using gst-build. However,
+only dependencies that are ported to the Meson build system will be built. It is
+recommended to use Cerbero to cross compile GStreamer when other external
+dependencies are required.
+
+Once the toolchain is installed and a Meson cross file is created, to build
+GStreamer simply run for example: `meson --cross-file cross-files/mingw_w64_x86-64.txt builddir`.
+
+## Android
+
+Requires Android API level >= 28, previous versions are missing *iconv* dependency.
+
+- Download and extract the [NDK](https://developer.android.com/ndk/)
+- Create a standalone toolchain targeting your arch and API level:
+`./build/tools/make_standalone_toolchain.py --arch $arch --api $api --install-dir $toolchain_path`
+- Create a Meson cross file, you can use `android_arm64_api28.txt` as example
+  and change CPU architectures and toolchain path.
+
+Notes:
+- On fedora the Android NDK requires the `ncurses-compat-libs` package.
+
+## Windows
+
+GStreamer can be cross compiled for Windows using mingw packaged in most
+distribution.
+
+The Meson cross file `mingw_w64_x86-64.txt` can be used when targeting amd64
+architecture, or adapted for i686 arch.
+
+### Fedora
+
+- Install the toolchain packages: `mingw64-gcc`, `mingw64-gcc-c++`. Fedora
+  provides many other optional dependencies that could be installed as well.
+  For example: `mingw64-gettext`, `mingw64-libffi`, `mingw64-zlib`.
+
+### Ubuntu
+
+- Install the toolchain package: `gcc-mingw-w64`.
diff --git a/cross-files/android_arm64_api28.txt b/cross-files/android_arm64_api28.txt
new file mode 100644 (file)
index 0000000..27b803d
--- /dev/null
@@ -0,0 +1,16 @@
+[host_machine]
+system = 'android'
+cpu_family = 'aarch64'
+cpu = 'arm64'
+endian = 'little'
+
+[properties]
+c_args = ['--sysroot', '/opt/android-arm64-api28/sysroot']
+cpp_args = ['--sysroot', '/opt/android-arm64-api28/sysroot']
+
+[binaries]
+c = '/opt/android-arm64-api28/bin/aarch64-linux-android-clang'
+cpp = '/opt/android-arm64-api28/bin/aarch64-linux-android-clang++'
+ar = '/opt/android-arm64-api28/bin/aarch64-linux-android-ar'
+strip = '/opt/android-arm64-api28/bin/aarch64-linux-android-strip'
+pkgconfig = 'false'
diff --git a/cross-files/mingw_w64_x86-64.txt b/cross-files/mingw_w64_x86-64.txt
new file mode 100644 (file)
index 0000000..1897b68
--- /dev/null
@@ -0,0 +1,17 @@
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
+
+[properties]
+c_args = []
+c_link_args = []
+
+[binaries]
+c = 'x86_64-w64-mingw32-gcc'
+cpp = 'x86_64-w64-mingw32-g++'
+ar = 'x86_64-w64-mingw32-ar'
+strip = 'x86_64-w64-mingw32-strip'
+pkgconfig = 'x86_64-w64-mingw32-pkg-config'
+windres = 'x86_64-w64-mingw32-windres'