Graphics Stack总结(五) 设置Mesa开发环境

回顾

上篇文章中我们提供了Mesa source tree的概览,然后简介了几个主要的modules. 现在我们将介绍setup mesa开发环境时会用到的几个小tips。

Development environment

Mesa大部分是由C和C++写的集合,用autotools作为编译系统,用git来做版本控制,所以应该很多人会比较熟悉。我不会解释如何去编译autotools项目,有很多文档可以被搜到,所以作为替代我将会聚焦在Mesa特定的部分。

git clone代码:

git clone git://anongit.freedesktop.org/git/mesa/mesa
 

下面我们会处理依赖,这些应该不会很难。Mesa在软件堆栈中的地位相底层,因此Mesa的API都比较稳定,不会频繁更改。所以通常来说,如果您有最近的发行版,并且保持最新,应该能够构建Mesa。作为参考,到目前为止,我可以在我的Ubuntu 14.04上顺利的构建Mesa。

在任何一个例子中,你需要去搞定的实际的依赖(dependencies)会取决于你想build的driver以及目标平台和想enable的features。举个例子,R300 Gallium driver要求LLVM,但是Intel i965则不需要。

然后值得注意的是,如果你正在改变那些要求Xserver,Wayland/Weston等的feature,那么需要的依赖会更加的复杂,因为你可能需要把这些项目混在一起,而他们都有各自的依赖。

下面我将会提及Mesa的一些很有用的特定的build options:

  • --enable-debug: 让断言起作用这是必要的,显然你在开发时会需要这样做。Mesa和驱动程序在许多地方都有断言,以确保新代码不会违反某些假设或违反硬件限制,因此您确实希望在开发时激活这些断言。它还添加了“-g-O0”以启用调试支持。
  • --with-dri-drivers:这是您想要构建的经典Mesa DRI驱动程序列表。例如,如果你清楚现在只想build i965驱动程序,那么构建其他驱动程序只会减慢你的构建速度。
  • --with-gallium-drivers: 这是你想要Build的Gallium driver的列表。同样的,如果你只想build i965 driver,那么对这个选项则不会感兴趣。

请注意如果你工作在Mesa framework层,即所有驱动程序共享的部分,而不是特定驱动程序的内部,那么您可能希望在构建中包含更多驱动程序,以确保它们在更改后依然能成功构建。

  • --with-egl-platforms: 这是支持的平台的列表。与上面的选项相同,你会只想build你正在工作的plaform上的mesa版本。

另外,用这些选项的集合时,你可能会想设置你的CFLAGS and CXXFLAGS(记住Mesa同时用了C和C++)。对我来说我喜欢用"-g3"。

Using your built version of Mesa

一旦你已经build出了Mesa,你可以用命令'make install'来安装libraries和drivers。也有可能你已经配置了autotools(通过--prefix option)来做这些事情,使得安装到一个安全的地方,这样可以保证不会使得新build出的Mesa与你发行版系统中的Mesa冲突。现在你的问题是告诉OpenGL程序用新编译出来的Mesa版本而不是你的发行版中提供的Mesa。

你也可以用几个环境变量来调整:

  • LIBGL_DRIVERS_PATH: Set 设置这个来改变你编译出的driver的安装地址,告诉Mesa的loader在这里查找drivers。
  • LD_LIBRARY_PATH: Set 设置这个来改变你编译出的Mesa libraries的安装地址,这将会告诉OpenGL程序加载你最近编译出的libGL.so而不是你的系统中的libGL.so

关于更多tips我建议阅读Mesa邮件列表中的这个short thread,里面由很多Mesa开发者讨论关于开发环境设置。

Coming up next

下篇文章中我会介绍现代3D graphics硬件。毕竟,graphics driver的工作就是hardware的programming。所以若想做一些有意义的驱动开发,拥有现代3D graphics硬件如何工作的基本理解是非常重要且必要的。

posted @ 2022-11-08 16:26  青山牧云人  阅读(859)  评论(0编辑  收藏  举报