Difference between revisions of "Code/build-experimental-X"

From ThinkWiki
Jump to: navigation, search
m (added missing Xau)
(Allow forced reconfiguring; avoid reconfiguring libdrm unnecessarily; fix Mesa "make"; disable xprint; change X permissions; add FETCH and BUILD flags)
Line 11: Line 11:
 
#  http://www.mesa3d.org/cvs_access.html
 
#  http://www.mesa3d.org/cvs_access.html
 
#  http://www.mesa3d.org/install.html
 
#  http://www.mesa3d.org/install.html
 +
#  http://web.telia.com/~u89404340/touchpad
 +
#  http://www.freedesktop.org/wiki/Software_2fXKeyboardConfig
  
 
#############################################
 
#############################################
Line 19: Line 21:
 
# MESA_DATE=2006-06-29 # Set this to get a historical Mesa CVS snapshot
 
# MESA_DATE=2006-06-29 # Set this to get a historical Mesa CVS snapshot
 
FLAGS='-O2 -g -march=pentium-m'
 
FLAGS='-O2 -g -march=pentium-m'
 +
RECONFIGURE=false      # Reconfigure everything even if unchanged from last run
  
 
trap "echo Aborting.; exit 1" ERR
 
trap "echo Aborting.; exit 1" ERR
Line 43: Line 46:
 
     run git clone "$GIT_REP/$MODULE" "$DIR"
 
     run git clone "$GIT_REP/$MODULE" "$DIR"
 
   fi
 
   fi
 +
}
 +
 +
LAST_HASH=last_dir_hash
 +
dir_hash() {
 +
  find . \( -name $LAST_HASH -o -path ./.git -prune \) -o -type f -ls | sort | md5sum
 +
}
 +
dir_hash_changed() {
 +
  $RECONFIGURE || [ ! -f $LAST_HASH ] || [ "`dir_hash`" != "`cat $LAST_HASH`" ]
 +
}
 +
save_dir_hash() {
 +
  dir_hash > $LAST_HASH
 
}
 
}
  
Line 57: Line 71:
 
   echo "########### Build libdrm ###########"
 
   echo "########### Build libdrm ###########"
 
   run cd $PIT/drm
 
   run cd $PIT/drm
   run ./autogen.sh
+
   if dir_hash_changed; then
  CFLAGS="$FLAGS" run ./configure --prefix=$DEST --quiet
+
    run ./autogen.sh
 +
    CFLAGS="$FLAGS" run ./configure --prefix=$DEST --quiet
 +
    save_dir_hash
 +
  fi
 
   run make clean
 
   run make clean
 
   run make
 
   run make
 +
  save_dir_hash
 
   run make install
 
   run make install
 +
  save_dir_hash
 
}
 
}
  
Line 95: Line 114:
  
 
#############################################
 
