GStreamer compilation with third party libraries
Suppose that you have to hack a GStreamer element which requires a library that is not (yet) packaged by your distribution, nor wrapped as a Meson’s subproject. How do you do?In our case, we needed the latest version of
Which are interrelated CMake projects.
For these cases, GStreamer’s uninstalled development scripts can use a special
directory: gstreamer/prefix
. As the
README.md
says:
NOTE: In the development environment, a fully usable prefix is also configured
in gstreamer/prefix
where you can install any extra dependency/project.
This means that gstenv.py
script (the responsible of setting up the
uninstalled development environment) will add
gstreamer/prefix/bin
inPATH
for executable files.gstreamer/prefix/lib
andgstreamer/prefix/share/gstreamer-1.0
inGST_PLUGIN_PATH
, for out-of-tree elements.gstreamer/prefix/lib
inGI_TYPELIB_PATH
for GObject Introspection metadata.gstreamer/prefix/lib/pkgconfig
inPKG_CONFIG_PATH
for third party dependencies (our case!)gstreamer/prefix/etc/xdg
forXDG_CONFIG_DIRS
for XDG compliant configuration files.gstreamer/prefix/lib
andgstreamer/prefix/lib64
inLD_LIBRARY_PATH
for third party libraries.
Therefore, the general idea, is to compile those third party libraries with
their installation prefix as gstreamer/prefix
.
In our case, Vulkan repositories are interrelated so they need to be compiled in
certain order. Also, we decided, for self-containment, to clone them in
gstreamer/subprojects
.
Vulkan-Headers #
cd ~/gst/gstreamer/subprojects
git clone git@github.com:KhronosGroup/Vulkan-Headers.git
cd Vulkan-Headers
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/home/vjaquez/gst/gstreamer/prefix ..
cmake --build . --install
Vulkan-Loader #
cd ~/gst/gstreamer/subprojects
git clone git@github.com:KhronosGroup/Vulkan-Loader.git
cd Vulkan-Loader
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DVULKAN_HEADERS_INSTALL_DIR=/home/vjaquez/gst/gstreamer/prefix DCMAKE_INSTALL_PREFIX=/home/vjaquez/gst/gstreamer/prefix ..
cmake --build . --install
Vulkan-Tools #
cd ~/gst/gstreamer/subprojects
git clone git@github.com:KhronosGroup/Vulkan-Tools.git
cd Vulkan-Tools
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DVULKAN_HEADERS_INSTALL_DIR=/home/vjaquez/gst/gstreamer/prefix DCMAKE_INSTALL_PREFIX=/home/vjaquez/gst/gstreamer/prefix ..
cmake --build . --install
Right now we have the Vulkan headers and the Vulkan loader pkg-config file in place. And we should be able to compile GStreamer. Right?
Not exactly, because gstenv.py
only sets the environment variables for the
development environment, not for GStreamer compilation. But the solution is
simple, because we have all set in the proper order: just to set
PKG_CONFIG_PATH
when executing meson setup
:
PKG_CONFIG_PATH=/home/vjaquez/gst/gstreamer/prefix/lib/pkgconfig meson setup --buildtype=debug build