X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=configure;h=aa3cb42d37358b852d4a1f03e55ef2399f03e95b;hb=642936d6dd22b99534cab4099deea8d6ceefeea0;hp=327863c857c037e49f937ab6fee11262e73d7cc2;hpb=a80847d86a8865a78fdbebe7f9e2533f7a74e010;p=musl diff --git a/configure b/configure index 327863c8..aa3cb42d 100755 --- a/configure +++ b/configure @@ -45,6 +45,12 @@ exit 0 # Helper functions +quote () { +tr '\n' ' ' </dev/null 2>&1 && { echo "$1" ; return 0 ; } +$1 +EOF +printf %s\\n "$1" | sed -e "s/'/'\\\\''/g" -e "1s/^/'/" -e "\$s/\$/'/" -e "s#^'\([-[:alnum:]_,./:]*\)=\(.*\)\$#\1='\2#" +} echo () { printf "%s\n" "$*" ; } fail () { echo "$*" ; exit 1 ; } fnmatch () { eval "case \"\$2\" in $1) return 0 ;; *) return 1 ;; esac" ; } @@ -104,6 +110,7 @@ fi CFLAGS_C99FSE= CFLAGS_AUTO= +CFLAGS_MEMOPS= LDFLAGS_AUTO= OPTIMIZE_GLOBS= prefix=/usr/local/musl @@ -236,6 +243,35 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \ || { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; } tryflag CFLAGS_C99FSE -frounding-math +# +# We may use the may_alias attribute if __GNUC__ is defined, so +# if the compiler defines __GNUC__ but does not provide it, +# it must be defined away as part of the CFLAGS. +# +printf "checking whether compiler needs attribute((may_alias)) suppression... " +cat > "$tmpc" </dev/null 2>&1 ; then +printf "no\n" +else +printf "yes\n" +CFLAGS_C99FSE="$CFLAGS_C99FSE -D__may_alias__=" +fi + +# +# Check for options that may be needed to prevent the compiler from +# generating self-referential versions of memcpy,, memmove, memcmp, +# and memset. Really, we should add a check to determine if this +# option is sufficient, and if not, add a macro to cripple these +# functions with volatile... +# +tryflag CFLAGS_MEMOPS -fno-tree-loop-distribute-patterns # # If debugging is explicitly enabled, don't auto-enable optimizations @@ -264,7 +300,7 @@ xno|x) printf "disabled\n" ; optimize=no ;; esac test "$optimize" = no || tryflag CFLAGS_AUTO -Os || tryflag CFLAGS_AUTO -O2 -test "$optimize" = yes && optimize="internal,malloc,math,string" +test "$optimize" = yes && optimize="internal,malloc,string" if fnmatch 'no|size' "$optimize" ; then : else @@ -339,7 +375,6 @@ tryflag CFLAGS_AUTO -Werror=pointer-arith if test "x$warnings" = xyes ; then tryflag CFLAGS_AUTO -Wall -tryflag CFLAGS_AUTO -Wcast-align tryflag CFLAGS_AUTO -Wno-parentheses tryflag CFLAGS_AUTO -Wno-uninitialized tryflag CFLAGS_AUTO -Wno-missing-braces @@ -372,7 +407,7 @@ t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS_AUTO $CFLAGS" if test "$ARCH" = "arm" ; then trycppif __ARMEB__ "$t" && SUBARCH=${SUBARCH}eb -trycppif __SOFTFP__ "$t" || SUBARCH=${SUBARCH}hf +trycppif __ARM_PCS_VFP "$t" && SUBARCH=${SUBARCH}hf fi test "$ARCH" = "mips" && trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" \ @@ -384,16 +419,47 @@ test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \ test "$SUBARCH" \ && printf "configured for %s variant: %s\n" "$ARCH" "$ARCH$SUBARCH" +case "$ARCH$SUBARCH" in +arm) ASMSUBARCH=el ;; +*) ASMSUBARCH=$SUBARCH ;; +esac + +# +# Some archs (powerpc) have different possible long double formats +# that the compiler can be configured for. The logic for whether this +# is supported is in bits/float.h; in general, it is not. We need to +# check for mismatches here or code in printf, strotd, and scanf will +# be dangerously incorrect because it depends on (1) the macros being +# correct, and (2) IEEE semantics. +# +printf "checking whether compiler's long double definition matches float.h... " +echo '#include ' > "$tmpc" +echo '#if LDBL_MANT_DIG == 53' >> "$tmpc" +echo 'typedef char ldcheck[9-(int)sizeof(long double)];' >> "$tmpc" +echo '#endif' >> "$tmpc" +if $CC $CFLAGS_C99FSE -I./arch/$ARCH -I./include $CPPFLAGS $CFLAGS \ + -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +printf "yes\n" +else +printf "no\n" +fail "$0: error: unsupported long double type" +fi + printf "creating config.mak... " +cmdline=$(quote "$0") +for i ; do cmdline="$cmdline $(quote "$i")" ; done + exec 3>&1 1>config.mak cat << EOF -# This version of config.mak was generated by configure +# This version of config.mak was generated by: +# $cmdline # Any changes made here will be lost if configure is re-run ARCH = $ARCH SUBARCH = $SUBARCH +ASMSUBARCH = $ASMSUBARCH prefix = $prefix exec_prefix = $exec_prefix bindir = $bindir @@ -403,6 +469,7 @@ syslibdir = $syslibdir CC = $CC CFLAGS= $CFLAGS_AUTO $CFLAGS CFLAGS_C99FSE = $CFLAGS_C99FSE +CFLAGS_MEMOPS = $CFLAGS_MEMOPS CPPFLAGS = $CPPFLAGS LDFLAGS = $LDFLAGS_AUTO $LDFLAGS CROSS_COMPILE = $CROSS_COMPILE