X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=configure;h=c2db298ce95f71afce00efae02e8f164ec47271b;hb=97bd6b09dbe7478d5a90a06ecd9e5b59389d8eb9;hp=41ef9df7a2fb26227c913af8fa0318f751b295ca;hpb=e1d99894b6ce23055a2e29f72763e7fd9585a87f;p=musl diff --git a/configure b/configure index 41ef9df7..c2db298c 100755 --- a/configure +++ b/configure @@ -25,6 +25,7 @@ Fine tuning of the installation directories: System types: --target=TARGET configure to run on target TARGET [detected] --host=HOST same as --target + --build=BUILD build system type; used only to infer cross-compiling Optional features: --enable-optimize=... optimize listed components for speed over size [auto] @@ -129,6 +130,7 @@ includedir='$(prefix)/include' syslibdir='/lib' tools= tool_libs= +build= target= optimize=auto debug=no @@ -142,7 +144,7 @@ clang_wrapper=no for arg ; do case "$arg" in ---help) usage ;; +--help|-h) usage ;; --srcdir=*) srcdir=${arg#*=} ;; --prefix=*) prefix=${arg#*=} ;; --exec-prefix=*) exec_prefix=${arg#*=} ;; @@ -170,8 +172,9 @@ case "$arg" in --disable-wrapper|--enable-wrapper=no) wrapper=no ;; --enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ; gcc_wrapper=yes ;; --disable-gcc-wrapper|--enable-gcc-wrapper=no) wrapper=no ;; ---enable-*|--disable-*|--with-*|--without-*|--*dir=*|--build=*) ;; +--enable-*|--disable-*|--with-*|--without-*|--*dir=*) ;; --host=*|--target=*) target=${arg#*=} ;; +--build=*) build=${arg#*=} ;; -* ) echo "$0: unknown option $arg" ;; CC=*) CC=${arg#*=} ;; CFLAGS=*) CFLAGS=${arg#*=} ;; @@ -180,7 +183,7 @@ LDFLAGS=*) LDFLAGS=${arg#*=} ;; CROSS_COMPILE=*) CROSS_COMPILE=${arg#*=} ;; LIBCC=*) LIBCC=${arg#*=} ;; *=*) ;; -*) target=$arg ;; +*) build=$arg ; target=$arg ;; esac done @@ -213,6 +216,15 @@ done set +C trap 'rm "$tmpc"' EXIT INT QUIT TERM HUP +# +# Check whether we are cross-compiling, and set a default +# CROSS_COMPILE prefix if none was provided. +# +test "$target" && \ +test "$target" != "$build" && \ +test -z "$CROSS_COMPILE" && \ +CROSS_COMPILE="$target-" + # # Find a C compiler to use # @@ -299,17 +311,21 @@ printf "%s\n" "$target" # case "$target" in # Catch these early to simplify matching for 32-bit archs -mips64*|powerpc64*) fail "$0: unsupported target \"$target\"" ;; arm*) ARCH=arm ;; aarch64*) ARCH=aarch64 ;; +i?86-nt32*) ARCH=nt32 ;; i?86*) ARCH=i386 ;; x86_64-x32*|x32*|x86_64*x32) ARCH=x32 ;; +x86_64-nt64*) ARCH=nt64 ;; x86_64*) ARCH=x86_64 ;; +mips64*|mipsisa64*) ARCH=mips64 ;; mips*) ARCH=mips ;; microblaze*) ARCH=microblaze ;; or1k*) ARCH=or1k ;; +powerpc64*) ARCH=powerpc64 ;; powerpc*) ARCH=powerpc ;; sh[1-9bel-]*|sh|superh*) ARCH=sh ;; +s390x*) ARCH=s390x ;; unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;; *) fail "$0: unknown or unsupported target \"$target\"" ;; esac @@ -565,15 +581,10 @@ tryldflag LDFLAGS_AUTO -Wl,--no-undefined # versions built without shared library support and pcc are broken. tryldflag LDFLAGS_AUTO -Wl,--exclude-libs=ALL -test "$shared" = "no" || { -# Disable dynamic linking if ld is broken and can't do -Bsymbolic-functions -LDFLAGS_DUMMY= -tryldflag LDFLAGS_DUMMY -Wl,-Bsymbolic-functions || { -test "$shared" = "yes" && fail "$0: error: linker cannot build shared library" -printf "warning: disabling dynamic linking support\n" -shared=no -} -} +# Linking with -Bsymbolic-functions is no longer mandatory for +# the dynamic linker to work, but enable it if it works as +# a linking optimization. +tryldflag LDFLAGS_AUTO -Wl,-Bsymbolic-functions # Find compiler runtime library test -z "$LIBCC" && tryldflag LIBCC -lgcc && tryldflag LIBCC -lgcc_eh @@ -591,8 +602,26 @@ trycppif __ILP32__ "$t" && ARCH=x32 fi if test "$ARCH" = "arm" ; then +if trycppif __thumb2__ "$t" ; then +tryflag CFLAGS_AUTO -Wa,-mimplicit-it=always +tryflag CFLAGS_AUTO -Wa,-mthumb +fi trycppif __ARMEB__ "$t" && SUBARCH=${SUBARCH}eb trycppif __ARM_PCS_VFP "$t" && SUBARCH=${SUBARCH}hf +# Versions of clang up until at least 3.8 have the wrong constraint codes +# for floating point operands to inline asm. Detect this so the affected +# source files can just disable the asm. +if test "$cc_family" = clang ; then +printf "checking whether clang's vfp asm constraints work... " +echo 'float f(float x) { __asm__("":"+t"(x)); return x; }' > "$tmpc" +if $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +printf "yes\n" +else +printf "no\n" +CFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_VFP_ASM" +CFLAGS_AUTO="${CFLAGS_AUTO# }" +fi +fi fi if test "$ARCH" = "aarch64" ; then @@ -600,13 +629,33 @@ trycppif __AARCH64EB__ "$t" && SUBARCH=${SUBARCH}_be fi if test "$ARCH" = "mips" ; then +trycppif "__mips_isa_rev >= 6" "$t" && SUBARCH=${SUBARCH}r6 trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf fi +if test "$ARCH" = "mips64" ; then +trycppif "_MIPS_SIM != _ABI64" "$t" && ARCH=mipsn32 +trycppif "__mips_isa_rev >= 6" "$t" && SUBARCH=${SUBARCH}r6 +trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el +trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf +fi + +if test "$ARCH" = "powerpc" ; then +trycppif "__NO_FPRS__ && !_SOFT_FLOAT" "$t" && fail \ + "$0: error: compiler's floating point configuration is unsupported" +trycppif _SOFT_FLOAT "$t" && SUBARCH=${SUBARCH}-sf +fi + test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \ && SUBARCH=${SUBARCH}el +if test "$ARCH" = "powerpc64" ; then +trycppif "_CALL_ELF == 2" "$t" || fail "$0: error: unsupported powerpc64 ABI" +trycppif __LITTLE_ENDIAN__ "$t" && SUBARCH=${SUBARCH}le +trycppif _SOFT_FLOAT "$t" && fail "$0: error: soft-float not supported on powerpc64" +fi + if test "$ARCH" = "sh" ; then tryflag CFLAGS_AUTO -Wa,--isa=any trycppif __BIG_ENDIAN__ "$t" && SUBARCH=${SUBARCH}eb @@ -651,14 +700,25 @@ 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$srcdir/arch/$ARCH -I$srcdir/include $CPPFLAGS $CFLAGS \ - -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +if $CC $CFLAGS_C99FSE \ + -I$srcdir/arch/$ARCH -I$srcdir/arch/generic -I$srcdir/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 +# +# Some build systems globally pass in broken CFLAGS like -ffast-math +# for all packages. On recent GCC we can detect this and error out +# early rather than producing a seriously-broken math library. +# +if trycppif "__FAST_MATH__" \ + "$CFLAGS_C99FSE $CPPFLAGS $CFLAGS" ; then +fail "$0: error: compiler has broken floating point; check CFLAGS" +fi + printf "creating config.mak... " cmdline=$(quote "$0")