From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/10662 Path: news.gmane.org!.POSTED!not-for-mail From: Samuel Sadok Newsgroups: gmane.linux.lib.musl.general Subject: Re: Unable to build with --enable-shared Date: Mon, 24 Oct 2016 00:20:27 +0200 Message-ID: References: <20161022215829.GA5749@port70.net> <20161023161708.GB19318@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: blaine.gmane.org 1477261252 2203 195.159.176.226 (23 Oct 2016 22:20:52 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 23 Oct 2016 22:20:52 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-10675-gllmg-musl=m.gmane.org@lists.openwall.com Mon Oct 24 00:20:47 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1byR8D-0007il-DS for gllmg-musl@m.gmane.org; Mon, 24 Oct 2016 00:20:41 +0200 Original-Received: (qmail 32592 invoked by uid 550); 23 Oct 2016 22:20:41 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 32571 invoked from network); 23 Oct 2016 22:20:40 -0000 X-Authenticated-Sender-Id: innovation-labs@appinstall.ch X-Gm-Message-State: ABUngve1yaLSYsTGvPImRZZ7gWn8bmUXtQujwfDFQ7gF/Zgtz6rn7hsBeQcA8kkh+SCuQ3PR1zTH+afhc2115g== X-Received: by 10.25.137.86 with SMTP id l83mr4210373lfd.31.1477261227939; Sun, 23 Oct 2016 15:20:27 -0700 (PDT) In-Reply-To: <20161023161708.GB19318@brightrain.aerifal.cx> X-Gmail-Original-Message-ID: Xref: news.gmane.org gmane.linux.lib.musl.general:10662 Archived-At: 2016-10-23 18:17 GMT+02:00 Rich Felker : > On Sun, Oct 23, 2016 at 02:22:28AM +0200, Samuel Sadok wrote: >> 2016-10-22 23:58 GMT+02:00 Szabolcs Nagy : >> > * Samuel Sadok [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 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 -- 2.8.1