#!/bin/sh

. ./conf.py

{ test -f linux/.config && test -f linux/vmlinux.original; } || {
	echo "linux/.config or linux/vmlinux.original does not exist"
	exit 1
}
grep -q ^CONFIG_OPTIMIZE_INLINING=y linux/.config && {
	echo -n "\
Warning: CONFIG_OPTIMIZE_INLINING is selected.
gcc can spuriously deinline inlines, generating many duplicate
functions in vmlinux and making it hard to measure inline bloat. See
	https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66122
"
}
grep -q ^CONFIG_CC_OPTIMIZE_FOR_SIZE=y linux/.config || {
	echo -n "\
Warning: CONFIG_CC_OPTIMIZE_FOR_SIZE is not selected.
Alignment padding will make code size measurement less stable.
"
}


echo "Finding, sorting and filtering inlines for testing"
(
cd linux || exit 1
test -f conf.py && exit 1
cp ../conf.py .
../01find_inlines >inlines.log
../02sort_inlines inlines.log
rm -f conf.py
) 2>&1 | tee -a inlines_err.log
test -f linux/inlines.log.filtered || {
	echo "linux/inlines.log.filtered does not exist"
	exit 1
}
mv linux/inlines.log* .


lines=`wc -l <inlines.log.filtered`
lines=$((lines/dir_count + 1))
echo "Making $dir_count copies of linux/, each with $lines inlines to test"
exec <inlines.log.filtered
for n in `seq 1 $dir_count`; do
	cp -a linux linux.$n || exit 1
	# read exactly "lines" lines from stdin
	grep -m "$lines" . >"linux.$n/inlines.log.filtered"
	echo "Done: linux.$n"
done
echo "Remaining free space:"
df -h .


echo "Spawning iniline size measuring jobs in linux.*"
for n in `seq 1 $dir_count`; do
	(
	cd linux.$n || exit 1
	setsid nice ../03rebuild_inlines <inlines.log.filtered >>inlines.log.measured 2>>inlines_err.log &
	)
	echo -n .
done
echo "Done"
