--host=i386-redhat-linux-gnu --target=i686-redhat-linux-gnu ???

Panu Matilainen pmatilai at laiskiainen.org
Wed Feb 3 09:05:45 UTC 2010


On Tue, 2 Feb 2010, Bill Nottingham wrote:

> Panu Matilainen (pmatilai at laiskiainen.org) said:
>>> %{_host} is set by the rpm package in the macros file, %{_build} defaults
>>> to the value of %{_host}. %{_target_platform} comes from --target on
>>> the command line, plus the usual vendor/OS bits
>>>
>>> --target is what is set by rpm/mock. I think it defaults to %{_host}
>>> if it's not otherwise specified, but we specify it when building for i686,
>>> as we could theoretically still build i386 packages.
>>
>> Yup, and all wonderfully mixed up - rpm's idea of --target is something
>> completely different from what auto*foo from this century thinks of it.
>> Dunno if it ever was really valid but certainly not anymore.
>>
>> rpm >= 4.8.0 no longer sets the --target on %configure but that's been
>> masked by the redhat-rpm-config version of %configure. That's been fixed
>> too as of today.
>
> Is either %_host or %_build set based on --target?

No... as there's no correct way to map rpm's --target to autotools 
expectations. --target does affect the optimization flags and bits 
like %{_libdir} value, so for the average --target i686 vs --target i386 
style usage you'll get more or less what you'd expect.

To put some sense into it requires turning the whole concept upside down 
in rpm, adding some new switches and most likely breaking some formerly 
"working" setups in the process.

The whole host, build, target-triplet is three-way mixed up in rpm. With 
autotools --target out of the way for now, one possibility could be making 
changing what's currently %_host into %_build, and what's currently 
%_target into %_host. This would be correct (AFAICT) for native builds for 
default architecture, and "build arm binaries on x86" type of 
cross-builds.

That's not correct for "sub-arch" builds, such as compiling i386 optimized 
binaries on i686 or i686 binaries on x86_64, as these are not 
cross-builds, and autotools will complain something like:

   checking build system type... x86_64-redhat-linux-gnu
   checking host system type... i686-redhat-linux-gnu
   checking target system type... i686-redhat-linux-gnu
   ...
   checking for i686-redhat-linux-strip... no
   checking for strip... strip
   configure: WARNING: In the future, Autoconf will not detect cross-tools
   whose name does not start with the host triplet.  If you think this
   configuration is useful to you, please write to autoconf at gnu.org.

Another perhaps saner option would be changing what's currently %_host 
into %_build, taking --host switch out of default %configure flags and add 
a --host switch to rpmbuild, to be used for real cross-builds. And leave 
rpmbuild's --target more or less alone, ie it mostly means "optimize for 
this cpu". Would break some setups for sure, but I dont really see how 
it could be changed without breaking the 10+ years worth of broken 
"working" usage.

Better ideas would be most welcome.

 	- Panu -




More information about the devel mailing list