diff options
author | Vi0L0 | 2015-06-08 20:49:00 +0200 |
---|---|---|
committer | Vi0L0 | 2015-06-08 20:49:00 +0200 |
commit | f21a19f33a6159ee32a78f674490f08bcbb4d76a (patch) | |
tree | 7b87b0bd995f33843b8c4ce1c08c5e650bd52b3d /catalyst_build_module | |
download | aur-f21a19f33a6159ee32a78f674490f08bcbb4d76a.tar.gz |
Initial import
Diffstat (limited to 'catalyst_build_module')
-rwxr-xr-x | catalyst_build_module | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/catalyst_build_module b/catalyst_build_module new file mode 100755 index 000000000000..02d75f9e4c4a --- /dev/null +++ b/catalyst_build_module @@ -0,0 +1,225 @@ +#!/bin/bash + +kernver=${KERNVER:-$(uname -r)} +arch=${ARCH:-$(uname -m)} +arch=${arch/i686/i386} +LOG="/var/log/catalyst-install.log" + + +install_module(){ + echo "" + echo "--------" + date '+%Y-%m-%d %H:%M:%S' + echo "Building fglrx module for ${kernver} kernel ..." + echo "--------" + + + if [ ! -d "/usr/lib/modules/${kernver}/build" ]; then + echo "Kernel header files are absent: directory /usr/lib/modules/${kernver}/build doesn't exist! Game over" + return 1 + fi + workdir=$(mktemp -du /tmp/catalyst.XXXXXX) +# set -x + cp "/usr/share/ati/build_mod" "${workdir}" -R + cd "$workdir" + + ## include ati_make.sh and use _ati_check function from it + . ati_make.sh + _ati_check + +#------------------------------------------------------------------------------------------ +# putting our info into module + modsymmd5=`md5sum /usr/lib/modules/${kernver}/build/Module.symvers | cut -d ' ' -f 1` + sed "/MODULE_DESCRIPTION/a\MODULE_DESCRIPTION(\"__msm:$modsymmd5\");" -i firegl_public.c +#------------------------------------------------------------------------------------------ + + ## Compile module using _ati_check variables + CFLAGS_MODULE="-DMODULE -DATI -DFGL -DPAGE_ATTR_FIX=$PAGE_ATTR_FIX -DCOMPAT_ALLOC_USER_SPACE=$COMPAT_ALLOC_USER_SPACE $def_smp $def_modversions" + make -C /usr/lib/modules/${kernver}/build SUBDIRS="`pwd`" ARCH=${arch} \ + MODFLAGS="$CFLAGS_MODULE" \ + CFLAGS_MODULE="$CFLAGS_MODULE" \ + PAGE_ATTR_FIX=$PAGE_ATTR_FIX COMPAT_ALLOC_USER_SPACE=$COMPAT_ALLOC_USER_SPACE modules || return 1 + + gzip -9 fglrx.ko + + ## here we are checking kernel's extramodules dir + for r in /usr/lib/modules/*; do + if [[ ${r:17:3} = "ext" ]]; then + if [[ `cat ${r}/version | grep -c ${kernver}` != 0 ]]; then + destidir=${r} + fi + fi + done + + install -m644 fglrx.ko.gz ${destidir} || return 1 + + depmod ${kernver} + rm -rf "${workdir}" +# set +x + echo "ok." +} + +build_all_modules(){ + for p in /usr/lib/modules/*; do + if [ ${p:17:3} != "ext" ] && [ -d $p/build ] && [ -d $p/kernel ]; then + /usr/bin/catalyst_build_module ${p##*/usr/lib/modules/} + fi + done +} + +remove_module(){ + for p in /usr/lib/modules/*; do + if [[ ${p:17:3} != "ext" ]]; then + if [ ! -d $p/kernel ]; then + if [[ -e $p/video/fglrx.ko.gz ]] || [[ -e $p/extramodules/fglrx.ko.gz ]] || [[ -e $p/video/fglrx.ko ]] || [[ -e $p/extramodules/fglrx.ko ]]; then + echo "- removing fglrx module from $p" + rm "$p/video/fglrx.ko.gz" &>/dev/null + rm "$p/video/fglrx.ko" &>/dev/null + rm "$p/extramodules/fglrx.ko.gz" &>/dev/null + rm "$p/extramodules/fglrx.ko" &>/dev/null + rmdir -p "$p/video/" --ignore-fail-on-non-empty &>/dev/null + fi + if [ -d $p ]; then + if [ -z "$(ls $p)" ]; then + echo "- removing empty directory: $p" + rm -rf $p + else echo "- $p looks like unused, maybe remove it manualy?" + fi + fi + fi + elif [[ ! -e $p/version ]]; then + if [[ -e $p/fglrx.ko.gz ]] || [[ -e $p/fglrx.ko ]]; then + echo "- removing fglrx module from $p" + rm "$p/fglrx.ko.gz" &>/dev/null + rm "$p/fglrx.ko" &>/dev/null + fi + if [ -z "$(ls $p)" ]; then #check if /usr/lib/modules/ext* is empty + echo "- removing empty directory: $p" + rm -rf $p + else echo "- $p looks like unused, maybe remove it manualy?" + fi + fi + done +} + +remove_all_modules(){ + for p in /usr/lib/modules/*; do + if [[ ${p:17:3} != "ext" ]]; then + if [[ -e $p/video/fglrx.ko.gz ]] || [[ -e $p/extramodules/fglrx.ko.gz ]] || [[ -e $p/video/fglrx.ko ]] || [[ -e $p/extramodules/fglrx.ko ]]; then + echo "- removing fglrx module from $p" + rm "$p/video/fglrx.ko.gz" &>/dev/null + rm "$p/video/fglrx.ko" &>/dev/null + rm "$p/extramodules/fglrx.ko.gz" &>/dev/null + rm "$p/extramodules/fglrx.ko" &>/dev/null + rmdir -p "$p/video/" --ignore-fail-on-non-empty &>/dev/null + depmod $(basename $p) + fi + if [ -d $p ]; then + if [ -z "$(ls $p)" ]; then #check if /usr/lib/modules/p is empty + echo "- removing empty directory: $p" + rm -rf $p + elif [ ! -d $p/kernel ]; then + echo "- $p looks like unused, maybe remove it manualy?" + fi + fi + elif [[ ! -e $p/version ]]; then + if [[ -e $p/fglrx.ko.gz ]] || [[ -e $p/fglrx.ko ]]; then + echo "- removing fglrx module from $p" + rm "$p/fglrx.ko.gz" &>/dev/null + rm "$p/fglrx.ko" &>/dev/null + fi + if [ -z "$(ls $p)" ]; then #check if /usr/lib/modules/ext* is empty + echo "- removing empty directory: $p" + rm -rf $p + else echo "- $p looks like unused, maybe remove it manualy?" + fi + fi + done +} + +remove_old_modules(){ + for p in /lib/modules/*; do + if [[ ${p:13:3} != "ext" ]]; then + if [[ -e $p/video/fglrx.ko ]] || [[ -e $p/extramodules/fglrx.ko ]]; then + echo "- removing old fglrx module from $p" + rm "$p/video/fglrx.ko" &>/dev/null + rm "$p/extramodules/fglrx.ko" &>/dev/null + rmdir -p "$p/video/" --ignore-fail-on-non-empty &>/dev/null + depmod $(basename $p) + fi + fi + done +} + +hook_add(){ + # add hook fglrx to mkiniticpio + hooks=$(grep ^HOOKS /etc/mkinitcpio.conf | grep fglrx) + if [ "$hooks" = "" ]; then + # add hook fglrx + sed 's/^HOOKS="\([^"]*\)"/HOOKS="\1 fglrx"/' -i /etc/mkinitcpio.conf + echo "fgkrx hook was added into /etc/mkinitcpio.conf" + fi +} + +hook_remove(){ + # remove hook fglrx + sed '/^HOOKS/s/ *fglrx//' -i /etc/mkinitcpio.conf + echo "fgkrx hook was removed from /etc/mkinitcpio.conf" +} + +check_modules(){ + for p in /usr/lib/modules/*; do + if [ ${p:17:3} != "ext" ] && [ -d $p/build ] && [ -d $p/kernel ]; then + if [[ -e $p/extramodules/fglrx.ko.gz ]]; then + compare=$(md5sum $p/build/Module.symvers | cut -d ' ' -f 1) + test=$(modinfo -F description $p/extramodules/fglrx.ko.gz | grep "__msm:") + if [ "$test" != "__msm:$compare" ]; then + /usr/bin/catalyst_build_module ${p##*/usr/lib/modules/} + fi + else /usr/bin/catalyst_build_module ${p##*/usr/lib/modules/} + fi + fi + done +} + +case "$1" in + help|--help) + echo "usage: $0 {version|all|remove|remove_all|ra|hookadd|hookrm}" + echo "- with no specified kernel version it will use the current kernel version to build module" + echo "- all will try to build fglrx modules for all working system's kernels" + echo "- remove is removing unused fglrx modules and all empty /usr/lib/modules/* directories" + echo "- remove_all is removing all fglrx modules and all empty /usr/lib/modules/* directories" + echo "- ra works same as remove_all" + echo "- hookadd will add fglrx hook into mkinitcpio" + echo "- hookrm will remove fglrx hook from mkinitcpio" + ;; + remove) + remove_module + ;; + remove_all) + remove_all_modules + ;; + ra) + remove_all_modules + ;; + remove_old) + remove_old_modules + ;; + hookadd) + hook_add + ;; + hookrm) + hook_remove + ;; + all) + build_all_modules + ;; + check) + check_modules + ;; + *) + test "$1" != "" && kernver="$1" + echo "+ building fglrx module for ${kernver} kernel ..." + install_module >> $LOG 2>&1 && echo " ok." || echo -e '\E[37;44m'"\033[1mFailed!!! Check out log: $LOG\033[0m" + ;; +esac
\ No newline at end of file |