|
Message-ID: <05a838e1-ef3e-291e-5ddd-3867beed8653@gmail.com> Date: Sun, 23 Oct 2016 19:19:02 -0500 From: Laine Gholson <laine.gholson@...il.com> To: musl@...ts.openwall.com Subject: Re: Unable to build with --enable-shared I suggest that you put '-B/usr/local/bin/x86_64-pc-linux-gnu', in $CC, because it is needed for the C compiler to run correctly, e.g CC="x86_64-pc-linux-gnu-gcc -B/usr/local/bin/x86_64-pc-linux-gnu", and that will work fine with the current configure script. On 10/23/16 17:20, Samuel Sadok wrote: > 2016-10-23 18:17 GMT+02:00 Rich Felker <dalias@...c.org>: >> On Sun, Oct 23, 2016 at 02:22:28AM +0200, Samuel Sadok wrote: >>> 2016-10-22 23:58 GMT+02:00 Szabolcs Nagy <nsz@...t70.net>: >>>> * Samuel Sadok <innovation-labs@...install.ch> [2016-10-22 22:37:46 +0200]: >>>>> I am unable to build musl with --enable-shared. Multiple issues in >>>>> unrelated projects (e.g. here: https://bugs.swift.org/browse/SR-1023) >>>>> suggest that the culprit is a change in behaviour between binutils >>>>> 2.25 and 2.26. >>>>> >>>> >>>> that bug is different, that's about object symbols >>>> >>>> (swift seems to misuse protected visibility objects, >>>> and instead of fixing the problem they switched to the >>>> gold linker which does not yet have the bfd linker fix, >>>> such incompetence is frustrating.. however the issue >>>> does not affect musl: we don't mark objects protected >>>> to avoid issues with broken toolchains.) >>> >>> That's precisely why I'm trying to get away from Apple. >>> >>>> >>>>> $ make >>>>> [...] >>>>> x86_64-pc-linux-gnu-gcc -D_XOPEN_SOURCE=700 -I./arch/x86_64 >>>>> -I./arch/generic -Iobj/src/internal -I./src/internal -Iobj/include >>>>> -I./include -include vis.h -B/usr/local/bin/x86_64-pc-linux-gnu- >>>>> -fPIC -c -o obj/src/process/posix_spawn.lo src/process/posix_spawn.c >>>> >>>> some flags are missing here.. e.g. freestanding flags >>> >>> Thanks for the pointer, that turned out to be the problem. >>> >>> I should mention that I am cross-compiling from macOS. Since I had a >>> Linux VM flying around, I tried to build musl there (success) and >>> compared the logs. >>> Looking at config.mak, there apparently was a serious misconfiguration: >>> >>> config.mak on the cross-build system (macOS): >>> >>> CFLAGS_AUTO = -include vis.h >>> CFLAGS_C99FSE = >>> CFLAGS_MEMOPS = >>> CFLAGS_NOSSP = >>> LDFLAGS_AUTO = >>> LIBCC = >> >> This probably indicates something is wrong with your cross toolchain; >> even if you manually fix config.mak, I would be concerned that >> something might have been built wrong. What cross toolchain are you >> using and how was it setup? How did you invoke configure? >> >> Rich > > I managed to track down the problem. > > I'm using a cross-toolchain I built from source with a slight > misconfiguration. Specifically, I must tell it where it is > (-B/usr/local/bin/x86_64-pc-linux-gnu-), otherwise it uses the > (incompatible) default linker. > > Now when the configure script checks whether some flag is working, it > forgets to pass the user-defined $CFLAGS to the compiler, which then > fails: > > tryflag () { > printf "checking whether compiler accepts %s... " "$2" > echo "typedef int x;" > "$tmpc" > if $CC $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then > [...] > > Thus, we end up with no flags at all. > > Even though I'm aware that my setup is quite non-standard, I would > consider this a bug in the configure script. I appended a patch that > fixes the problem in all places where I spotted it. Using this patch I > am able to configure and build musl as expected. > Does this seem reasonable to you? > > > > From 084678f6c93ed0bf305ea0fbb35a33810c4c9ccc Mon Sep 17 00:00:00 2001 > From: Samuel Sadok <innovation-labs@...install.ch> > Date: Mon, 24 Oct 2016 00:10:04 +0200 > Subject: [PATCH] Pass CFLAGS to compiler under all circumstances in configure > script > > --- > configure | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/configure b/configure > index 707eb12..c1466ce 100755 > --- a/configure > +++ b/configure > @@ -72,7 +72,7 @@ echo "typedef int x;" > "$tmpc" > echo "#if $1" >> "$tmpc" > echo "#error yes" >> "$tmpc" > echo "#endif" >> "$tmpc" > -if $CC $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then > +if $CC $CFLAGS $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then > printf "false\n" > return 1 > else > @@ -84,7 +84,7 @@ fi > tryflag () { > printf "checking whether compiler accepts %s... " "$2" > echo "typedef int x;" > "$tmpc" > -if $CC $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then > +if $CC $CFLAGS $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then > printf "yes\n" > eval "$1=\"\${$1} \$2\"" > eval "$1=\${$1# }" > @@ -98,7 +98,7 @@ fi > tryldflag () { > printf "checking whether linker accepts %s... " "$2" > echo "typedef int x;" > "$tmpc" > -if $CC $LDFLAGS_TRY -nostdlib -shared "$2" -o /dev/null "$tmpc" >> /dev/null 2>&1 ; then > +if $CC $CFLAGS $LDFLAGS_TRY -nostdlib -shared "$2" -o /dev/null > "$tmpc" >/dev/null 2>&1 ; then > printf "yes\n" > eval "$1=\"\${$1} \$2\"" > eval "$1=\${$1# }" > @@ -275,7 +275,7 @@ echo "#if ! __GLIBC__" >> "$tmpc" > echo "#error no" >> "$tmpc" > echo "#endif" >> "$tmpc" > printf "checking for toolchain wrapper to build... " > -if test "$wrapper" = auto && ! $CC -c -o /dev/null "$tmpc" >/dev/null > 2>&1 ; then > +if test "$wrapper" = auto && ! $CC $CFLAGS -c -o /dev/null "$tmpc" >> /dev/null 2>&1 ; then > echo "none" > elif test "$cc_family" = gcc ; then > gcc_wrapper=yes > @@ -303,7 +303,7 @@ fi > # Find the target architecture > # > printf "checking target system type... " > -test -n "$target" || target=$($CC -dumpmachine 2>/dev/null) || target=unknown > +test -n "$target" || target=$($CC $CFLAGS -dumpmachine 2>/dev/null) > || target=unknown > printf "%s\n" "$target" > > # > @@ -397,7 +397,7 @@ test "$debug" = yes && CFLAGS_AUTO=-g > printf "checking whether we should preprocess assembly to add > debugging information... " > if fnmatch '-g*|*\ -g*' "$CFLAGS_AUTO $CFLAGS" && > test -f "tools/add-cfi.$ARCH.awk" && > - printf ".file 1 \"srcfile.s\"\n.line > 1\n.cfi_startproc\n.cfi_endproc" | $CC -g -x assembler -c -o /dev/null > 2>/dev/null - > + printf ".file 1 \"srcfile.s\"\n.line > 1\n.cfi_startproc\n.cfi_endproc" | $CC $CFLAGS -g -x assembler -c -o > /dev/null 2>/dev/null - > then > ADD_CFI=yes > else > @@ -588,7 +588,7 @@ tryldflag LDFLAGS_AUTO -Wl,-Bsymbolic-functions > # Find compiler runtime library > test -z "$LIBCC" && tryldflag LIBCC -lgcc && tryldflag LIBCC -lgcc_eh > test -z "$LIBCC" && tryldflag LIBCC -lcompiler_rt > -test -z "$LIBCC" && try_libcc=`$CC -print-file-name=libpcc.a 2>/dev/null` \ > +test -z "$LIBCC" && try_libcc=`$CC $CFLAGS -print-file-name=libpcc.a > 2>/dev/null` \ > && tryldflag LIBCC "$try_libcc" > printf "using compiler runtime libraries: %s\n" "$LIBCC" > > @@ -719,6 +719,7 @@ printf "creating config.mak... " > cmdline=$(quote "$0") > for i ; do cmdline="$cmdline $(quote "$i")" ; done > > + > exec 3>&1 1>config.mak > >
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.