使用Meson 进行gstreamer的源代码构建

使用Meson 从源代码构建

Meson, gst-build 和 GStreamer 单一仓库是什么

Meson 构建系统是一个便携式构建系统,速度快。旨在比其他替代方案更容易使用。它生成可以有ninja 执行的构建指令。GStreamer 项目为所有子项目使用它。

2021年9月。所有主要的GStreamer 模块都被合并到一个单独的代码仓库中,即位于主要GStreamer git 参控股中的 GStreamer mono 仓库,现在所有的GStreamer 的开发都在这里进行,针对GStreamer 版本1.19/1.20 及更高版本。

在mono仓库合并之前,不同的GStreamer 模块分别位于单独的git 仓库中,并且有一个名为 git-build 的独立 meta-builder 项目来下载和构建所有的子项目。如果你想构建或者针对旧的稳定分支(如GStreamer 1.16 或 1.18) 进行开发,则应使用此项目。

如果你想针对即将到来的开发分支或稳定分支进行构建或开发,你应该使用mono仓库的GStreamer 模块的main 分支。

在下面的章节中,我们只会讨论GStreamer mono 仓库,但 gst-build 的工作方式几乎相同,唯一的区别是它还会下载各种GStreamer 子模块。

使用Meson 进行构建

为了构建当前的GStreamer开发版本,该版本将在不久的将来成为 1.20 稳定版本,请克隆 GStreamer mono仓库。

git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer

如果您想构建稳定版 1.18 或 1.16 分支,请克隆 gst-build :

git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git
cd gst-build

仓库布局

该仓库包含了一些值得注意的脚本和目录

  1. meson.build 是顶层构建的定义,它将递归配置所有依赖项。它还定义了一些辅助命令,允许你拥有开发环境或轻松更新新的GStreamer 模块的git 仓库。
  2. subprojects 是包含GStreamer 模块和一系列依赖的目录

基本meson 和 ninja 使用

配置模块是通过执行以下操作完成的:

meson setup 

build_diectory 是所有构建指令和输出所在的位置(也可以称为 “directory_out")。如果未创建目录,则此时将创建该目录。请注意,旧版本的meson 可以在没有任何command 参数的情况下运行,这现已弃用。

关于 build_directory 的位置只能有一个限制:它不能与源目录相同(即你克隆模块的位置)。
一旦完成meson 的配置,你可以

  1. 进入指定的build directory 然后执行 ninja

    cd  
    ninja
    
  2. 或者,你不必每次都切换到build_directory 来执行ninja 命令,只需将构建目录作为参数指定即可。这个选项的优势在于你可以从任何地方运行它(而不是切换到ninja 目录)

    ninja -C 
    

这将构建该模块(以及构建 gst-build 或 mono 仓库的子目录)

注意:当你修改了源文件,无需重新运行meson,只需要重新运行ninja 即可。如果构建/配置文件已更改,ninja 会自动确定 meson 需要重新运行,并自动执行该动作。

进入开发环境

GStreamer 有多个工具,插件和组件组成。为了使开发和测试更加容易,存在一个目标(由gst-build 或mono 仓库提供,未来直接由mson 本身提供),它将相应的设置环境变量,以便你可以直接使用所有的构建结果。

对于熟悉python 和 virtualenv 的人来说,你会感到非常自在。

该脚本名为 gst-env.py ,它位于 GStreamer mono 仓库的根目录中。

将GStreamer 作为子项目用于另一个项目

此案例与上一个非常相似,唯一的重要差异是文件系统结果很重要。gst-env 将在meson 构建目录(例如build)或 build/subprojects/gstreamer 中查找 GstPluginPaths.json 文件

与网络共享结合进行交叉编译

对于一般的交叉编译,请参阅 meson 文档或类似 gst-build-sdk 的项目。

基本思路是在交叉编译主机准备一个rootfs,类似于目标机器的rootfs,准备一个cross-file.txt,构建项目并通过NFS 挂载NFS 等导出。

在目标及其上,你需要从GStreamer 路径中移除构建主机的rootfs的路径。

./gst-env.py --sysroot /path/to/rootfs-on-cross-compile-host

处理多个分支或远程仓库

配置

你可以使用configure 命令列出 meson 项目的所有可用选项:
meson configure

如果你已经配置构建目录,你可以提供它,并且你还能获得该构建的配置值。
meson configure

该命令将列出每个选项

  • 选项的名称
  • 选项的默认(或配置)值
  • 该选项的描述

带有auto 的值表示meson 将在配置时确定适当的值(例如,如果你有可用的开发包来构建某个插件)

你还会看到带有的值。这主要用于通用选项。例如,doc 选项存在于顶层,也存在于每个子模块中(例如:gstreamer:doc)。 通常,你只想设置该选项的值一次,所有的子模块都将进程该值。

你可用在使用-D=配置构建时将这些选项提供给meson。例如,如果不想在 gst-build 中构建 rust插件,你将这么做:

meson -Drs=dsiabled 

你还可以查看 meson_options.txt 文件和 subporject/xyz/meson_options.txt 文件,这些文件列出了各种项目特定的构建选项。然而,这些选项并不包括meosn 所有的标准选项。

运行测试

通过在够就爱你目录中调用 meson test 来运行单元测试,或 meson test -C 。 如果有任何失败,你可用查看末尾指定的文件,或者运行 meson test --prient-errorlongs ,这将显示执行失败的测试的日志。

你也可用通过指定名称来执行测试的子集。例如meson test gst_gstpad。完成的测试列表可用通过 meson test --list 获取。

如果构建了gst-devtools 子模块,你还可用使用gst-validate-launchere gst-validate来运行测试。

gt-validate-launchere check.gst*

你可能感兴趣的:(gsteamer)