ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/scripts/ubinize-image.sh b/scripts/ubinize-image.sh
new file mode 100755
index 0000000..d8b8cd3
--- /dev/null
+++ b/scripts/ubinize-image.sh
@@ -0,0 +1,170 @@
+#!/bin/sh
+
+. $TOPDIR/scripts/functions.sh
+
+part=""
+ubootenv=""
+ubinize_param=""
+kernel=""
+rootfs=""
+outfile=""
+err=""
+ubinize_seq=""
+
+ubivol() {
+	local volid="$1"
+	local name="$2"
+	local image="$3"
+	local autoresize="$4"
+	local size="$5"
+	local voltype="${6:-dynamic}"
+	echo "[$name]"
+	echo "mode=ubi"
+	echo "vol_id=$volid"
+	echo "vol_type=$voltype"
+	echo "vol_name=$name"
+	if [ "$image" ]; then
+		echo "image=$image"
+		[ -n "$size" ] && echo "vol_size=${size}"
+	else
+		echo "vol_size=1MiB"
+	fi
+	if [ "$autoresize" ]; then
+		echo "vol_flags=autoresize"
+	fi
+}
+
+ubilayout() {
+	local vol_id=0
+	local rootsize
+	local autoresize
+	local rootfs_type
+	local voltype
+
+	rootfs_type="$( get_fs_type "$2" )"
+	if [ "$1" = "ubootenv" ]; then
+		ubivol $vol_id ubootenv
+		vol_id=$(( vol_id + 1 ))
+		ubivol $vol_id ubootenv2
+		vol_id=$(( vol_id + 1 ))
+	fi
+	for part in $parts; do
+		name="${part%%=*}"
+		prev="$part"
+		part="${part#*=}"
+		voltype=dynamic
+		[ "$prev" = "$part" ] && part=
+
+		image="${part%%=*}"
+		if [ "${image#:}" != "$image" ]; then
+			voltype=static
+			image="${image#:}"
+		fi
+		prev="$part"
+		part="${part#*=}"
+		[ "$prev" = "$part" ] && part=
+
+		size="$part"
+		if [ -z "$size" ]; then
+			size="$( round_up "$( stat -c%s "$image" )" 1024 )"
+		else
+			size="${size}MiB"
+		fi
+
+		ubivol $vol_id "$name" "$image" "" "${size}" "$voltype"
+		vol_id=$(( vol_id + 1 ))
+	done
+	if [ "$3" ]; then
+		ubivol $vol_id kernel "$3"
+		vol_id=$(( vol_id + 1 ))
+	fi
+
+	if [ "$2" ]; then
+		case "$rootfs_type" in
+		"ubifs")
+			autoresize=1
+			;;
+		"squashfs")
+			# squashfs uses 1k block size, ensure we do not
+			# violate that
+			rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )"
+			;;
+		esac
+		ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize"
+
+		vol_id=$(( vol_id + 1 ))
+		[ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1
+	fi
+}
+
+set_ubinize_seq() {
+	if [ -n "$SOURCE_DATE_EPOCH" ] ; then
+		ubinize_seq="-Q $SOURCE_DATE_EPOCH"
+	fi
+}
+
+while [ "$1" ]; do
+	case "$1" in
+	"--uboot-env")
+		ubootenv="ubootenv"
+		shift
+		continue
+		;;
+	"--kernel")
+		kernel="$2"
+		shift
+		shift
+		continue
+		;;
+	"--rootfs")
+		rootfs="$2"
+		shift
+		shift
+		continue
+		;;
+	"--part")
+		parts="$parts $2"
+		shift
+		shift
+		continue
+		;;
+	"-"*)
+		ubinize_param="$*"
+		break
+		;;
+	*)
+		if [ ! "$outfile" ]; then
+			outfile=$1
+			shift
+			continue
+		fi
+		;;
+	esac
+done
+
+if [ ! -r "$rootfs" ] && [ ! -r "$kernel" ] && [ ! "$parts" ] && [ ! "$outfile" ]; then
+	echo "syntax: $0 [--uboot-env] [--part <name>=<file>] [--kernel kernelimage] [--rootfs rootfsimage] out [ubinize opts]"
+	exit 1
+fi
+
+ubinize="$( command -v ubinize )"
+if [ ! -x "$ubinize" ]; then
+	echo "ubinize tool not found or not usable"
+	exit 1
+fi
+
+ubinizecfg="$( mktemp 2> /dev/null )"
+if [ -z "$ubinizecfg" ]; then
+	# try OSX signature
+	ubinizecfg="$( mktemp -t 'ubitmp' )"
+fi
+ubilayout "$ubootenv" "$rootfs" "$kernel" > "$ubinizecfg"
+
+set_ubinize_seq
+cat "$ubinizecfg"
+ubinize $ubinize_seq -o "$outfile" $ubinize_param "$ubinizecfg"
+err="$?"
+[ ! -e "$outfile" ] && err=2
+rm "$ubinizecfg"
+
+exit $err