gx86-multilib

From Gentoo Wiki
Jump to: navigation, search

Gentoo's gx86-multilib project has a two-fold missionː

  1. Provide a means to build Gentoo packages for multiple ABIs (multilib); and
  2. Empower package maintainers to implement multiple ABIs in a consistent manner.

Goals

̇̇̇̇̇

  • Our main goal is to provide a feasible and user-friendly way of supporting applications which are not compatible with the native ABI. This means, we effectively target the following three kinds of applicationsː
  1. Closed-source applications, such as Skype, which are not released for the native ABI or architecture;
  2. Applications interfacing with closed source applications, such as wine; and
  3. Applications which break when compiled for the native ABI.
  • A side goal is to deprecate the various emul-linux packages, replacing them with a better solution.

Eclasses

We provide the following eclasses for multilib-related use:

  1. multilib-build.eclass provides the raw tools to build packages with multilib support. It sets the necessary USE flags for the package and provides functions to perform the build. It should be used only in meta-packages, as it exclusively affects USE flags.
  2. autotools-multilib.eclass is a very simple wrapper on top of the autotools-utils.eclass to be used for all multilib-capable autotools packages. It uses the out-of-source build feature to support multilib builds with almost no need of modifying autotools-utils ebuilds.
  3. multilib-minimal.eclass provides a simple, wrapper to build the packages where no other eclass fits better.

USE flags

Multilib-capable packages request proper package variants and satisfy dependencies through the use of abi_* USE flags. To ensure the consistency of a package's IUSE flags, please define architecture flags in packages.

By default, abi_* flags are masked and hidden. Architecture-specific profiles unmask the flags and force the native flag (it remains hidden from the user). Multilib profiles may also un-hide the flags to unmask additional variants.

The native ABI flag must always be enabled on multilib libraries to guarantee that plain (non-multilib aware) package dependencies always pull in the native variant. To maintain backwards compatibility and user convenience, multilib support needs to be transparent to non-multilib packages.

Some leaf packages, like app-emulation/wine or www-plugins/adobe-flash, may need the default abi̜̞_* flags removed. You may edit the profile's package.use.force file. However, please note that afterwards non-multilib packages won't be able to properly depend on the package in question.

FILE profiles/arch/amd64/package.use.forceExample of un-forcing abi_x86_64
# Michał Górny <mgorny@gentoo.org> (02 Sep 2013)
# Packages with optional 64-bit variant.
app-emulation/wine -abi_x86_64
www-plugins/adobe-flash -abi_x86_64