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 子模块。
为了构建当前的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
该仓库包含了一些值得注意的脚本和目录
配置模块是通过执行以下操作完成的:
meson setup
build_diectory 是所有构建指令和输出所在的位置(也可以称为 “directory_out")。如果未创建目录,则此时将创建该目录。请注意,旧版本的meson 可以在没有任何command 参数的情况下运行,这现已弃用。
关于 build_directory 的位置只能有一个限制:它不能与源目录相同(即你克隆模块的位置)。
一旦完成meson 的配置,你可以
进入指定的build directory 然后执行 ninja
cd
ninja
或者,你不必每次都切换到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 仓库的根目录中。
此案例与上一个非常相似,唯一的重要差异是文件系统结果很重要。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*