add build system support for arch endian & float abi variants
[musl] / configure
index cee817e..042c41b 100755 (executable)
--- a/configure
+++ b/configure
@@ -54,6 +54,20 @@ stripdir () {
 while eval "fnmatch '*/' \"\${$1}\"" ; do eval "$1=\${$1%/}" ; done
 }
 
+trycppif () {
+printf "checking preprocessor condition %s... " "$1"
+echo "#if $1" > "$tmpc"
+echo "#error yes" >> "$tmpc"
+echo "#endif" >> "$tmpc"
+if $CC $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
+printf "false\n"
+return 1
+else
+printf "true\n"
+return 0
+fi
+}
+
 tryflag () {
 printf "checking whether compiler accepts %s... " "$2"
 echo "typedef int x;" > "$tmpc"
@@ -145,7 +159,7 @@ i=0
 set -C
 while : ; do i=$(($i+1))
 tmpc="./conf$$-$PPID-$i.c"
-2>/dev/null > "$tmpc" && break
+2>|/dev/null > "$tmpc" && break
 test "$i" -gt 50 && fail "$0: cannot create temporary file $tmpc"
 done
 set +C
@@ -199,6 +213,7 @@ i?86*) ARCH=i386 ;;
 x86_64*) ARCH=x86_64 ;;
 mips-*|mipsel-*) ARCH=mips ;;
 microblaze-*) ARCH=microblaze ;;
+powerpc-*) ARCH=powerpc ;;
 unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
 *) fail "$0: unknown or unsupported target \"$target\"" ;;
 esac
@@ -269,9 +284,19 @@ fnmatch '-march=*|*\ -march=*' "$CFLAGS" || tryldflag CFLAGS_AUTO -march=i486
 fnmatch '-mtune=*|*\ -mtune=*' "$CFLAGS" || tryldflag CFLAGS_AUTO -mtune=generic
 fi
 
+#
+# Even with -std=c99, gcc accepts some constructs which are constraint
+# violations. We want to treat these as errors regardless of whether
+# other purely stylistic warnings are enabled -- especially implicit
+# function declarations, which are a dangerous programming error.
+#
+tryflag CFLAGS_AUTO -Werror=implicit-function-declaration
+tryflag CFLAGS_AUTO -Werror=implicit-int
+tryflag CFLAGS_AUTO -Werror=pointer-sign
+tryflag CFLAGS_AUTO -Werror=pointer-arith
+
 if test "x$warnings" = xyes ; then
 tryflag CFLAGS_AUTO -Wall
-tryflag CFLAGS_AUTO -Wpointer-arith
 tryflag CFLAGS_AUTO -Wcast-align
 tryflag CFLAGS_AUTO -Wno-parentheses
 tryflag CFLAGS_AUTO -Wno-uninitialized
@@ -299,6 +324,23 @@ test -z "$LIBCC" && try_libcc=`$CC -print-file-name=libpcc.a 2>/dev/null` \
                  && tryldflag LIBCC "$try_libcc"
 printf "using compiler runtime libraries: %s\n" "$LIBCC"
 
+# Figure out arch variants for archs with variants
+SUBARCH=
+t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS_AUTO $CFLAGS"
+
+if test "$ARCH" = "arm" ; then
+trycppif __ARMEB__ "$t" && SUBARCH=${SUBARCH}eb
+trycppif __SOFTFP__ "$t" || SUBARCH=${SUBARCH}hf
+fi
+
+test "$ARCH" = "mips" && trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" \
+&& SUBARCH=${SUBARCH}el
+
+test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
+&& SUBARCH=${SUBARCH}el
+
+test "$SUBARCH" \
+&& printf "configured for %s variant: %s\n" "$ARCH" "$ARCH$SUBARCH"
 
 printf "creating config.mak... "
 
@@ -309,6 +351,7 @@ cat << EOF
 # This version of config.mak was generated by configure
 # Any changes made here will be lost if configure is re-run
 ARCH = $ARCH
+SUBARCH = $SUBARCH
 prefix = $prefix
 exec_prefix = $exec_prefix
 bindir = $bindir