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'