From: Laine Gholson <laine.gholson@gmail.com>
To: musl@lists.openwall.com
Subject: Re: Unable to build with --enable-shared
Date: Sun, 23 Oct 2016 19:19:02 -0500 [thread overview]
Message-ID: <05a838e1-ef3e-291e-5ddd-3867beed8653@gmail.com> (raw)
In-Reply-To: <CAJ4e7SWqTAJUxyXE8ZtSUzsQtAsEHZjJiEcoS_AmO2sNoFZ7vA@mail.gmail.com>
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@libc.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@port70.net>:
>>>> * Samuel Sadok <innovation-labs@appinstall.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@appinstall.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
>
>
next prev parent reply other threads:[~2016-10-24 0:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-22 20:37 Samuel Sadok
2016-10-22 21:58 ` Szabolcs Nagy
2016-10-23 0:22 ` Samuel Sadok
2016-10-23 16:17 ` Rich Felker
2016-10-23 22:20 ` Samuel Sadok
2016-10-24 0:19 ` Laine Gholson [this message]
2016-10-24 0:28 ` Rich Felker
2016-10-24 10:22 ` Samuel Sadok
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=05a838e1-ef3e-291e-5ddd-3867beed8653@gmail.com \
--to=laine.gholson@gmail.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).