summarylogtreecommitdiffstats
path: root/catalyst_build_module
diff options
context:
space:
mode:
authorVi0L02015-06-08 20:49:00 +0200
committerVi0L02015-06-08 20:49:00 +0200
commitf21a19f33a6159ee32a78f674490f08bcbb4d76a (patch)
tree7b87b0bd995f33843b8c4ce1c08c5e650bd52b3d /catalyst_build_module
downloadaur-f21a19f33a6159ee32a78f674490f08bcbb4d76a.tar.gz
Initial import
Diffstat (limited to 'catalyst_build_module')
-rwxr-xr-xcatalyst_build_module225
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