summaryrefslogtreecommitdiff
path: root/Building.mdwn
diff options
context:
space:
mode:
authorJoe Rayhawk <jrayhawk@freedesktop.org>2013-04-13 16:15:48 -0700
committerJoe Rayhawk <jrayhawk@freedesktop.org>2013-04-13 16:15:48 -0700
commita6469900db6e4e7e1639d8318ec5f8fc504fb4ba (patch)
tree2c42f53b9b33e28efffa6f106f41cef0cbcca4b9 /Building.mdwn
parent6f87737aef4da968ebd11acf9155f3bc526e96ab (diff)
Mass conversion with moin2mdwn tool from git://git.koumbit.net/moin2iki.git
Diffstat (limited to 'Building.mdwn')
-rw-r--r--Building.mdwn286
1 files changed, 286 insertions, 0 deletions
diff --git a/Building.mdwn b/Building.mdwn
new file mode 100644
index 0000000..7a1a58b
--- /dev/null
+++ b/Building.mdwn
@@ -0,0 +1,286 @@
+
+**Contents** [[!toc ]]
+
+
+# Building the DRI with X.org and Mesa
+
+This is a basic guide to building DRI from source. This guide **only** covers building the client-side 3D drivers. Since the transition to the modular X.org build, building an X-server and 2D drivers is beyond the scope of this document. That information can be found in the [[X.org Modular Developer Guide|http://wiki.x.org/wiki/ModularDevelopersGuide]]. An important aspect is to compile X-server with the `--with-mesa-source=/path/to/mesa` option, to include glx/OpenGL support. You will most probably need to (re)compile also at least the keyboard and mouse drivers, in addition to a video card 2D driver.
+
+KDrive servers are not supported at this time. Please report any problems with these instructions on the dri-users mailing list or on IRC.
+
+The 2D drivers with DRI support, server-side GLX support and the GL library capable of loading DRI 3D drivers are developed in X.org's CVS. The 3D drivers, though, live in the Mesa tree, so you will have to check out the Mesa git tree. You should also get the DRM git tree for up-to-date kernel modules. The following instructions will guide you through the process step by step.
+
+**Warning:** In case you didn't notice, you are about to compile and install experimental software. This will allow you to test the latest features and bug fixes. It may, however, also introduce new bugs. Be prepared for problems every now and then.
+
+
+## Dependencies
+
+You need a current version (7.4, ie. xserver 1.5 as of this writing) of X.org (core and development packages) installed on your system. In particular, you need these X.org components:
+
+* proto/glproto [[1.4.14|http://xorg.freedesktop.org/releases/individual/proto/glproto-1.4.14.tar.bz2]] or `git://anongit.freedesktop.org/git/xorg/proto/glproto`
+* proto/xf86vidmodeproto `git://anongit.freedesktop.org/git/xorg/proto/xf86vidmodeproto`
+* lib/libXxf86vm `git://anongit.freedesktop.org/git/xorg/lib/libXxf86vm`
+* lib/libXmu `git://anongit.freedesktop.org/git/xorg/lib/libXmu`
+* dri2proto [[2.6|http://xorg.freedesktop.org/releases/individual/proto/dri2proto-2.6.tar.bz2]] or `git://anongit.freedesktop.org/xorg/proto/dri2proto`
+
+### On Debian/Ubuntu
+
+If you are using Debian or Ubuntu you can install the packages with:
+
+
+[[!format txt """
+apt-get build-dep libdrm mesa
+apt-get install linux-headers-`uname -r`
+apt-get install libxi-dev libxmu-dev x11proto-xf86vidmode-dev
+apt-get install git-core autoconf automake libtool
+"""]]
+
+## Getting the latest source trees
+
+Get the source trees using two `git` commands. These commands should be run in the same directory. When they've run, you will have two new subdirectories: `mesa`, and `drm`.
+
+
+### Getting DRM and libdrm
+
+The clean DRM source tree takes about 4MB of disk space.
+
+
+[[!format txt """
+git clone git://anongit.freedesktop.org/git/mesa/drm
+"""]]
+
+### Getting Mesa
+
+The clean Mesa source tree takes about 32MB of disk space.
+
+
+[[!format txt """
+git clone git://anongit.freedesktop.org/git/mesa/mesa
+"""]]
+
+## Building libdrm
+
+The Mesa drivers now require `libdrm` to be installed. Do the following to build `libdrm`:
+
+
+[[!format txt """
+cd drm
+./autogen.sh
+"""]]
+**Note:** `libdrm` installs to `/usr/local/lib` by default. To install in `/usr/lib` run:
+[[!format txt """
+./configure --prefix=/usr
+"""]]
+Now you're ready to compile it:
+[[!format txt """
+make
+"""]]
+Then as root, to install:
+[[!format txt """
+make install
+"""]]
+
+## Building Mesa 3D drivers
+
+The DRI 3D drivers are now built from the Mesa source.
+
+
+[[!format txt """
+cd mesa
+./autogen.sh
+"""]]
+**Note:** `mesa` installs to `/usr/local/lib` by default. To install in `/usr/lib` run:
+[[!format txt """
+./configure --prefix=/usr
+"""]]
+Choose the right configure options depending on the hardware architecture you're compiling for.
+ See [[http://www.mesa3d.org/autoconf.html|http://www.mesa3d.org/autoconf.html]] for more information about configuring mesa or read the output from:
+[[!format txt """
+./configure --help
+"""]]
+**Note:** You will need to install `libdrm` for Mesa to build properly. You should have done that at step 1.3 when doing the "make install".
+
+**Note:** You will need to update PKG_CONFIG_PATH if you installed `libdrm` in `/usr/local/lib`. For example, `export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH`.
+
+Now you're ready to compile it:
+
+
+[[!format txt """
+make
+"""]]
+
+## Installing the 3D drivers
+
+After compiling the Mesa tree, the 3D drivers can be found in `mesa/lib`. There are two ways of using them: installing them in the destined place, or telling X where to find them.
+
+1. Install the drivers to `/usr/lib/`:
+
+Run as root, to install:
+
+
+[[!format txt """
+make install
+"""]]
+2. Or set the environment variable LIBGL_DRIVERS_PATH to point to `<path to Mesa>/lib`, and also preload the newly built `libGL.so`:
+
+
+[[!format txt """
+export LIBGL_DRIVERS_PATH=<path to Mesa>/lib
+export LD_PRELOAD=<path to Mesa>/lib/libGL.so.1
+"""]]
+To make these settings persistent, you'll have to add them to `.bashrc` or a similar login script.
+
+
+## Building the DRM
+
+The DRM is shipped with the kernel on both Linux and FreeBSD, so you shouldn't have to build it explicitly. If you want to build it or develop it, the kernel building and development rules apply.
+
+
+## Finishing up
+
+There are two things you have to do if you compiled X.org for the first time and were using XFree86 before. There should be a symbolic link `/etc/X11/X` that points to `/usr/X11R6/bin/XFree86`. You should make that link point to `/usr/X11R6/bin/Xorg`.
+
+
+[[!format txt """
+cd /etc/X11
+mv X X.backup
+ln -s /usr/X11R6/bin/Xorg X
+"""]]
+Copy your `XF86Config-4` or `XF86Config` to `xorg.conf`, and in this file change the keyboard driver from `keyboard` to `kbd`.
+
+
+[[!format txt """
+Section "Input"
+ # ...
+ Driver "kbd"
+ # ...
+EndSection
+"""]]
+In order to activate 3D acceleration make sure your `xorg.conf` is set up right. In particular, make sure the GLX and DRI modules are being loaded:
+
+
+[[!format txt """
+Section "Module"
+ # ...
+ Load "glx"
+ Load "dri"
+ # ...
+EndSection
+"""]]
+and set the permissions for DRI appropriately. To allow anyone to use DRI, do:
+[[!format txt """
+Section "DRI"
+ Mode 0666
+EndSection
+"""]]
+To restrict DRI access to a certain group, find on your system the name of the group that is for video hardware access. (Have a look in `/etc/group`. It is often called `video`.) Add the users that may access the video hardware to that group. Then put this into `xorg.conf`:
+[[!format txt """
+Section "DRI"
+ Group "video"
+ Mode 0660
+EndSection
+"""]]
+On Linux 2.4.x make sure the agpgart kernel module is loaded before you start X. On Linux 2.6.x make sure both agpgart and the agp chipset specific driver for your motherboard (via_agp, intel_agp, et al.) are loaded before you start X. To make the agp modules load automatically add these lines to your `modules.conf`:
+
+2.4.x kernels:
+[[!format txt """
+pre-install <drm module> /sbin/modprobe "-k" "agpgart"
+"""]]
+2.6.x kernels:
+[[!format txt """
+pre-install <drm module> /sbin/modprobe "-k" "agpgart"
+pre-install agpgart /sbin/modprobe "-k" "<agp chipset driver>"
+"""]]
+Replace <drm module> with the name of the drm module for your video card (e.g., radeon, mga, savage, etc.). Replace <agp chipset driver> with the name of the agp driver for your motherboard (e.g., via_agp, intel_agp, etc.).
+
+For all kernels, make sure the DRM module is loaded before you start X.
+
+Remember to restart X so the server will use the new modules.
+
+
+# Troubleshooting
+
+If your issue isn't covered here, please report it on `#dri` on IRC or on the dri-users mailing list. This section only covers build-time troubleshooting; for run-time issues see [[DriTroubleshooting|DriTroubleshooting]].
+
+
+## I cannot load my new DRM module on Linux Kernel 2.6.1
+
+
+[[!format txt """
+FATAL: Error inserting via (/lib/modules/2.6.1/kernel/
+drivers/char/drm/<module name>.ko): Unknown symbol in module,
+or unknown parameter (see dmesg)
+"""]]
+This error occurs because there are some missing symbols in the 2.6.1 kernel source. One way to get around this problem is to upgrade your kernel to a newer version... (You *might* be able to patch the DRM code to avoid this... Not sure about this, though!)
+
+
+## Can't find 'X11/Xlibint.h'
+
+You need to have the headers for your current X version installed. How you install these depends on how you installed X in the first place:
+
+* If you downloaded a binary from xfree86.org, the headers are in `Xprog.tgz`.
+* For Slackware the package is called `xfree86-devel`.
+* Redhat/Fedora and SuSE users should install the appropriate `XFree86-devel` package.
+* Mandrake calls this package `libxfree86-devel` for some reason.
+* Debian users should use `xlibs-dev`.
+* Gentoo users only need to make sure `xfree` or `xorg-x11` have already been emerged.
+
+## Compilation fails when building the kernel modules
+
+When building the kernel modules, the compilation might fail for some modules. In a recent CVS snapshot, I got the following:
+
+
+[[!format txt """
+savage_drv.c: In function `savage_alloc_continuous_mem':
+savage_drv.c:106: warning: passing arg 1 of `remap_page_range_Rc414bdc2' makes pointer from integer without a cast
+savage_drv.c:106: incompatible type for argument 4 of `remap_page_range_Rc414bdc2'
+savage_drv.c:106: too few arguments to function `remap_page_range_Rc414bdc2'
+savage_drv.c: In function `savage_get_physics_address':
+savage_drv.c:170: warning: implicit declaration of function `pte_offset'
+savage_drv.c:170: warning: assignment makes pointer from integer without a cast
+make[2]: *** [savage_drv.o] Error 1
+"""]]
+You can avoid this problem by only building the modules you need. See the DRM section above for the bit about the `DRM_MODULES` variable.
+
+
+## xf86cfg doesn't compile/link
+
+xf86cfg requires libXaw (and appropriate headers) to be installed in order to build. You can either install the relevant packages for your distribution, or else add the line:
+
+
+[[!format txt """
+#define BuildXFree86ConfigTools NO
+"""]]
+to your `config/cf/host.def` and rerun `make World`.
+
+[[ToDo|ToDo]]: fill this in with package names, as above.
+
+
+## I'm using Gentoo and...
+
+Gentoo has its own How-To on their website -- [[http://www.gentoo.org/doc/en/dri-howto.xml|http://www.gentoo.org/doc/en/dri-howto.xml]]
+
+For those who enabled DRI via the instructions here...
+
+There is a known issue with Gentoo's Open``GL package switch; when the `opengl-update` package is installed, Gentoo places Open``GL libraries and header files under `/usr/lib/opengl` and uses symlinks to make everything appear in the normal place. As a result the normal install process doesn't always work.
+
+Try setting up a "fake" Open``GL package, and switch into it:
+[[!format txt """
+cd /usr/lib/opengl
+mkdir mesa-cvs
+cd mesa-cvs
+ln -s ../../../local/lib
+ln -s ../../../local/include
+ln -s ../xorg-x11/extensions
+opengl-update mesa-cvs
+"""]]
+This assumes you installed Mesa (including lib``GL) into `/usr/local`, which is the default. Also, you may like to remove everything in `/usr/local/lib` from Mesa that isn't either `libGL.*` or `libGLU.*` -- things like `libGLw.*` can cause problems.
+
+If you set things up differently, a way to check whether you are affected by `opengl-update` is to strace any Open``GL based program (for example: `glxgears`) and to see which `libGL.so` it loads. Despite all symlinks it should load `/usr/lib/libGL.so.1.2`. If it doesn't correct the symlinks in `/usr/lib` to point to `/usr/lib/libGL.so.1.2`. After that **don't run `opengl-update`** -- it will only break things.
+
+
+# References
+
+- [[Guide by snakeoil|http://www.atomicmpc.com.au/forums.asp?s=2&c=16&t=1501]]
+
+- [[Old DRI building guide|http://dri.sourceforge.net/doc/building.html]] [[http://dri.sourceforge.net/cgi-bin/moin.cgi/RecentChanges|http://dri.sourceforge.net/cgi-bin/moin.cgi/RecentChanges]]