32-bit package guidelines
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel modules – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust - Security – Shell – VCS – Web – Wine
Legacy 32-bit software can be built and installed on machines of another native architecture, such as x86_64. This article explains the production and conventions of such packages.
Package naming
- Prefix 32-bit versions of native packages with lib32-.
-
Package decriptions should distinguish these from native counterparts, i.e.
pkgdesc+=" (32-bit)"
.
Variables and parameters
lib32
Specify these bash variables in a PKGBUILD to tell the compiler to output 32-bit code:
export CFLAGS+=" -m32" export CXXFLAGS+=" -m32" export LDFLAGS+=" -m32" export PKG_CONFIG_PATH='/usr/lib32/pkgconfig'
File placement
Ensure lib32 package files do not conflict with native package files and include all necessary files, such as architecture-specific includes. For example, if a package builds using GNU Autoconf, specify the following to configure
:
--program-suffix="-32" \ --lib{exec,}dir=/usr/lib32 \ --includedir=/usr/include/"$pkgbase"32 \ --build=i686-pc-linux-gnu
If a package builds using Meson, specify the following to arch-meson
:
--cross-file lib32