#! /bin/bash # Build radeon driver for glamor and mesa with gallium3d # See http://www.x.org/wiki/radeonBuildHowTo#Stable_branch export PREFIX="/opt/xorg" BASEDIR=`pwd`/my_radeonsi SAVEFILES_DIR=$HOME/Downloads/git CPU_CORES=`grep -c '^processor' /proc/cpuinfo` export CONCURRENCY_LEVEL=$(( $CPU_CORES + 1 )) export MAKEFLAGS=-j$CONCURRENCY_LEVEL # XSERVER=xorg-server-1.12.4 # Doesn't work XSERVER=xorg-server-1.11.4 XSERVER_URI=http://ftp.x.org/pub/individual/xserver/$XSERVER.tar.bz2 SH="sh -vx" SH=sh DEBUGCMD="set -vx" DEBUGCMD= # KERNEL_GIT=git://people.freedesktop.org/~agd5f/linux; KERNEL_REV=f06e99f02d53402530ef90117fada184b61ee7e9 KERNEL_GIT=git://people.freedesktop.org/~airlied/linux; KERNEL_REV=origin/drm-next BUILD_KERNEL=true INSTALL_KERNEL=true FRESH=true [ -f $BASEDIR/src/util/macros/config.log ] && FRESH=false download_and_build_kernel() { echo "*** Building kernel" NEW=true [ -d linux ] && NEW=false $NEW && ( echo "*** Downloading kernel"; git clone $KERNEL_GIT ) pushd linux || return git pull $NEW && git checkout -b mybranch $KERNEL_REV mkdir -p mykernel mykernel=`pwd`/mykernel echo "*** make kernel" if $NEW; then make O=$mykernel mrproper cp /boot/config-`uname -r` $mykernel/.config yes "" | make O=$mykernel silentoldconfig yes "" | make O=$mykernel oldconfig fi make -j$CONCURRENCY_LEVEL O=$mykernel make -j$CONCURRENCY_LEVEL O=$mykernel modules popd } download_and_install_module() { NAME=$1 GIT_URI=$2 CONFIG_OPTS=$3 BRANCH=$4 echo "*** Building $NAME" $FRESH && ( echo "*** Downloading $NAME"; git clone $GIT_URI ) pushd $NAME || return [ ! -z "$BRANCH" ] && git checkout -b mybranch $BRANCH git pull echo "*** Building $NAME" ./autogen.sh --prefix=$PREFIX $CONFIG_OPTS $FRESH && ( echo "*** make clean in $NAME"; make clean ) make -j$CONCURRENCY_LEVEL echo "*** Installing $NAME" sudo make -j1 install popd echo "*** Done with $NAME" } download_and_install_llvm() { echo "*** Downloading llvm" $FRESH && git clone git://people.freedesktop.org/~tstellar/llvm pushd llvm || return git pull echo "*** Building llvm" ./configure --prefix=/usr/local --enable-experimental-targets=R600 --enable-optimized --cache-file=/dev/null --srcdir=. $FRESH && make clean make -j$CONCURRENCY_LEVEL sudo make -j1 install popd } $DEBUGCMD mkdir -p "$BASEDIR" || exit pushd "$BASEDIR" || exit # Only 3.7+ has working KMS for me (4 monitors) echo "*** Installing required packages" sudo apt-get install git pbzip2 axel x11-apps sudo apt-get install -t experimental libdrm-dev libdrm2 libkms1 libdrm-intel1 libdrm-radeon1 linux-kbuild-3.7 linux-image-3.7-trunk-amd64 inux-support-3.7-trunk linux-source-3.7 linux-headers-3.7 linux-headers-3.7-trunk-common linux-headers-3.7-trunk-all x11proto-gl-dev x11proto-randr-dev libxcb-shm0-dev libxcb-util0-dev libxcb-util0 libfs-dev libxcb-randr0 libxcb-randr0-dev libxft-dev libxcursor-dev libxrandr-dev libxxf86dga-dev sudo apt-get build-dep x11-apps xserver-xorg-video-ati xserver-xorg xserver-xorg-video-all xserver-xorg-core libdrm mesa libxcb1-dev sudo rm -rf $PREFIX if $BUILD_KERNEL; then download_and_build_kernel if $INSTALL_KERNEL; then pushd linux mykernel=`pwd`/mykernel sudo make O=$mykernel INSTALL_MOD_STRIP=1 modules_install sudo make O=$mykernel INSTALL_MOD_STRIP=1 install sudo update-grub popd fi fi download_and_install_llvm mkdir -p src || exit 1 mkdir -p build || exit 1 pushd src if $FRESH; then echo "*** Downloading build scripts" git clone git://anongit.freedesktop.org/git/xorg/util/modular util/modular ( cd util/modular; git pull) BUILD_OPT="-n --clone" echo "*** Downloading/building Xorg stack" else BUILD_OPT="-p -a -n" echo "*** Building Xorg stack" fi $SH util/modular/build.sh $BUILD_OPT -s sudo -n --confflags "--prefix=$PREFIX --enable-gallium-radeon --with-state-trackers=dri,glx --with-dri-driverdir=$PREFIX/lib/dri --with-egl-platforms=x11,drm --with-gallium-drivers=swrast,radeonsi --enable-gbm --enable-shared-glapi --enable-glx-tls --with-dri-drivers=radeon,swrast --enable-glamor" $BASEDIR/build popd # Download and build older xserver if true; then echo "*** Downloading $XSERVER" [ ! -f $SAVEFILES_DIR/$XSERVER.tar.bz2 ] && ( cd $SAVEFILES_DIR; axel -a $XSERVER_URI || exit 1 ) [ $FRESH ] && pbzip2 -dc <$SAVEFILES_DIR/$XSERVER.tar.bz2 | tar xf - pushd $XSERVER echo "*** Building $XSERVER" ./autogen.sh --prefix=$PREFIX --enable-glx-tls --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xwin $FRESH && make clean make -j$CONCURRENCY_LEVEL sudo make -j1 install popd else # This builds a server with video ABI 12 - doesn't work download_and_install_module xserver git://anongit.freedesktop.org/git/xorg/xserver "--prefix=$PREFIX --enable-glx-tls --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xwin" a615b90cab7569fae9d123e4da1d3373c871d84b # See http://www.freedesktop.org/wiki/Software/Glamor fi download_and_install_module drm git://anongit.freedesktop.org/git/mesa/drm "--prefix=$PREFIX" download_and_install_module mesa git://anongit.freedesktop.org/mesa/mesa "--prefix=$PREFIX --with-dri-driverdir=$PREFIX/lib/dri --with-egl-platforms=x11,drm --with-gallium-drivers=swrast,r300,r600,radeonsi --enable-gbm --enable-shared-glapi --enable-glx-tls --with-dri-drivers=radeon,swrast" sudo ln -sfT $PREFIX/lib/dri/radeonsi_dri.so /usr/local/lib/dri/radeonsi_dri.so # Otherwise AIGLX won't find it - doesn't consider the module search path??? # sudo ln -sfT $PREFIX/lib/libGL.so /usr/lib/libGL.so # Otherwise glamor won't build sudo ln -sfT $PREFIX/lib/libGL.so /usr/local/lib/libGL.so # Otherwise glamor won't build download_and_install_module glamor git://anongit.freedesktop.org/git/xorg/driver/glamor "--prefix=$PREFIX --enable-glx-tls" download_and_install_module driver/xf86-video-ati git://anongit.freedesktop.org/git/xorg/driver/xf86-video-ati "--prefix=$PREFIX --enable-gallium-radeon --with-egl-platforms=x11,drm --enable-glamor" sudo sh -c "echo LIBGL_DRIVERS_PATH=$PREFIX/lib/dri/ >>/etc/environment" sudo sh -c "echo $PREFIX/lib >/etc/ld.so.conf.d/a-local-xorg.conf" sudo ldconfig sudo cp /usr/lib/xorg/protocol.txt $PREFIX/lib/xorg/protocol.txt sudo sh -c "cat >$PREFIX/share/X11/xorg.conf.d/10-Files" <<"_Files" Section "Files" ModulePath "/opt/xorg/lib/xorg/modules" EndSection _Files sudo mkdir -p $PREFIX/share/X11/xorg.conf.d/ sudo cp /etc/X11/xorg.conf.d_/* $PREFIX/share/X11/xorg.conf.d/ popd sudo chown root:root $PREFIX/bin/Xorg sudo chmod +s $PREFIX/bin/Xorg # sudo chmod 1777 /opt/xorg/var/log echo "If eveything built, change your X server command (e.g. ServerCmd in /etc/kde4/kdm/kdmrc) to" echo "$PREFIX/bin/X -verbose 9 -logverbose 9 -configdir $PREFIX/share/X11/xorg.conf.d"