#!/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 
# LSI Logic Corporation

KERN_SOURCE_DIR=$1


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 - RedHat30 x86_64(regular/update/errata)"
	echo "megaide: 9 - rh40 (regular/update/errata)"
	echo "megaide:10 - rh40 x86_64(regular/update/errata)"
	echo "megaide:11 - Another system with gcc version 3.x.x(regular/update/errata)"
	echo "megaide:12 - Another system with gcc version 2.x.x(regular/update/errata)"
	echo "megaide: --------------------------------------------------"
	echo -n "megaide: Enter your selection (0-7): " 1>&2
	read x
	DONE="y"
done
return $x
}

check_if_build_success()
{
	VER="$1"
	IMG="$2"
	cd $KERN_SOURCE_DIR/drivers/scsi/megaide 
	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_rh40_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" = rh40_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 sles 9 driver image
build_sles9_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" = sles9_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 rh 2.4 driver image
#
build_2_4_kernel_driver_image()
{
	VER="$1"
	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
	echo "megaide: $VER driver image megaide.o is created successfully.."
}


###########################################################################
# 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_2_4_kernel_driver_image rh30_x86_64
	exit 0 
fi

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

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


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

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

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

