X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=configure;h=7b29ae40f68599080c1f57c74ac47dd4a3793798;hb=f22a9edaf8a6f2ca1d314d18b3785558279a5c03;hp=434242b472ea0542163738cddae06cd80f202bf9;hpb=3d7f5c363e27426a3977bc6fa0436e92653eccf1;p=musl diff --git a/configure b/configure index 434242b4..7b29ae40 100755 --- a/configure +++ b/configure @@ -27,6 +27,7 @@ Optional features: --enable-optimize=... optimize listed components for speed over size [auto] --enable-debug build with debugging information [disabled] --enable-warnings build with recommended warnings flags [disabled] + --enable-visibility use global visibility options to optimize PIC [auto] --enable-gcc-wrapper build musl-gcc toolchain wrapper [auto] --disable-shared inhibit building shared library [enabled] --disable-static inhibit building static library [enabled] @@ -79,7 +80,7 @@ fi tryflag () { printf "checking whether compiler accepts %s... " "$2" echo "typedef int x;" > "$tmpc" -if $CC "$2" -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +if $CC $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then printf "yes\n" eval "$1=\"\${$1} \$2\"" eval "$1=\${$1# }" @@ -93,7 +94,7 @@ fi tryldflag () { printf "checking whether linker accepts %s... " "$2" echo "typedef int x;" > "$tmpc" -if $CC -nostdlib -shared "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +if $CC $LDFLAGS_TRY -nostdlib -shared "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then printf "yes\n" eval "$1=\"\${$1} \$2\"" eval "$1=\${$1# }" @@ -111,7 +112,10 @@ fi CFLAGS_C99FSE= CFLAGS_AUTO= CFLAGS_MEMOPS= +CFLAGS_NOSSP= +CFLAGS_TRY= LDFLAGS_AUTO= +LDFLAGS_TRY= OPTIMIZE_GLOBS= prefix=/usr/local/musl exec_prefix='$(prefix)' @@ -123,8 +127,10 @@ target= optimize=auto debug=no warnings=no -shared=yes +visibility=auto +shared=auto static=yes +wrapper=auto for arg ; do case "$arg" in @@ -146,6 +152,8 @@ case "$arg" in --disable-debug|--enable-debug=no) debug=no ;; --enable-warnings|--enable-warnings=yes) warnings=yes ;; --disable-warnings|--enable-warnings=no) warnings=no ;; +--enable-visibility|--enable-visibility=yes) visibility=yes ;; +--disable-visibility|--enable-visibility=no) visibility=no ;; --enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ;; --disable-gcc-wrapper|--enable-gcc-wrapper=no) wrapper=no ;; --enable-*|--disable-*|--with-*|--without-*|--*dir=*|--build=*) ;; @@ -189,24 +197,51 @@ trycc ${CROSS_COMPILE}cc printf "%s\n" "$CC" test -n "$CC" || { echo "$0: cannot find a C compiler" ; exit 1 ; } +printf "checking whether C compiler works... " +echo "typedef int x;" > "$tmpc" +if output=$($CC $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" 2>&1) ; then +printf "yes\n" +else +printf "no; compiler output follows:\n%s\n" "$output" +exit 1 +fi + # -# Only build musl-gcc wrapper if toolchain does not already target musl +# Figure out options to force errors on unknown flags. +# +tryflag CFLAGS_TRY -Werror=unknown-warning-option +tryflag CFLAGS_TRY -Werror=unused-command-line-argument +tryldflag LDFLAGS_TRY -Werror=unknown-warning-option +tryldflag LDFLAGS_TRY -Werror=unused-command-line-argument + +# +# Need to know if the compiler is gcc to decide whether to build the +# musl-gcc wrapper, and for critical bug detection in some gcc versions. # -if test -z "$wrapper" ; then printf "checking whether compiler is gcc... " -if fnmatch '*gcc\ version*' "$($CC -v 2>&1)" ; then -echo yes +if fnmatch '*gcc\ version*' "$(LC_ALL=C $CC -v 2>&1)" ; then +cc_is_gcc=yes +else +cc_is_gcc=no +fi +echo "$cc_is_gcc" + +# +# Only build musl-gcc wrapper if toolchain does not already target musl +# +if test "$wrapper" = auto ; then printf "checking whether to build musl-gcc wrapper... " +if test "$cc_is_gcc" = yes ; then wrapper=yes while read line ; do case "$line" in */ld-musl-*) wrapper=no ;; esac done < "$tmpc" +echo 'int foo(void) { }' >> "$tmpc" +echo 'int bar(void) { fp = foo; return foo(); }' >> "$tmpc" +if $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS \ + -DSHARED -fPIC -I./src/internal -include vis.h \ + -nostdlib -shared -Wl,-Bsymbolic-functions \ + -o /dev/null "$tmpc" >/dev/null 2>&1 ; then +visibility=yes +else +visibility=no +fi +printf "%s\n" "$visibility" +fi + +if test "x$visibility" = xyes ; then +CFLAGS_AUTO="$CFLAGS_AUTO -include vis.h" +CFLAGS_AUTO="${CFLAGS_AUTO# }" +fi + # Some patched GCC builds have these defaults messed up... -tryflag CFLAGS_AUTO -fno-stack-protector tryldflag LDFLAGS_AUTO -Wl,--hash-style=both +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 } +} # Find compiler runtime library test -z "$LIBCC" && tryldflag LIBCC -lgcc && tryldflag LIBCC -lgcc_eh @@ -406,13 +478,21 @@ printf "using compiler runtime libraries: %s\n" "$LIBCC" # Figure out arch variants for archs with variants SUBARCH= -t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS_AUTO $CFLAGS" +t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS" + +if test "$ARCH" = "x86_64" ; then +trycppif __ILP32__ "$t" && ARCH=x32 +fi if test "$ARCH" = "arm" ; then trycppif __ARMEB__ "$t" && SUBARCH=${SUBARCH}eb trycppif __ARM_PCS_VFP "$t" && SUBARCH=${SUBARCH}hf fi +if test "$ARCH" = "aarch64" ; then +trycppif __AARCH64EB__ "$t" && SUBARCH=${SUBARCH}_be +fi + if test "$ARCH" = "mips" ; then trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf @@ -423,7 +503,7 @@ test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \ if test "$ARCH" = "sh" ; then trycppif __BIG_ENDIAN__ "$t" && SUBARCH=${SUBARCH}eb -if trycppif __SH_FPU_ANY__ "$t" ; then +if trycppif "__SH_FPU_ANY__ || __SH4__" "$t" ; then # Some sh configurations are broken and replace double with float # rather than using softfloat when the fpu is present but only # supports single precision. Reject them. @@ -491,9 +571,10 @@ libdir = $libdir includedir = $includedir syslibdir = $syslibdir CC = $CC -CFLAGS= $CFLAGS_AUTO $CFLAGS +CFLAGS = $CFLAGS_AUTO $CFLAGS CFLAGS_C99FSE = $CFLAGS_C99FSE CFLAGS_MEMOPS = $CFLAGS_MEMOPS +CFLAGS_NOSSP = $CFLAGS_NOSSP CPPFLAGS = $CPPFLAGS LDFLAGS = $LDFLAGS_AUTO $LDFLAGS CROSS_COMPILE = $CROSS_COMPILE