usage () {
cat <<EOF
-Usage: $0 [OPTION]... [VAR=VALUE]... [BUILDTYPE]
+Usage: $0 [OPTION]... [VAR=VALUE]... [TARGET]
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
System types:
--target=TARGET configure to run on target TARGET [detected]
- --build=BUILD same as --target
+ --host=HOST same as --target
Optional features:
--enable-debug build with debugging information [disabled]
fi
}
+tryldflag () {
+printf "checking whether linker accepts %s... " "$2"
+echo "typedef int x;" > "$tmpc"
+if "$CC" -nostdlib -shared "$2" -o /dev/null "$tmpc" 2>/dev/null ; then
+printf "yes\n"
+eval "$1=\"\${$1} \$2\""
+eval "$1=\${$1# }"
+return 0
+else
+printf "no\n"
+return 1
+fi
+}
+
# Beginning of actual script
+CFLAGS_C99FSE=
+CFLAGS_AUTO=
+LDFLAGS_AUTO=
prefix=
exec_prefix=
bindir=
libdir=
includedir=
syslibdir=
-build=
+target=
debug=no
warnings=
shared=yes
--disable-warnings|--enable-warnings=no) warnings=no ;;
--enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ;;
--disable-gcc-wrapper|--enable-gcc-wrapper=no) wrapper=no ;;
---enable-*|--disable-*|--with-*|--without-*|--*dir=*|--host=*) ;;
---build=*|--target=*) build=${arg#*=} ;;
+--enable-*|--disable-*|--with-*|--without-*|--*dir=*|--build=*) ;;
+--host=*|--target=*) target=${arg#*=} ;;
-* ) echo "$0: unknown option $arg" ;;
CC=*) CC=${arg#*=} ;;
CFLAGS=*) CFLAGS=${arg#*=} ;;
CPPFLAGS=*) CPPFLAGS=${arg#*=} ;;
LDFLAGS=*) LDFLAGS=${arg#*=} ;;
-*) build=$arg ;;
+*=*) ;;
+*) target=$arg ;;
esac
done
#
if test -z "$wrapper" ; then
printf "checking whether compiler is gcc... "
-if fnmatch 'gcc*|GCC*' "$("$CC" --version 2>/dev/null)" ; then
+if fnmatch '*gcc\ version*' "$("$CC" -v 2>&1)" ; then
echo yes
printf "checking whether to build musl-gcc wrapper... "
wrapper=yes
#
-# Find the build architecture
+# Find the target architecture
#
-printf "checking build system type... "
-test -n "$build" || build=$("$CC" -dumpmachine 2>/dev/null) || build=unknown
-printf "%s\n" "$build"
+printf "checking target system type... "
+test -n "$target" || target=$("$CC" -dumpmachine 2>/dev/null) || target=unknown
+printf "%s\n" "$target"
#
# Convert to just ARCH
#
-case "$build" in
+case "$target" in
arm*) ARCH=arm ;;
i?86*) ARCH=i386 ;;
x86_64*) ARCH=x86_64 ;;
-unknown) fail "$0: unable to detect built target; try $0 --build=..." ;;
-*) fail "$0: unknown or unsupported build target \"$build\"" ;;
+mips-*|mipsel-*) ARCH=mips ;;
+unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
+*) fail "$0: unknown or unsupported target \"$target\"" ;;
esac
#
tryflag CFLAGS_C99FSE -ffreestanding \
|| tryflag CFLAGS_C99FSE -fno-builtin
tryflag CFLAGS_C99FSE -fexcess-precision=standard \
-|| tryflag CFLAGS_C99FSE -ffloat-store
+|| { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; }
+tryflag CFLAGS_C99FSE -frounding-math
#
# Setup basic default CFLAGS: debug, optimization, and -pipe
tryflag CFLAGS_AUTO -Wno-unknown-pragmas
fi
+# Some patched GCC builds have these defaults messed up...
+tryflag CFLAGS_AUTO -fno-stack-protector
+tryldflag LDFLAGS_AUTO -Wl,--hash-style=sysv
+
+# Disable dynamic linking if ld is broken and can't do -Bsymbolic-functions
+LDFLAGS_DUMMY=
+tryldflag LDFLAGS_DUMMY -Wl,-Bsymbolic-functions || {
+printf "warning: disabling dynamic linking support\n"
+shared=no
+}
+
+
printf "creating config.mak... "
CFLAGS= $CFLAGS_AUTO $CFLAGS
CFLAGS_C99FSE = $CFLAGS_C99FSE
CPPFLAGS = $CPPFLAGS
-LDFLAGS = $LDFLAGS
+LDFLAGS = $LDFLAGS_AUTO $LDFLAGS
EOF
test "x$static" = xno && echo "STATIC_LIBS ="
test "x$shared" = xno && echo "SHARED_LIBS ="