Linux "dpkg-architecture" Command Line Options and Examples
set and determine the architecture for package building

dpkg-architecture provides a facility to determine and set the build and host architecture for package building. The build architecture is always determined by an external call to dpkg(1), and cannot be set at the command line. You can specify the host architecture by providing one or both of the options --host-arch and --host-type.


Usage:

dpkg-architecture [option...] [command]




Command Line Options:

-a
Set the host Debian architecture.
dpkg-architecture -a ...
-t
Set the host GNU system type.
dpkg-architecture -t ...
-A
Set the target Debian architecture (since dpkg 1.17.14).
dpkg-architecture -A ...
-T
Set the target GNU system type (since dpkg 1.17.14).
dpkg-architecture -T ...
-W
Restrict the architectures listed by --list-known to ones matching the specified architecture wildcard (since dpkg 1.17.14).
dpkg-architecture -W ...
-B
Restrict the architectures listed by --list-known to ones with the specified CPU bits (since dpkg 1.17.14). Either 32 or 64.
dpkg-architecture -B ...
-E
Restrict the architectures listed by --list-known to ones with the specified endianness (since dpkg 1.17.14). Either little orbig.
dpkg-architecture -E ...
-f
Values set by existing environment variables with the same name as used by the scripts are honored (i.e. used bydpkg-architecture), except if this force flag is present. This allows the user to override a value even when the call todpkg-architecture is buried in some other script (for example dpkg-buildpackage(1)).TERMSbuild machineThe machine the package is built on.host machineThe machine the package is built for.target machineThe machine the compiler is building for. This is only needed when building a cross-toolchain, one that will be built on thebuild architecture, to be run on the host architecture, and to build code for the target architecture.Debian architectureThe Debian architecture string, which specifies the binary tree in the FTP archive. Examples: i386, sparc, hurd-i386.Debian architecture tupleA Debian architecture tuple is the fully qualified architecture with all its components spelled out. This differs with Debianarchitectures in that at least the cpu component does not embed the abi. The current tuple has the form abi-libc-os-cpu.Examples: base-gnu-linux-amd64, eabihf-musl-linux-arm.Debian architecture wildcardA Debian architecture wildcard is a special architecture string that will match any real architecture being part of it. Thegeneral form is a Debian architecture tuple with four or less elements, and with at least one of them being any. Missingelements of the tuple are prefixed implicitly as any, and thus the following pairs are equivalent:any-any-any-any = anyany-any-os-any = os-anyany-libc-any-any = libc-any-anyExamples: linux-any, any-i386, hurd-any, eabi-any-any-arm, musl-any-any.GNU system typeAn architecture specification string consisting of two parts separated by a hyphen: cpu and system. Examples: i586-linux-gnu,sparc-linux-gnu, i686-gnu, x86_64-netbsd.multiarch tripletThe clarified GNU system type, used for filesystem paths. This triplet does not change even when the baseline ISA gets bumped,so that the resulting paths are stable over time. The only current difference with the GNU system type is that the CPU part fori386 based systems is always i386. Examples: i386-linux-gnu, x86_64-linux-gnu. Example paths: /lib/powerpc64le-linux-gnu/,/usr/lib/i386-kfreebsd-gnu/.VARIABLESThe following variables are set by dpkg-architecture:DEB_BUILD_ARCHThe Debian architecture of the build machine.DEB_BUILD_ARCH_ABIThe Debian abi name of the build machine (since dpkg 1.18.11).DEB_BUILD_ARCH_LIBCThe Debian libc name of the build machine (since dpkg 1.18.11).DEB_BUILD_ARCH_OSThe Debian system name of the build machine (since dpkg 1.13.2).DEB_BUILD_ARCH_CPUThe Debian cpu name of the build machine (since dpkg 1.13.2).DEB_BUILD_ARCH_BITSThe pointer size of the build machine (in bits; since dpkg 1.15.4).DEB_BUILD_ARCH_ENDIANThe endianness of the build machine (little / big; since dpkg 1.15.4).DEB_BUILD_GNU_CPUThe CPU part of DEB_BUILD_GNU_TYPE.DEB_BUILD_GNU_SYSTEMThe System part of DEB_BUILD_GNU_TYPE.DEB_BUILD_GNU_TYPEThe GNU system type of the build machine.DEB_BUILD_MULTIARCHThe clarified GNU system type of the build machine, used for filesystem paths (since dpkg 1.16.0).DEB_HOST_ARCHThe Debian architecture of the host machine.DEB_HOST_ARCH_ABIThe Debian abi name of the host machine (since dpkg 1.18.11).DEB_HOST_ARCH_LIBCThe Debian libc name of the host machine (since dpkg 1.18.11).DEB_HOST_ARCH_OSThe Debian system name of the host machine (since dpkg 1.13.2).DEB_HOST_ARCH_CPUThe Debian cpu name of the host machine (since dpkg 1.13.2).DEB_HOST_ARCH_BITSThe pointer size of the host machine (in bits; since dpkg 1.15.4).DEB_HOST_ARCH_ENDIANThe endianness of the host machine (little / big; since dpkg 1.15.4).DEB_HOST_GNU_CPUThe CPU part of DEB_HOST_GNU_TYPE.DEB_HOST_GNU_SYSTEMThe System part of DEB_HOST_GNU_TYPE.DEB_HOST_GNU_TYPEThe GNU system type of the host machine.DEB_HOST_MULTIARCHThe clarified GNU system type of the host machine, used for filesystem paths (since dpkg 1.16.0).DEB_TARGET_ARCHThe Debian architecture of the target machine (since dpkg 1.17.14).DEB_TARGET_ARCH_ABIThe Debian abi name of the target machine (since dpkg 1.18.11).DEB_TARGET_ARCH_LIBCThe Debian libc name of the target machine (since dpkg 1.18.11).DEB_TARGET_ARCH_OSThe Debian system name of the target machine (since dpkg 1.17.14).DEB_TARGET_ARCH_CPUThe Debian cpu name of the target machine (since dpkg 1.17.14).DEB_TARGET_ARCH_BITSThe pointer size of the target machine (in bits; since dpkg 1.17.14).DEB_TARGET_ARCH_ENDIANThe endianness of the target machine (little / big; since dpkg 1.17.14).DEB_TARGET_GNU_CPUThe CPU part of DEB_TARGET_GNU_TYPE (since dpkg 1.17.14).DEB_TARGET_GNU_SYSTEMThe System part of DEB_TARGET_GNU_TYPE (since dpkg 1.17.14).DEB_TARGET_GNU_TYPEThe GNU system type of the target machine (since dpkg 1.17.14).DEB_TARGET_MULTIARCHThe clarified GNU system type of the target machine, used for filesystem paths (since dpkg 1.17.14).FILESArchitecture tablesAll these files have to be present for dpkg-architecture to work. Their location can be overridden at runtime with the environmentvariable DPKG_DATADIR. These tables contain a format Version pseudo-field on their first line to mark their format, so that parserscan check if they understand it, such as "# Version=1.0"./usr/share/dpkg/cputableTable of known CPU names and mapping to their GNU name. Format version 1.0 (since dpkg 1.13.2)./usr/share/dpkg/ostableTable of known operating system names and mapping to their GNU name. Format version 2.0 (since dpkg 1.18.11)./usr/share/dpkg/tupletableMapping between Debian architecture tuples and Debian architecture names. Format version 1.0 (since dpkg 1.18.11)./usr/share/dpkg/abitableTable of Debian architecture ABI attribute overrides. Format version 2.0 (since dpkg 1.18.11).Packaging support/usr/share/dpkg/architecture.mkMakefile snippet that properly sets and exports all the variables that dpkg-architecture outputs (since dpkg 1.16.1).EXAMPLESdpkg-buildpackage accepts the -a option and passes it to dpkg-architecture. Other examples:CC=i386-gnu-gcc dpkg-architecture -c debian/rules buildeval `dpkg-architecture -u`Check if the current or specified host architecture is equal to an architecture:dpkg-architecture -elinux-alphadpkg-architecture -amips -elinux-mipsCheck if the current or specified host architecture is a Linux system:dpkg-architecture -ilinux-anydpkg-architecture -ai386 -ilinux-anyUsage in debian/rulesThe environment variables set by dpkg-architecture are passed to debian/rules as make variables (see make documentation). However,you should not rely on them, as this breaks manual invocation of the script. Instead, you should always initialize them usingdpkg-architecture with the -q option. Here are some examples, which also show how you can improve the cross compilation support inyour package:Retrieving the GNU system type and forwarding it to ./configure:DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)[...]ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))confflags += --build=$(DEB_HOST_GNU_TYPE)elseconfflags += --build=$(DEB_BUILD_GNU_TYPE) \
dpkg-architecture -f ...
--host
endif[...]./configure $(confflags)Doing something only for a specific architecture:DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)ifeq ($(DEB_HOST_ARCH),alpha)[...]endifor if you only need to check the CPU or OS type, use the DEB_HOST_ARCH_CPU or DEB_HOST_ARCH_OS variables.Note that you can also rely on an external Makefile snippet to properly set all the variables that dpkg-architecture can provide:include /usr/share/dpkg/architecture.mkifeq ($(DEB_HOST_ARCH),alpha)[...]endifIn any case, you should never use dpkg --print-architecture to get architecture information during a package build.ENVIRONMENTDPKG_DATADIRIf set, it will be used as the dpkg data directory, where the architecture tables are located (since dpkg 1.14.17). Defaultsto «/usr/share/dpkg».NOTESAll long command and option names available only since dpkg 1.17.17.
dpkg-architecture --host ...