#############################################
# Building Mesa (do this *after* installing X.org)
+
# Building Mesa (do this after installing base X.org libraries
  
 
build_mesa() { (
 
build_mesa() { (
Line 110: Line 129:
 
   export PATH="$DEST/bin:$PATH"
 
   export PATH="$DEST/bin:$PATH"
 
   run mkdir -p $DRI_DRIVER_INSTALL_DIR
 
   run mkdir -p $DRI_DRIVER_INSTALL_DIR
   run make -e linux-dri-x86
+
   if [ -e configs/current ]; then
 +
    run make -e
 +
  else
 +
    run make -e linux-dri-x86
 +
  fi
 
   run make -e install
 
   run make -e install
 
   run cp -v lib/*_dri.so $DRI_DRIVER_INSTALL_DIR
 
   run cp -v lib/*_dri.so $DRI_DRIVER_INSTALL_DIR
Line 151: Line 174:
 
# (On repeated runs we avoid rerunning autotools if nothing changed.)
 
# (On repeated runs we avoid rerunning autotools if nothing changed.)
  
LAST_HASH=last_dir_hash
 
dir_hash() {
 
  find . \( -path ./$LAST_HASH -o -path ./.git -prune \) -o -ls | sort | md5sum
 
}
 
dir_hash_changed() {
 
  [ ! -f $LAST_HASH ] || [ "`dir_hash`" != "`cat $LAST_HASH`" ]
 
}
 
save_dir_hash() {
 
  dir_hash > $LAST_HASH
 
}
 
 
build_x_module() { (
 
build_x_module() { (
 
   D=$1
 
   D=$1
Line 169: Line 182:
 
   export LD_LIBRARY_PATH="$DEST/lib:$LD_LIBRARY_PATH"
 
   export LD_LIBRARY_PATH="$DEST/lib:$LD_LIBRARY_PATH"
 
   if [ $D == "xserver" ]; then
 
   if [ $D == "xserver" ]; then
     CONF_OPT="--with-mesa-source=$PIT/Mesa --enable-xorg --disable-dmx --disable-xvfb --disable-xnest"
+
     CONF_OPT="--with-mesa-source=$PIT/Mesa --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xprint"
 
   elif [ $D == "lib/libX11" ]; then
 
   elif [ $D == "lib/libX11" ]; then
 
     CONF_OPT="--with-xcb=no"
 
     CONF_OPT="--with-xcb=no"
Line 194: Line 207:
 
   done
 
   done
 
   run sudo sh -c "chown -v root $DEST/bin/Xorg; \
 
   run sudo sh -c "chown -v root $DEST/bin/Xorg; \
                   chmod -v 4711 $DEST/bin/Xorg"
+
                   chmod -v 4750 $DEST/bin/Xorg"
 
}
 
}
  
Line 261: Line 274:
 
# Do it:
 
# Do it:
  
fetch_drm
+
FETCH=true
fetch_mesa
+
BUILD=true
# patch_mesa
+
 
fetch_xorg
+
if $FETCH; then
build_libdrm
+
  fetch_drm
build_drm_modules
+
  fetch_mesa
build_xorg
+
  # patch_mesa
build_mesa
+
  fetch_xorg
fetch_xkeyboard_config
+
  fetch_xkeyboard_config
build_xkeyboard_config
+
  fetch_synaptics
fetch_synaptics
+
fi
build_synaptics
+
if $BUILD; then
create_xsetenv
+
  build_libdrm
 +
  build_drm_modules
 +
  build_xorg
 +
  build_mesa
 +
  build_xkeyboard_config
 +
  build_synaptics
 +
  create_xsetenv
 +
fi
  
 
echo 'Done.'
 
echo 'Done.'

Revision as of 13:13, 6 October 2006

  1. !/bin/bash
  2. Script to fetch and build X.org, DRI, Mesa, synaptics and xkeyboard-config
  3. from CVS and GIT.
  4. If you want to skip some tasks, comment them out at the bottom of the script.
  5. Source: http://thinkwiki.org/wiki/How_to_compile_an_experimental_X_server
  6. See also:
  7. http://wiki.x.org/wiki/ModularDevelopersGuide
  8. http://wiki.x.org/wiki/GitPage
  9. http://gitweb.freedesktop.org
  10. http://dri.freedesktop.org/wiki/Building
  11. http://www.mesa3d.org/cvs_access.html
  12. http://www.mesa3d.org/install.html
  13. http://web.telia.com/~u89404340/touchpad
  14. http://www.freedesktop.org/wiki/Software_2fXKeyboardConfig
  1. Init

PIT=$HOME/3d-pit # Download and build here DEST=$PIT/install # Install here

  1. MESA_DATE=2006-06-29 # Set this to get a historical Mesa CVS snapshot

FLAGS='-O2 -g -march=pentium-m' RECONFIGURE=false # Reconfigure everything even if unchanged from last run

trap "echo Aborting.; exit 1" ERR

die() {

 echo "$*"
 exit 1

} run() {

 echo "@ $@"
 "$@" || { echo "ERROR: Command \"$*\" failed in `pwd`"; exit 1; }

}

fetch_from_git() {

 PARENT_DIR="$1"
 GIT_REP="$2"
 MODULE="$3"
 DIR="${4:-$MODULE}"
 if [ -d "$PARENT_DIR/$DIR" ]; then 
   run cd "$PARENT_DIR/$DIR"
   run git pull
 else
   run cd "$PARENT_DIR"
   run git clone "$GIT_REP/$MODULE" "$DIR"
 fi

}

LAST_HASH=last_dir_hash dir_hash() {

 find . \( -name $LAST_HASH -o -path ./.git -prune \) -o -type f -ls | sort | md5sum

} dir_hash_changed() {

 $RECONFIGURE || [ ! -f $LAST_HASH ] || [ "`dir_hash`" != "`cat $LAST_HASH`" ]

} save_dir_hash() {

 dir_hash > $LAST_HASH

}

  1. Fetching and building libDRM and DRM kernel drivers

fetch_drm() {

 echo "########### Fetch DRM ###########"
 DRM_GIT=git://anongit.freedesktop.org/git/mesa
 fetch_from_git "$PIT" "$DRM_GIT" drm

}

build_libdrm() {

 echo "########### Build libdrm ###########"
 run cd $PIT/drm
 if dir_hash_changed; then
   run ./autogen.sh
   CFLAGS="$FLAGS" run ./configure --prefix=$DEST --quiet
   save_dir_hash
 fi
 run make clean
 run make
 save_dir_hash
 run make install
 save_dir_hash

}

build_drm_modules() {

 echo "########### Build DRM kernel modules ###########"
 run cd $PIT/drm/linux-core
 run make DRM_MODULES="radeon"
 run sudo sh -c \
   'rm -fv /lib/modules/`uname -r`/kernel/drivers/char/drm/*.ko; \
    cp -v *.ko /lib/modules/`uname -r`/extra/; \
    /sbin/depmod -a'

}

  1. Fetching Mesa

fetch_mesa() {

 echo "########### Fetching Mesa ###########"
 MESA_CVS=:pserver:anonymous@anoncvs.freedesktop.org:2401/cvs/mesa
 run mkdir -p $PIT
 run cd $PIT
 grep -qF $MESA_CVS ~/.cvspass || run cvs -d $MESA_CVS login
 [ -d Mesa ] || run cvs -z3 -d $MESA_CVS co ${MESA_DATE:+-D $MESA_DATE} Mesa
 run cd $PIT/Mesa
 run cvs -z3 update -ACPd ${MESA_DATE:+-D $MESA_DATE}

}

patch_mesa() {

 # patch to make Google Earth use acceleration:
 run perl -i -pe 'print "//DISABLE " if m/^\s*FALLBACK_IF.*Line\.SmoothFlag/' \
   $PIT/Mesa/src/mesa/drivers/dri/r300/r300_render.c

}

  1. Building Mesa (do this after installing base X.org libraries

build_mesa() { (

 echo "########### Building Mesa ###########"
 # This uses both old-style and new-style vars, to support older Mesa snapshots.
 run cd $PIT/Mesa
 export DRM_SOURCE_PATH=$PIT/drm
 export PKG_CONFIG_PATH="$DEST/lib/pkgconfig:$PKG_CONFIG_PATH"
 export DRM_SOURCE_PATH="$PIT/drm"
 export DESTDIR=$DEST  INSTALL_DIR=$DEST
 export DRI_DRIVER_INSTALL_DIR=$DEST/lib/dri
 export DRI_DIRS='r300 r200 r128 radeon'
 export OPT_FLAGS="$FLAGS"
 export PATH="$DEST/bin:$PATH"
 run mkdir -p $DRI_DRIVER_INSTALL_DIR
 if [ -e configs/current ]; then
   run make -e
 else
   run make -e linux-dri-x86
 fi
 run make -e install
 run cp -v lib/*_dri.so $DRI_DRIVER_INSTALL_DIR

) }

  1. X.org setup
  2. This is a list of modules that are in flux and likely to be related to
  3. whatever you're testing (or are required for the build), sorted by
  4. build order (see util/modular/build.sh for dependencies).
  5. Check CVS and the above URLs for other modules.

XORG_DIRS=(

 util/macros
 proto/{bigreqs,composite,fixes,damage,gl,input,kb,pm,randr,resource,xext,xcmisc}proto
 proto/{render,scrnsaver,video}proto
 proto/{x11,xf86dga,xf86dri,xf86misc,xf86vidmode,xinerama}proto
 lib/lib{xtrans,Xau,X11,ICE,SM,Xt,Xmu,Xcomposite,Xrender,Xdamage,Xcursor,Xi,Xinerama}
 lib/lib{xkbui,Xrandr,Xv,XvMC,Xxf86dga,Xxf86misc,Xxf86vm}
 xserver
 driver/xf86-video-ati
 driver/xf86-input-mouse driver/xf86-input-keyboard
 app/{xkbutils,xkbcomp,setxkbmap}

)

  1. Fetching X.org

fetch_xorg() {

 echo "########### Fetching (selected) X.org modules ###########"
 XORG_GIT=git://anongit.freedesktop.org/git/xorg
 run mkdir -p $PIT/xorg
 for D in "${XORG_DIRS[@]}"; do
   fetch_from_git $PIT/xorg "$XORG_GIT" "$D"
 done

}

  1. Building and installing X.org
  2. (On repeated runs we avoid rerunning autotools if nothing changed.)

build_x_module() { (

 D=$1
 echo "########### Building xorg/$D ###########"
 export PATH="$DEST/bin:$PATH"
 export PKG_CONFIG_PATH="$DEST/lib/pkgconfig:$PKG_CONFIG_PATH"
 export ACLOCAL="${AC_LOCAL:-aclocal} -I $DEST/share/aclocal"
 export LD_LIBRARY_PATH="$DEST/lib:$LD_LIBRARY_PATH"
 if [ $D == "xserver" ]; then
   CONF_OPT="--with-mesa-source=$PIT/Mesa --enable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xprint"
 elif [ $D == "lib/libX11" ]; then
   CONF_OPT="--with-xcb=no"
 else
   CONF_OPT=
 fi
 run cd $PIT/xorg/$D
 if dir_hash_changed; then
   CFLAGS="$FLAGS" run sh autogen.sh --prefix=$DEST --quiet --cache-file=$PIT/xorg/autoconf.cache $CONF_OPT
   save_dir_hash
 fi
 run make
 save_dir_hash
 run make install
 save_dir_hash

) }

build_xorg() {

 run cd $PIT/xorg
 run mkdir -p $DEST/share/aclocal
 run mkdir -p $DEST/var/log
 for D in "${XORG_DIRS[@]}"; do 
   build_x_module $D || return 1
 done
 run sudo sh -c "chown -v root $DEST/bin/Xorg; \
                 chmod -v 4750 $DEST/bin/Xorg"

}

  1. Fetching and building xkeyboard-config

fetch_xkeyboard_config() {

 echo "########### Fetching xkeyboard-config ###########"
 XKBC_CVS=:pserver:anoncvs@cvs.freedesktop.org:2401/cvs/xlibs
 run cd $PIT
 grep -qF $XKBC_CVS ~/.cvspass || run cvs -d $XKBC_CVS login
 [ -d xkbdesc ] || run cvs -z3 -d $XKBC_CVS co xkbdesc
 run cd $PIT/xkbdesc
 run cvs -z3 update -ACPd

}

build_xkeyboard_config() { (

 echo "########### Building xkeyboard-config ###########"
 run cd $PIT/xkbdesc
 run ./autogen.sh
 export PKG_CONFIG_PATH="$DEST/lib/pkgconfig:$PKG_CONFIG_PATH"
 export PATH="$DEST/bin:$PATH"
 CFLAGS="$FLAGS" run ./configure --quiet --prefix=$DEST \
   --with-xkb-base=$DEST/share/X11/xkb --with-xkb-rules-symlink=xorg 
 run make
 run rm -fr $DEST/share/X11/xkb/compiled
 run make install

) }

  1. Fetching and building the synaptics driver

fetch_synaptics() {

 echo "########### Fetch synaptics ###########"
 SYN_GIT=http://web.telia.com/~u89404340/touchpad/synaptics/.git
 fetch_from_git "$PIT" "$SYN_GIT"  synaptics

}

build_synaptics() { (

 echo "########### Build synaptics ###########"
 run cd $PIT/synaptics
 export PKG_CONFIG_PATH="$DEST/lib/pkgconfig:$PKG_CONFIG_PATH"
 export PATH="$DEST/bin:$PATH"
 run make
 run cp -v synaptics_drv.so $DEST/lib/xorg/modules/input/
  1. run ./autogen.sh
  2. CFLAGS="$FLAGS" run ./configure --prefix=$DEST --quiet
  3. run make clean
  4. run make
  5. run make install

) }

  1. Creating a script which sets env vars

create_xsetenv() {

 cat <<EOF > $DEST/bin/xsetenv || die "Can't create $DEST/bin/xsetenv"

export PATH="$DEST/bin:$PATH" export LD_LIBRARY_PATH="$DEST/lib:$LD_LIBRARY_PATH" export LIBGL_DRIVERS_PATH=$DEST/lib/dri EOF

 echo -e "\nRun '. $DEST/bin/xsetenv' to point env vars to this installation."

}

  1. Do it:

FETCH=true BUILD=true

if $FETCH; then

  fetch_drm
  fetch_mesa
  # patch_mesa
  fetch_xorg
  fetch_xkeyboard_config
  fetch_synaptics

fi if $BUILD; then

  build_libdrm
  build_drm_modules
  build_xorg
  build_mesa
  build_xkeyboard_config
  build_synaptics
  create_xsetenv

fi

echo 'Done.'