#!/bin/sh

debug=false

# Linker flags used:
#
# Informational:
# --warn-common
# -Map $EXE.map
# --verbose
#
# Optimizations:
# --sort-common                 reduces padding
# --sort-section alignment      reduces padding
# --gc-sections                 throws out unused sections,
#                               does not work for shared libs
# -On                           Not used, maybe useful?
#
# List of files to link:
# $l_list                       == --start-group -llib1 -llib2 --end-group
# --start-group $O_FILES $A_FILES --end-group
#
# Shared library link:
# -shared                       self-explanatory
# -fPIC                         position-independent code
# --enable-new-dtags            ?
# -z,combreloc                  ?
# -soname="libbusybox.so.$BB_VER"
# --undefined=lbb_main          Seed name to start pulling from
#                               (otherwise we'll need --whole-archive)
# -static                       Not used, but may be useful! manpage:
#                               "... This option can be used with -shared.
#                               Doing so means that a shared library
#                               is being created but that all of the library's
#                               external references must be resolved by pulling
#                               in entries from static libraries."


try() {
    printf "%s\n" "Output of:" >$EXE.out
    printf "%s\n" "$*" >>$EXE.out
    printf "%s\n" "==========" >>$EXE.out
    $debug && echo "Trying: $*"
    "$@" >>$EXE.out 2>&1
    exitcode=$?
    return $exitcode
}

check_cc() {
    local tempname="/tmp/temp.$$.$RANDOM"
    # Can use "-o /dev/null", but older gcc tend to *unlink it* on failure! :(
    # "-xc": C language. "/dev/null" is an empty source file.
    if $CC $1 -shared -xc /dev/null -o "$tempname".o >/dev/null 2>&1; then
	echo "$1";
    else
	echo "$2";
    fi
    rm "$tempname".o 2>/dev/null
}

check_libc_is_glibc() {
    local tempname="/tmp/temp.$$.$RANDOM"
    echo "\
	#include <stdlib.h>
	/* Apparently uclibc defines __GLIBC__ (compat trick?). Oh well. */
	#if defined(__GLIBC__) && !defined(__UCLIBC__)
	syntax error here
	#endif
	" >"$tempname"
    if $CC "$tempname".c -c -o "$tempname".o >/dev/null 2>&1; then
	echo "$2";
    else
	echo "$1";
    fi
    rm "$tempname".c "$tempname".o 2>/dev/null
}

EXE="$1"
CC="$2"
CFLAGS="$3"
LDFLAGS="$4"
O_FILES="$5"
A_FILES="$6"
LDLIBS="$7"

# The -Wl,--sort-section option is not supported by older versions of ld
SORT_SECTION=`check_cc "-Wl,--sort-section -Wl,alignment" ""`

# Static linking against glibc produces buggy executables
# (glibc does not cope well with ld --gc-sections).
# See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
# Note that glibc is unsuitable for static linking anyway.
# We are removing -Wl,--gc-sections from link command line.
GC_SECTION=`(
. ./.config
if test x"$CONFIG_STATIC" = x"y"; then
    check_libc_is_glibc "" "-Wl,--gc-sections"
else
    echo "-Wl,--gc-sections"
fi
)`

# Sanitize lib list (dups, extra spaces etc)
LDLIBS=`echo "$LDLIBS" | xargs -n1 | sort | uniq | xargs`

# First link with all libs. If it fails, bail out
echo "Trying libraries: $LDLIBS"
# "lib1 lib2 lib3" -> "-llib1 -llib2 -llib3"
l_list=`echo "$LDLIBS" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
test "x$l_list" != "x" && l_list="-Wl,--start-group $l_list -Wl,--end-group"
try $CC $CFLAGS $LDFLAGS \
	-o $EXE \
	-Wl,--sort-common \
	$SORT_SECTION \
	$GC_SECTION \
	-Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
	$l_list \
|| {
    echo "Failed: $l_list"
    cat $EXE.out
    exit 1
}

# Now try to remove each lib and build without it.
# Stop when no lib can be removed.
while test "$LDLIBS"; do
    $debug && echo "Trying libraries: $LDLIBS"
    all_needed=true
    for one in $LDLIBS; do
	without_one=`echo " $LDLIBS " | sed "s/ $one / /g" | xargs`
	# "lib1 lib2 lib3" -> "-llib1 -llib2 -llib3"
	l_list=`echo "$without_one" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
	test "x$l_list" != "x" && l_list="-Wl,--start-group $l_list -Wl,--end-group"
	$debug && echo "Trying -l options: '$l_list'"
	try $CC $CFLAGS $LDFLAGS \
		-o $EXE \
		-Wl,--sort-common \
		$SORT_SECTION \
		$GC_SECTION \
		-Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
		$l_list
	if test $? = 0; then
	    echo " Library $one is not needed"
	    LDLIBS="$without_one"
	    all_needed=false
	else
	    echo " Library $one is needed"
	fi
    done
    # All libs were needed, can't remove any
    $all_needed && break
    # If there is no space char, the list has just one lib.
    # I'm not sure that in this case lib really is 100% needed.
    # Let's try linking without it anyway... thus commented out.
    #{ echo "$LDLIBS" | grep -q ' '; } || break
done

