From 81d8a8c78c72917f8d3960dd2eded2f21d1eefc5 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Mon, 3 Dec 2018 09:16:14 -0500 Subject: [PATCH] Add example cross files 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 | 40 +++++++++++++++++++++++++++++ cross-files/android_arm64_api28.txt | 16 ++++++++++++ cross-files/mingw_w64_x86-64.txt | 17 ++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 cross-files/README.md create mode 100644 cross-files/android_arm64_api28.txt create mode 100644 cross-files/mingw_w64_x86-64.txt diff --git a/cross-files/README.md b/cross-files/README.md new file mode 100644 index 0000000000..469ef12f8d --- /dev/null +++ b/cross-files/README.md @@ -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 index 0000000000..27b803d821 --- /dev/null +++ b/cross-files/android_arm64_api28.txt @@ -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 index 0000000000..1897b686a0 --- /dev/null +++ b/cross-files/mingw_w64_x86-64.txt @@ -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'