[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

multiple architectures



In the recent thread 'dpkg and debhelper patches for lib64 support' we
talked about control files and associating architectures to packages
which those control files define.

While the format of the control files has not yet been completely
defined, I would like to fork of into a related discussion.

With s390/s390x and i386/amd64 it becomes more apparent that we need
dpkg to understand what architectures are valid on the current system.
Currently, dpkg --print-architecture is used everywhere to discover what
that architecture is.

However, on an amd64 machine one can install packages built for i386,
i486, i586, i686, and amd64.  Yes, we don't currently have i486-i686 but
with the 'split' that's talked about on debial-devel@d.o it's a clear
win to have the notion of 'compatible' architectures.

First off dpkg should be extended to support a --supports-architecture
option which would take on a single string parameter of an architecture
name.  dpkg returns true or false depending on it's ability to install a
package compiled for said architecture on the running system.

dpkg will discover if said architecture is valid by looking it up in a
file of supported architectures.

On a rpm system one can specify 'arch_compat' entries in rpmrc.  In this
configuration one can specify a relationship as follows:

	amd64: athlon
	athlon: i686
	i686: i586
	i586: i486
	i486: i386
	i386: any

In the above map the items on the right of the : can be multiple in
number.  If Intel decided to release another x86 processor (let's call
it i786), and it became supported in an AMD extension to amd64 (let's
call it amd64a), we would have something like this:

	amd64a: amd64 i786
	i786: i686
	amd64: athlon
	athlon: i686
	i686: i586
	i586: i486
	i486: i386
	i386: any

Note that i786 cannot execute athlon binaries, but amd64a can execute
anything on the list.

Note that the relationship above does not deal with package dependencies
like:

	Package: foo
	Depends: lib64foo
	Architecture: amd64
	Description: 64 bit optimized version of foo

That will have to be done by dpkg after the package architecture was
decided on being compatible with the host's architecture.

Another useful option for dpkg (or perhaps some other tool) would be a
something that would list all architectures that can be built on the
current host.  Something like this:

	$ dpkg --build-architectures
	amd64 i686 i586 i486 i386

The list could be based on something in /etc or by polling the compiler.

This --build-architectures could potentially reduce the amount of
hard-coded rules in debian/rules files.

I would be interested in hacking on dpkg to get this going... but before
I start I wanted to get some feedback from the people that know better
:)

Cheers,
Bart.

-- 
				WebSig: http://www.jukie.net/~bart/sig/

Attachment: pgp8ubgUmYdg5.pgp
Description: PGP signature


Reply to: