Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
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.