# Make the binary with final, minimal list of libs
echo "Final link with: ${LDLIBS:-<none>}"
l_list=`echo "$LDLIBS" | sed -e 's/ / -l/g' -e 's/^/-l/' -e 's/^-l$//'`
test "x$l_list" != "x" && l_list="-Wl,--start-group $l_list -Wl,--end-group"
# --verbose gives us gobs of info to stdout (e.g. linker script used)
if ! test -f busybox_ldscript; then
    try $CC $CFLAGS $LDFLAGS \
	    -o $EXE \
	    -Wl,--sort-common \
	    $SORT_SECTION \
	    $GC_SECTION \
	    -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
	    $l_list \
	    -Wl,--warn-common \
	    -Wl,-Map -Wl,$EXE.map \
	    -Wl,--verbose \
    || {
	cat $EXE.out
	exit 1
    }
else
    echo "Custom linker script 'busybox_ldscript' found, using it"
    # Add SORT_BY_ALIGNMENT to linker script (found in $EXE.out):
    #  .rodata         : { *(.rodata SORT_BY_ALIGNMENT(.rodata.*) .gnu.linkonce.r.*) }
    #  *(.data SORT_BY_ALIGNMENT(.data.*) .gnu.linkonce.d.*)
    #  *(.bss SORT_BY_ALIGNMENT(.bss.*) .gnu.linkonce.b.*)
    # This will eliminate most of the padding (~3kb).
    # Hmm, "ld --sort-section alignment" should do it too.
    try $CC $CFLAGS $LDFLAGS \
	    -o $EXE \
	    -Wl,--sort-common \
	    $SORT_SECTION \
	    $GC_SECTION \
	    -Wl,-T -Wl,busybox_ldscript \
	    -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
	    $l_list \
	    -Wl,--warn-common \
	    -Wl,-Map -Wl,$EXE.map \
	    -Wl,--verbose \
    || {
	cat $EXE.out
	exit 1
    }
fi

. ./.config

sharedlib_dir="0_lib"

if test "$CONFIG_BUILD_LIBBUSYBOX" = y; then
    mkdir "$sharedlib_dir" 2>/dev/null
    test -d "$sharedlib_dir" || {
	echo "Cannot make directory $sharedlib_dir"
	exit 1
    }
    ln -s "libbusybox.so.$BB_VER" "$sharedlib_dir"/libbusybox.so 2>/dev/null

    EXE="$sharedlib_dir/libbusybox.so.${BB_VER}_unstripped"
    try $CC $CFLAGS $LDFLAGS \
	    -o $EXE \
	    -shared -fPIC \
	    -Wl,--enable-new-dtags \
	    -Wl,-z,combreloc \
	    -Wl,-soname="libbusybox.so.$BB_VER" \
	    -Wl,--undefined=lbb_main \
	    -Wl,--sort-common \
	    $SORT_SECTION \
	    -Wl,--start-group $A_FILES -Wl,--end-group \
	    $l_list \
	    -Wl,--warn-common \
	    -Wl,-Map -Wl,$EXE.map \
	    -Wl,--verbose \
    || {
	echo "Linking $EXE failed"
	cat $EXE.out
	exit 1
    }
    $STRIP -s --remove-section=.note --remove-section=.comment $EXE -o "$sharedlib_dir/libbusybox.so.$BB_VER"
    chmod a+x "$sharedlib_dir/libbusybox.so.$BB_VER"
    echo "libbusybox: $sharedlib_dir/libbusybox.so.$BB_VER"
fi

if test "$CONFIG_FEATURE_SHARED_BUSYBOX" = y; then
    EXE="$sharedlib_dir/busybox_unstripped"
    try $CC $CFLAGS $LDFLAGS \
	    -o $EXE \
	    -Wl,--sort-common \
	    $SORT_SECTION \
	    $GC_SECTION \
	    -Wl,--start-group $O_FILES -Wl,--end-group \
	    -L"$sharedlib_dir" -lbusybox \
	    -Wl,--warn-common \
	    -Wl,-Map -Wl,$EXE.map \
	    -Wl,--verbose \
    || {
	echo "Linking $EXE failed"
	cat $EXE.out
	exit 1
    }
    $STRIP -s --remove-section=.note --remove-section=.comment $EXE -o "$sharedlib_dir/busybox"
    echo "busybox linked against libbusybox: $sharedlib_dir/busybox"
fi

if test "$CONFIG_FEATURE_INDIVIDUAL" = y; then
    echo "Linking individual applets against libbusybox (see $sharedlib_dir/*)"
    gcc -DNAME_MAIN_CNAME -E -include include/autoconf.h include/applets.h \
    | grep -v "^#" \
    | grep -v "^$" \
    > applet_lst.tmp
    while read name main junk; do

	echo "\
void lbb_prepare(const char *applet, char **argv);
int $main(int argc, char **argv);

int main(int argc, char **argv)
{
	lbb_prepare(\"$name\", argv);
	return $main(argc, argv);
}
" >"$sharedlib_dir/applet.c"

	EXE="$sharedlib_dir/$name"
	try $CC $CFLAGS $LDFLAGS "$sharedlib_dir/applet.c" \
		-o $EXE \
		-Wl,--sort-common \
		$SORT_SECTION \
		$GC_SECTION \
		-L"$sharedlib_dir" -lbusybox \
		-Wl,--warn-common \
	|| {
	    echo "Linking $EXE failed"
	    cat $EXE.out
	    exit 1
	}
	rm -- "$sharedlib_dir/applet.c" $EXE.out
	$STRIP -s --remove-section=.note --remove-section=.comment $EXE

    done <applet_lst.tmp
fi

# libbusybox.so is needed only for -lbusybox at link time,
# it is not needed at runtime. Deleting to reduce confusion.
rm "$sharedlib_dir"/libbusybox.so 2>/dev/null
exit 0 # or else we may confuse make
