Fedora and Cross Compiling

Andy Green andy at warmcat.com
Fri Jun 15 13:45:11 UTC 2007


David Woodhouse wrote:
> On Fri, 2007-06-15 at 07:59 -0500, David Smith wrote:
>> Note that we leave things so that native compiles still work.  We then 
>> check native dependencies (_arch == _build_arch) against our mock 
>> chroot's native rpm database, then check cross dependencies (_arch != 
>> _build_arch) against the mock chroot's target rpm database.
>>
>> Target versions of autoconf and sed aren't needed since nothing links 
>> against anything in those packages (those packages are only run 
>> natively).  The only problem with this scheme is that we end up with an 
>> extra native dependency of libblah-devel (which really isn't needed 
>> since nothing links against it in the cross compile).  But the benefit 
>> of unaffected native compiles outweighed the extra dependency.
> 
> I might go so far as to suggest that the benefit of avoiding that
> %if "%{_arch" == "%{_build_arch}" stuff in the specfile might outweigh
> the extra dependencies on autoconf and sed, too.
> 
> One way of handling dependencies in mock for cross-builds might be to
> install the full set of dependencies for _both_ host and target
> architectures. 

I would be the first to reach for a dirty but unanswerably effective
hack to get me where I am going...  But in this case I think the only
true answer is to tag BuildRequires as being host or target in the spec
file, not to unmanageably duplicate the target-world dependencies in the
host.  Eg

HostBuildRequires: byacc  (<-- for it is he)
BuildRequires: libblah-devel

...where they are considered the same deal when hostArch == buildArch.

We can see if this logic raises objections anywhere given the effective
forkage of rpm but I suspect it is a basic fact necessary for cross to
work in rpm semantics.

-Andy




More information about the fedora-devel-list mailing list