Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 17 Jun 2012 16:06:13 -0700
From: Isaac Dunham <idunham@...abit.com>
To: musl@...ts.openwall.com
Subject: Re: installation on bi-arch system

On Sun, 17 Jun 2012 19:24:01 +0200
Bruno Haible <bruno@...sp.org> wrote:

> Hi,
> 
> Trying to install musl-0.9.1 as a 32-bit library on a bi-arch x86_64
> glibc system. The usual way to configure packages for this
> configuration is
>   ./configure CC="gcc -m32"
> or
>   CC="gcc -m32" ./configure
> See
> <http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Preset-Output-Variables.html>.
> But this does not work with musl's configure script:
> 
> $ CC="gcc -m32" ./configure --prefix=/arch/x86-linux/inst-musl
> --exec-prefix=/arch/x86-linux/inst-musl CC="gcc -m32" checking for C
> compiler... gcc -m32 checking whether compiler is gcc... no
> checking target system type... unknown
> ./configure: unable to detect target arch; try ./configure
> --target=...

1. musl does not use autoconf, just a handwritten shell script that
accepts similar arguments.
2. I had always thought it was CC=gcc CFLAGS=-m32 ...
3. ./configure uses 
 $ type "$CC"
 to detect whether using $CC will work.
This means that all options must be set in CFLAGS.
Even if $CC did get accepted, gcc -m32 -dumpmachine (how musl detects
$ARCH) may not give i?86-linux-*, thus failing the configure.
> As a workaround, I have to create a wrapper script that invokes "gcc
> -m32 ..." and pass that as CC. This should not be needed.
See 2. Also note the --target= option (--target=i386 in this case).
--target=i386 should properly set CFLAGS to include -march=i486 -m32
(unless otherwise specified in CFLAGS).


> Additionally, the musl-gcc script that gets created by "make install"
> looks like this:
> 
> #!/bin/sh
> exec gcc "$@" -specs "/arch/x86-linux/inst-musl/lib/musl-gcc.specs"
> 
> When invoked with option "-c", it produces 64-bit .o files. To produce
> 32-bit .o files, it should read like this:
> 
> #!/bin/sh
> exec gcc-32 "$@" -specs "/arch/x86-linux/inst-musl/lib/musl-gcc.specs"
> 
> or like this:
> 
> #!/bin/sh
> exec gcc -m32 "$@" -specs
> "/arch/x86-linux/inst-musl/lib/musl-gcc.specs"
Again, I thought the standard was CFLAGS=-m32.
The approach you're proposing won't work when someone has both
architectures cross-building musl. (Although really, the spec file has
to be modified before that works, and that in turn would call for a
multiarch build target, which means VPATH/out-of-tree builds or a
change in object naming...)
> Bruno
> 

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.