creating 32bit devel packages on x86_64

Hi all,

I’m in the need for a package libtirpc-devel-32bit-0.1.9-4.10. It’s not in the standard repository nor elsewhere to be found.

So being a developer, I tried to spot the information on how to build one myself. But unfortunately, I couldn’t find anything either:

  • no search engine (these forums nor whole Internet world) turned up with a helpful document

  • checking src.rpms from other openSuSE packages (ie pam_mount) revealed no magic in their spec files.

So here I am and ask you for some pointers or even specific information:

How do I create a “32bit-add-on development package” for a 64bit platform on openSuSE 11.1 and/or SLES10, SLES11?

The goal is to compile a program on 11.1, SLES10, SLES11 (x86_64) that is 32 bit because I need to link to some vendor-specific 32bit library. This already works fine, but now I need to use TI-RPC on top. There are no “-32bit” packages for libtirpc on openSuSE 11.1. I would prefer to stick to the “standards” and have an add-on package like libtirpc-devel-32bit-0.1.9-4.10.rpm rather than recompiling on multiple platforms and merge the results into a single installation.

Thanks for any insight you’re willing to share.

With regards
Jens

Might want to wait for someone who actually does this but if not I can perhaps nudge you in the correct direction…

I can see the odd bit that is biarch in spec for example in the gcc43 src rpm. Now from here rpmbuild(8): Build RPM Package - Linux man page you have showrc give it a run as I’ve only got a Suse 32bit I couldn’t see the compatible build archs that I could use.(Well didn’t really fancy going into a new area and going the other way.)

This raised the issue of --buildarch
rpmbuild Command Reference

Looking at the gcc spec file it seems arch independent and it just has ifs’ to enable them to go to the correct place, and seems to do both if my understanding is correct.

%if %{biarch}
%if %{build_primary_64bit}
%if !%{separate_bi32}
/lib/libgcc_s.so.%{libgcc_s}
%endif

The only ref I can see is this

%if %{build_primary_64bit}
%dir %{libsubdir}/32

Now I also suspect I couldn’t of chosen a worse package. I suspect it will build both, but without the option of being able to showrc on 64bit a lot is guess work.

Maybe it’ll help till someone more knowledgeable comes along.

Thank you for your reply!

I’ve had a look at some .specs by now, for openSuSE packages where I have an official “devel-32bit” RPM installed. You could also say I tried to dissect these files :wink:

Still I’m more than puzzled. The piece of information missing to me is how to automatically “stage” the devel-32bit packages… My assumption was that the devel-32bit packages were automatically built by rpmbuild, but I’ve found no clues on how the “delta file list” is build:

  • the -devel RPM (x86_64) will contain ie .h, man and other non-arch-specific stuff and /lib64/
  • the -devel-32bit RPM (x86_64!) will contain /lib/* and is dependant on the -devel package.

Shouldn’t the spec file contain %package sections for -devel-32bit in addition to -devel? I’ve found no such thing, nowhere. But then, how will rpmbuild create the “delta information”? When building the packages as 32bit, then I’d have another -devel RPM, containing all non-arch-specific files and the 32bit versions of the libs. I couldn’t install those on top of the already installed -devel RPM.

Looks like I missed taking a turn somewhere along the way… HELP :slight_smile:

With regards
Jens

PS: I took my time trying to rebuild the openldap2 packages from the “standard openSuSE” SRPM… only to stumble over syntax errors, when my time ran out for yesterday. It’ll be a few days 'till I have access to the 64bit environment, I’ll try a different package then, unless someone has enlighened me.

Now my understanding is would of expected it to have arch sections, but you’ll have to point me to 32bit src.rpm. I looked at one that has all the possible ways.

But I’m not sure you’re confusing things(Or maybe looking for a way that isn’t used in specs I’ve looked at).

If I’ve got this correct looking at the gcc example it has 3 ways… What I didn’t grasp was the way to call biarch with rpmbuild, which would prefix for the 32libs.

Pure 32bit
Pure 64bit
And bi-arch(Edit* I’ve got a feeling in gcc you can see a 32bit prefix as well {separate_bi32})

Now not sure what all those macros are I find spec files a convoluted and obscure way of building. But I don’t think it is %package looking at the gcc as per the bits I posted. Its an
if arch
%prefix or %dir
I suspect you can probably write the same spec a couple of ways.

Shame someone else hasn’t jumped onto this thread for you as I’m not to dis-similar to you I grasp the basics, but I am seeing arch specific sections in gcc.

Look at the gcc43 latest src.rpm