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.