#!/bin/sh
#
# This script is used to build megaide shim driver for various linux kernels 
# Before using this script user should prepare the kernel source tree for 
# which the driver need to be build.
# For more information see megaide_shimdriver_readme.txt
#
# Version 0.02 <07.21.2004>
# Manoj Jose 
#
# Version 0.03 <08.30.2007>
# Sunil Kumar N.P
# Added support for unified Shim Architecture 
# LSI Logic Corporation

KERN_SOURCE_DIR=$1
MYDIR=`pwd`


display_usage()
{
	echo "megaide: ---------------------------------------------"
	echo "megaide: Use this script from megaide shim source tree"
	echo "megaide: ./script_name kernel_directory_location"
	echo "megaide: Ex:./build_shim_driver /usr/src/<kernel>"
	echo "megaide: ---------------------------------------------"
	exit 1
}

#
# use select the linux version to build, if there is an new 
# addition in shim source that will be added in this function
#
select_linux_version_to_build()
{
DONE=n
while [ "$DONE" = "n" ]
do
	echo "megaide: --------------------------------------------------"
	echo "megaide: Select the kernel for which driver module to build"
	echo "megaide: --------------------------------------------------"
	echo "megaide: 0 - Exit, Do not build the driver"
	echo "megaide: 1 - suse91 i386(regular/update/errata)"
	echo "megaide: 2 - suse91 x86_64(regular/update/errata)"
	echo "megaide: 3 - suse92 i386(regular/update/errata)"
	echo "megaide: 4 - suse92 x86_64(regular/update/errata)"
	echo "megaide: 5 - suse93 i386(regular/update/errata)"
	echo "megaide: 6 - sles9 i386(regular/update/errata)"
	echo "megaide: 7 - sles9 x86_64(regular/update/errata)"
	echo "megaide: 8 - sles10 i386(regular/update/errata)"
	echo "megaide: 9 - sles10 x86_64(regular/update/errata)"
	echo "megaide:10 - RedHat30 x86_64(regular/update/errata)"
	echo "megaide:11 - rh40 (regular/update/errata)"
	echo "megaide:12 - rh40 x86_64(regular/update/errata)"
	echo "megaide:13 - Another system with gcc version 3.x.x(regular/update/errata)"
	echo "megaide:14 - Another system with gcc version 2.x.x(regular/update/errata)"
	echo "megaide:15 - RHEL5"
	echo "megaide:16 - RHEL5_x86_64"
        echo "megaide:17 - RHEL3U9"
	echo "megaide:18 - RHEL3U9_x86_64"
        echo "megaide:19 - RHEL4U4"
	echo "megaide:20 - RHEL4U4_x86_64"
        echo "megaide: --------------------------------------------------"
	echo -n "megaide: Enter your selection (0-20): " 1>&2
	read x
	DONE="y"
done
return $x
}

check_if_build_success()
{
	VER="$1"
	IMG="$2"
	cd $KERN_SOURCE_DIR/drivers/scsi/megaide 
	ls 
	cd $MYDIR
	if [ ! -f megaide.$IMG ]; then
		echo "megaide: $VER driver image megaide.$IMG creation failed!!"
		echo "megaide: see $KERN_SOURCE_DIR/drivers/scsi/megaide/build.log for more informations"
		echo "megaide: Make sure you prepared the kernel source before using this script!!"
		echo "megaide: For more informations see megaide_shimdriver_readme.txt!!"
		exit 1 
	fi
} 


# build suse 91 driver image
build_suse91_driver_image()
{
	VER="$1"
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log

	check_if_build_success $VER ko

	rm -rf build.log
	rm -rf megaide.ko
	if [ "$VER" = suse91_x86_64 ]; then
	ld -m elf_x86_64 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_x86_64 -r -o megaide.ko megaide.o megaide.mod.o
	else
	ld -m elf_i386 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_i386 -r -o megaide.ko megaide.o megaide.mod.o
	fi
	
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}

# build suse 92 driver image
build_suse92_driver_image()
{
	VER="$1"
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log

	check_if_build_success $VER ko

	rm -rf build.log
	rm -rf megaide.ko
	if [ "$VER" = suse92_x86_64 ]; then
	ld -m elf_x86_64 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_x86_64 -r -o megaide.ko megaide.o megaide.mod.o
	else
	ld -m elf_i386 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_i386 -r -o megaide.ko megaide.o megaide.mod.o
	fi
	
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}

# build suse 93 driver image
build_suse93_driver_image()
{
	VER="$1"
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log

	check_if_build_success $VER ko

	rm -rf build.log
	rm -rf megaide.ko
	if [ "$VER" = suse93_x86_64 ]; then
	ld -m elf_x86_64 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_x86_64 -r -o megaide.ko megaide.o megaide.mod.o
	else
	ld -m elf_i386 -r -o megaide.o megaide_scsi.o lib/$VER/megaide_lib.o
	ld -m elf_i386 -r -o megaide.ko megaide.o megaide.mod.o
	fi
	
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}

# build redhat 40 driver image
# build redhat 40 driver image
build_rh40_driver_image()
{
	VER="$1"
	MOD_DIR=/lib/modules/`uname -r`/kernel/drivers/scsi/megaide/
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	#make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log
    make "$VER=yes" > build.log
	check_if_build_success $VER ko

	rm -rf build.log
	if [ ! -d $MOD_DIR ]
    then
	     mkdir $MOD_DIR
	     cp -f megaide.ko $MOD_DIR
	else
         cp -f megaide.ko $MOD_DIR
    fi
              
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}

