File gcc-uClibc.in of Package uClibc

#!/bin/sh
# This scripts is a simple wrapper to compile .c files statically with uClibc.
# Caution! Until now this has just been used to compile some helloworld.c and
# compiling busybox. Don't expect this to work out of the box.
# Patches welcome :)
# set -x

if [ $# -eq 0 ]; then
	echo "gcc-uClibc: no input files"
	exit 1
fi

# make does the job for us
SHARED_LIB_LOADER_PREFIX="@SHARED_LIB_LOADER_PREFIX@"
RUNTIME_PREFIX="@RUNTIME_PREFIX@"
DEVEL_PREFIX="@DEVEL_PREFIX@"

CMDLINE=($@)
USE_C=
END_GROUP=
UCLIBC_END=

# tweak the commandline
for c in $(seq 0 $((${#CMDLINE[@]} - 1))); do
    i="${CMDLINE[$c]}"
    case "$i" in
        -c)  USE_C=1 ;;
        -r)  USE_C=1 ;;
	-Wl,--end-group)
	    UCLIBC_END="-Wl,--end-group"
	    CMDLINE[$c]=
	    ;;
        -DDEBUGUCLIBC) DEBUG_UCLIBC=1 ;;
    esac
done

# Environment
CC=$(which gcc)
LIBGCC="$($CC -print-libgcc-file-name)"
CC_INC=$($CC -print-file-name=include)
CC_INCFIXED=$($CC -print-file-name=include-fixed)
UCLIBC_INC="${DEVEL_PREFIX}include"
UCLIBC_CFLAGS="-Os -I$UCLIBC_INC -isystem $CC_INC -idirafter $CC_INCFIXED -idirafter /usr/include"
UCLIBC_LDFLAGS="-static -nostdinc -nostdlib"
if [ "$USE_C" ]; then
    UCLIBC_OBJ=
    UCLIBC_STATIC=
else
    UCLIBC_OBJ="${DEVEL_PREFIX}lib/crt[1in].o"
    UCLIBC_STATIC="${DEVEL_PREFIX}lib/libc.a $LIBGCC"
fi  

if [ "$1" = "-E" -a "$3" = "-" ]; then
    $CC "$@"
    exit $?
fi

# Debug
if [ "$DEBUG_UCLIBC" ]; then
    echo CC=\"$CC\"
    echo LIBGCC=\"$LIBGCC\"
    echo GCC_INC=\"$GCC_INC\"
    echo GCC_INCFIXED=\"$GCC_INCFIXED\"
    echo UCLIBC_INC=\"$UCLIBC_INC\" 
    echo UCLIBC_CFLAGS=\"$UCLIBC_CFLAGS\" 
    echo UCLIBC_LDFLAGS=\"$UCLIBC_LDFLAGS\" 
    echo UCLIBC_OBJ=\"$UCLIBC_OBJ\" 
    echo UCLIBC_STATIC=\"$UCLIBC_STATIC\"
    echo CMDLINE=\"${CMDLINE[@]}\"
    set -x
fi

# call compiler
$CC $UCLIBC_LDFLAGS $UCLIBC_CFLAGS $GCC_INC ${CMDLINE[@]} $UCLIBC_OBJ $UCLIBC_STATIC $UCLIBC_END

openSUSE Build Service is sponsored by