fedora for ARM

Andy Green andy at warmcat.com
Wed Jun 6 11:04:25 UTC 2007


Ralf Corsepius wrote:
> On Wed, 2007-06-06 at 09:36 +0100, Andy Green wrote:
>> Andy Green wrote:
>>
>>>> But .. could it be that you are not having redhat-rpm-config installed?
>>>> At least on FC6 it screws up --target, produces invalid *debuginfo*.rpm
>>>> for foreign object formats and many other details.
>>> No it's installed, but --target works... well it works as far as setting
>>> %{_target_cpu} goes which is pretty much all I ask of it.  Note you seem
>>> to need to give an arch-dist-os triplet like this
>> Just to be a bit clearer, I have a single ~/.rpmmacros with everything
>> that cares about the arch using %{_target_cpu} ...
>>
>> %packager Andy Green <andy at warmcat.com>
>> %vendor Octotux (http://octotux.org)
>> %_signature gpg
>> %_gpg_name Octotux Packaging
>> %_gpg_path ~/.gnupg
>> %_topdir /projects/octotux/packages/rpm
>> %crosspath /opt/%{_target_cpu}/bin
>> %develfilesystem %{_topdir}/devel-filesystem-%{_target_cpu}
>> %__strip %crosspath/%{_target_cpu}-linux-strip
>> %__objdump %crosspath/%{_target_cpu}-linux-objdump
>> %__patch            /usr/bin/patch -f

> OK, this explains one half: You are switching off many of the implicitly
> presets.

Well overriding them according to the arch, yes.

>> %_use_internal_dependency_generator     0
> And this is the other half: You are disabling a lot of the hard-coded magic.

No, this is only turned off because the library rpm used to parse ELF
internally segfaulted when dealing with avr32 ELF... it worked fine
without this, using the internal one, for arm for example.

>> I guess the debuginfo problem you saw was because you did not override
>> %__strip,

> Not quite. It's because a toolchain package contains both host and
> target binaries and the redhat-* scripts don't distinguish between host
> and target binaries, but blindly run "one strip" on all binaries they
> find. This doesn't building rpms to abort, as long as target and host
> binary formats are sufficiently compatible. Instead it causes
> *debuginfo*.rpms to contain both host and target sources.

But strip runs only on built executables/libraries that are going into
the binary packages.  There are packages that produce host-compiled
binaries during the build, but they aren't often (I never saw it)
packaged.  I can remember seeing little host-compiled utilities built in
some packages as part of the build process, but they are run as part of
the build and not packaged, so they should not be stripped.

> If host and target object format differ, rpmbuild bombs out.

I have never experienced that, so I guess it must be okay for all the
packages I addressed, at least.  And that includes some big stuff like
db4, postfix, asterisk, gdb, linux itself...

> AFAIS, you are building pure target binary packages.

Right.

>>  defnitely debuginfo rpms are generated and work fine on arm
>> with gdb.
> Not unlikely, but you should check your buildlogs for error/warning
> messages and your resulting rpms for correctness.

My scripts will stop dead if rpmbuild chokes so I am pretty sure none of
my packages so far fell into this unusual category of building and
packaging apps compiled for both host and target.

Anyway the end result is that with a macro setup like this it is quite
possible to tell rpmbuild --target=<arch> and if you had the right cross
compilers installed you can end up with blah.<arch>.rpm binaries for any
arch from a single specfile and source.  That is cool!

If Fedora wanted to address it I have no doubt that they can fix/meddle
with the "official" macros and get it to work cleaner, but the whole
deal can and does work soup to nuts with just ~/.rpmmacros set up.

-Andy




More information about the fedora-devel-list mailing list