Merge remote-tracking branch 'nsz/exp'
[musl] / configure
index e3d97c2..5beaa10 100755 (executable)
--- a/configure
+++ b/configure
@@ -67,10 +67,27 @@ return 1
 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=
@@ -180,6 +197,7 @@ case "$target" in
 arm*) ARCH=arm ;;
 i?86*) ARCH=i386 ;;
 x86_64*) ARCH=x86_64 ;;
+mips-*|mipsel-*) ARCH=mips ;;
 unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
 *) fail "$0: unknown or unsupported target \"$target\"" ;;
 esac
@@ -192,7 +210,7 @@ tryflag CFLAGS_C99FSE -nostdinc
 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
 
 #
@@ -246,6 +264,18 @@ tryflag CFLAGS_AUTO -Wno-unused-but-set-variable
 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... "
 
@@ -266,7 +296,7 @@ CC = $CC
 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 ="