# build sles9 driver image
build_sles9_driver_image()
{
    VER="$1"
	MOD_DIR=/lib/modules/`uname -r`/kernel/drivers/scsi/megaide/
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	#make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log
    make "$VER=yes" > build.log
	check_if_build_success $VER ko

	rm -rf build.log
	if [ ! -d $MOD_DIR ]
    then
	     mkdir $MOD_DIR
	     cp -f megaide.ko $MOD_DIR
	else
         cp -f megaide.ko $MOD_DIR
    fi
              
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}

# build sles10 driver image
build_sles10_driver_image()
{
	VER="$1"
	MOD_DIR=/lib/modules/`uname -r`/kernel/drivers/scsi/megaide/
	echo "megaide: Building $VER driver image.."
	cp -f Makefile-2.6 Makefile
	#make -C $KERN_SOURCE_DIR SUBDIRS=$PWD modules > build.log
    make "$VER=yes" > build.log
	check_if_build_success $VER ko

	rm -rf build.log
	if [ ! -d $MOD_DIR ]
    then
	     mkdir $MOD_DIR
	     cp -f megaide.ko $MOD_DIR
	else
         cp -f megaide.ko $MOD_DIR
    fi
              
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
	cp -f Makefile-2.4 Makefile
}


#
# build rh 2.4 driver image
#
build_2_4_kernel_driver_image()
{
	VER="$1"
        MOD_DIR=/lib/modules/`uname -r`/kernel/drivers/scsi/megaide/
	echo "megaide: Building $VER driver image.."

	cp -f Makefile-2.4 Makefile
	cp -f lib/$VER/megaide_lib.o lib
	cd $KERN_SOURCE_DIR 
	
        make megaide >  drivers/scsi/megaide/build.log
	check_if_build_success $VER o
	rm -rf build.log
        
        if [ ! -d $MOD_DIR ]
        then
             mkdir $MOD_DIR
             cp -f megaide.o $MOD_DIR
        else
             cp -f megaide.o $MOD_DIR
        fi
   
	echo "megaide: $VER driver image megaide.o is created successfully.."
}

build_RHEL5_driver_image()
{
	VER="$1"
	MOD_DIR=/lib/modules/`uname -r`/kernel/drivers/scsi/megaide/
	echo "megaide: Building $VER driver image.."

	cp -f Makefile-2.6 Makefile
	make "$VER=yes" > build.log
	if [ ! -d $MOD_DIR ]
    then
	     mkdir $MOD_DIR
	     cp -f megaide.ko $MOD_DIR
	else
         cp -f megaide.ko $MOD_DIR
    fi
	#check_if_build_success $VER ko
	echo "megaide: $VER driver image megaide.ko is created successfully.."
	rm -rf *.o
	rm -rf .megaide* 
	rm -rf .tmp* 
}

###########################################################################
# Main start
###########################################################################

if [ "$KERN_SOURCE_DIR" = "" ]; then
	echo "megaide: Kernel directory is not given!!"
	display_usage
fi

if [ ! -d $KERN_SOURCE_DIR/drivers/scsi/megaide ]; then
	echo "megaide: Given kernel directory=$KERN_SOURCE_DIR/drivers/scsi/megaide is not present!!"
	display_usage
fi

select_linux_version_to_build
SELECTION="$?"

if [ "$SELECTION" = "1" ]; then
	build_suse91_driver_image suse91
	exit 0 
fi

if [ "$SELECTION" = "2" ]; then
	build_suse91_driver_image suse91_x86_64
	exit 0 
fi

if [ "$SELECTION" = "3" ]; then
	build_suse92_driver_image suse92
	exit 0 
fi

if [ "$SELECTION" = "4" ]; then
	build_suse92_driver_image suse92_x86_64
	exit 0 
fi

if [ "$SELECTION" = "5" ]; then
	build_suse93_driver_image suse93
	exit 0 
fi

if [ "$SELECTION" = "6" ]; then
	build_sles9_driver_image sles9
	exit 0 
fi

if [ "$SELECTION" = "7" ]; then
	build_sles9_driver_image sles9_x86_64
	exit 0 
fi

if [ "$SELECTION" = "8" ]; then
	build_sles10_driver_image sles10
	exit 0 
fi

if [ "$SELECTION" = "9" ]; then
	build_sles10_driver_image sles10_x86_64
	exit 0 
fi
if [ "$SELECTION" = "10" ]; then
	build_2_4_kernel_driver_image rh30_x86_64
	exit 0 
fi

if [ "$SELECTION" = "11" ]; then
	build_rh40_driver_image rh40
	exit 0 
fi

if [ "$SELECTION" = "12" ]; then
	build_rh40_driver_image rh40_x86_64
	exit 0 
fi


if [ "$SELECTION" = "13" ]; then
	build_2_4_kernel_driver_image gcc_3xx
	exit 0 
fi

if [ "$SELECTION" = "14" ]; then
	build_2_4_kernel_driver_image gcc_2xx
	exit 0 
fi

if [ "$SELECTION" = "15" ]; then
	build_RHEL5_driver_image RHEL5
	exit 0
fi

if [ "$SELECTION" = "16" ]; then
	build_RHEL5_driver_image RHEL5_x86_64
	exit 0
fi

if [ "$SELECTION" = "17" ]; then
        build_2_4_kernel_driver_image RHEL3U9 
        exit 0
fi

if [ "$SELECTION" = "18" ]; then
        build_2_4_kernel_driver_image RHEL3U9_x86_64
        exit 0
fi

if [ "$SELECTION" = "19" ]; then
	build_rh40_driver_image rhel4.4_i386
	exit 0 
fi

if [ "$SELECTION" = "20" ]; then
	build_rh40_driver_image rhel4.4_x86_64
	exit 0 

echo "megaide: User terminated the build..."
exit 1

