hardcoding -m32/-m64 is more harmful than using the toolchain defaults

Volker Simonis volker.simonis at gmail.com
Wed Oct 21 09:43:17 UTC 2015


On Tue, Oct 20, 2015 at 2:14 PM, Matthias Klose <doko at ubuntu.com> wrote:
> On 20.10.2015 09:36, David Holmes wrote:
>>>
>>> On 20/10/2015 6:50 AM, Matthias Klose wrote:
>>>>
>>>> I'm working around some build failures for zero targets, which fail to
>>>> build because the configury in openjdk tries to set -m32/-m64 on it's
>>>> own.  I assume this behaviour was added for sun/oracle product builds to
>>>> build x86 and x86_64 targets on a x86_64 platform.  The issue is that
>>>> the current configury checks if -m32/-m64 works with the current
>>>> compiler, and then enables it without losses. This breaks at least on
>>>> the x86_64-linux-gnux32 target.  I assume it will break on other targets
>>>> as well, which don't recognize -m32/-m64, but usually use other options
>>>> like -mabi=<name>.  Instead of hard-coding these flags for every
>>>> architecture, is there any chance for not passing these flags at all for
>>>> the default mode?
>>
>>
>> Part of the problem is that the default mode is not known ahead of time,
>> your
>> gcc on your x64 system might be configured to build 32-bit by default.
>
>
> is this really a common configuration?  I don't know any Linux distribution
> shipping such a compiler.  The one possibility for a 32bit toolchain on a
> 64bit host might be a x86 chroot created on a x86_64 host.  But usually such
> build environments are entered with a 32bit personality (see linux32(1)),
> hiding anything build related from the host.
>

On SLES 10 on Linux/ppc64 for whatever reason the default version of
GCC is configured to build 32-bit binaries by default (although we are
on a 64-bit platform). I think that was changed in newer releases but
for building on SLES 10 (what we still do) '-m64' is required.

> I would expect that the default mode is passed in some way as autoconf
> option, or by setting CC="gcc -m64" (the latter unfortunately not working
> because CC is expected to be a file name in some places).
>
>> If there is a better way to select this than -m32/-m64 then I'm happy to
>> hear
>> it, but not sure if -march/-mabi gives us anything better on x86. What
>> exactly
>> would you propose?
>
>
> I'm not proposing to use -march/-mabi instead, but just avoiding -m32/-m64
> at all, unless you explicitly configure for it (e.g. --with-abi=<abi-option>
> ?).
>
> Matthias
>



More information about the build-dev mailing list