#!/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
    return $?
}

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".c
    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 --sort-section option is not supported by older versions of ld
SORT_SECTION=`check_cc "-Wl,--sort-section,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_SECTIONS=`(
. ./.config
if test x"$CONFIG_STATIC" = x"y"; then
    check_libc_is_glibc "" "-Wl,--gc-sections"
else
    echo "-Wl,--gc-sections"
fi
)`

# The --gc-sections option is not supported by older versions of ld
if test -n "$GC_SECTIONS"; then
    GC_SECTIONS=`check_cc "$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_SECTIONS \
	-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
    last_needed=false
    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_SECTIONS \
		-Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
		$l_list
	if test $? = 0; then
	    echo " Library $one is not needed, excluding it"
	    LDLIBS="$without_one"
	    all_needed=false
	    last_needed=false
	else
	    echo " Library $one is needed, can't exclude it (yet)"
	    last_needed=true
	fi
    done
    # All libs were needed, can't remove any
    $all_needed && break
    # Optimization: was the last tried lib needed?
    if $last_needed; then
	# Was it the only one lib left? Don't test again then.
	{ echo "$LDLIBS" | grep -q ' '; } || break
    fi
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_SECTIONS \
	    -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
	    $l_list \
	    -Wl,--warn-common \
	    -Wl,-Map,$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_SECTIONS \
	    -Wl,-T,busybox_ldscript \
	    -Wl,--start-group $O_FILES $A_FILES -Wl,--end-group \
	    $l_list \
	    -Wl,--warn-common \
	    -Wl,-Map,$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,$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_SECTIONS \
	    -Wl,--start-group $O_FILES -Wl,--end-group \
	    -L"$sharedlib_dir" -lbusybox \
	    -Wl,--warn-common \
	    -Wl,-Map,$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_SECTIONS \
		-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
