123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- .\" dpkg manual page - dpkg-architecture(1)
- .\"
- .\" Copyright © 2005 Marcus Brinkmann <brinkmd@debian.org>
- .\" Copyright © 2005 Scott James Remnant <scott@netsplit.com>
- .\" Copyright © 2006-2015 Guillem Jover <guillem@debian.org>
- .\" Copyright © 2009-2012 Raphaël Hertzog <hertzog@debian.org>
- .\"
- .\" This is free software; you can redistribute it and/or modify
- .\" it under the terms of the GNU General Public License as published by
- .\" the Free Software Foundation; either version 2 of the License, or
- .\" (at your option) any later version.
- .\"
- .\" This is distributed in the hope that it will be useful,
- .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
- .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- .\" GNU General Public License for more details.
- .\"
- .\" You should have received a copy of the GNU General Public License
- .\" along with this program. If not, see <https://www.gnu.org/licenses/>.
- .
- .TH dpkg\-architecture 1 "%RELEASE_DATE%" "%VERSION%" "dpkg suite"
- .nh
- .SH NAME
- dpkg\-architecture \- set and determine the architecture for package building
- .
- .SH SYNOPSIS
- .B dpkg\-architecture
- .RI [ option "...] [" command ]
- .PP
- .
- .SH DESCRIPTION
- .B dpkg\-architecture
- provides a facility to determine and set the build and
- host architecture for package building.
- .PP
- The build architecture is always determined by an external call to
- \fBdpkg\fP(1), and cannot be set at the command line.
- .PP
- You can specify the host architecture by providing one or both of the options
- \fB\-\-host\-arch\fR and \fB\-\-host\-type\fR. The default is determined by
- an external call to
- .BR gcc (1),
- or the same as the build architecture if \fBCC\fP or gcc are both not
- available. One out of \fB\-\-host\-arch\fR and \fB\-\-host\-type\fR is
- sufficient, the value of the
- other will be set to a usable default. Indeed, it is often better to only
- specify one, because \fBdpkg\-architecture\fP will warn you if your choice
- does not match the default.
- .
- .SH COMMANDS
- .TP
- .BR \-l ", " \-\-list
- Print the environment variables, one each line, in the format
- \fIVARIABLE=value\fP. This is the default action.
- .TP
- .BR \-e ", " \-\-equal " \fIarchitecture\fP"
- Check for equality of architecture (since dpkg 1.13.13).
- It compares the current or specified Debian host architecture against
- \fIarchitecture\fP, to check if they are equal.
- This action will not expand the architecture wildcards.
- Command finishes with an exit status of 0 if matched, 1 if not matched.
- .TP
- .BR \-i ", " \-\-is " \fIarchitecture-wildcard\fP"
- Check for identity of architecture (since dpkg 1.13.13).
- It compares the current or specified Debian host architecture against
- \fIarchitecture-wildcard\fP after having expanded it as an architecture
- wildcard, to check if they match.
- Command finishes with an exit status of 0 if matched, 1 if not matched.
- .TP
- .BR \-q ", " \-\-query " \fIvariable-name\fP"
- Print the value of a single variable.
- .TP
- .BR \-s ", " \-\-print\-set
- Print an export command. This can be used to set the environment variables
- using eval.
- .TP
- .BR \-u ", " \-\-print\-unset
- Print a similar command to \fB\-\-print\-unset\fP but to unset all variables.
- .TP
- .BR \-c ", " \-\-command " \fIcommand\fP"
- Execute a \fIcommand\fP in an environment which has all variables set to
- the determined value.
- .TP
- .BR \-L ", " \-\-list\-known
- Print a list of valid architecture names.
- Possibly restricted by one or more of the matching options
- \fB\-\-match\-wildcard\fP, \fB\-\-match\-bits\fP or \fB\-\-match\-endian\fP
- (since dpkg 1.17.14).
- .TP
- .BR \-? ", " \-\-help
- Show the usage message and exit.
- .TP
- .B \-\-version
- Show the version and exit.
- .
- .SH OPTIONS
- .TP
- .BR \-a ", " \-\-host\-arch " \fIarchitecture\fP"
- Set the host Debian architecture.
- .TP
- .BR \-t ", " \-\-host\-type " \fIgnu-system-type\fP"
- Set the host GNU system type.
- .TP
- .BR \-A ", " \-\-target\-arch " \fIarchitecture\fP"
- Set the target Debian architecture (since dpkg 1.17.14).
- .TP
- .BR \-T ", " \-\-target\-type " \fIgnu-system-type\fP"
- Set the target GNU system type (since dpkg 1.17.14).
- .TP
- .BR \-W ", " \-\-match\-wildcard " \fIarchitecture-wildcard\fP"
- Restrict the architectures listed by \fB\-\-list\-known\fP to ones matching
- the specified architecture wildcard (since dpkg 1.17.14).
- .TP
- .BR \-B ", " \-\-match\-bits " \fIarchitecture-bits\fP"
- Restrict the architectures listed by \fB\-\-list\-known\fP to ones with the
- specified CPU bits (since dpkg 1.17.14). Either \fB32\fP or \fB64\fP.
- .TP
- .BR \-E ", " \-\-match\-endian " \fIarchitecture-endianness\fP"
- Restrict the architectures listed by \fB\-\-list\-known\fP to ones with the
- specified endianness (since dpkg 1.17.14). Either \fBlittle\fP or \fBbig\fP.
- .TP
- .BR \-f ", " \-\-force
- Values set by existing environment variables with the same name as used by
- the scripts are honored (i.e. used by \fBdpkg\-architecture\fP), except if
- this force flag is present. This allows the user
- to override a value even when the call to \fBdpkg\-architecture\fP is buried
- in some other script (for example \fBdpkg\-buildpackage\fP(1)).
- .
- .SH TERMS
- .IP "build machine" 4
- The machine the package is built on.
- .IP "host machine" 4
- The machine the package is built for.
- .IP "target machine" 4
- The machine the compiler is building for.
- This is only needed when building a cross-toolchain, one that will be built
- on the build architecture, to be run on the host architecture, and to build
- code for the target architecture.
- .IP "Debian architecture" 4
- The Debian architecture string, which specifies the binary tree in the
- FTP archive. Examples: i386, sparc, hurd\-i386.
- .IP "Debian architecture tuple" 4
- A Debian architecture tuple is the fully qualified architecture with all its
- components spelled out.
- This differs with Debian architectures in that at least the \fIcpu\fP
- component does not embed the \fIabi\fP.
- The current tuple has the form \fIabi\fP\-\fIlibc\fP\-\fIos\fP\-\fIcpu\fP.
- Examples: base\-gnu\-linux\-amd64, eabihf\-musl\-linux\-arm.
- .IP "Debian architecture wildcard" 4
- A Debian architecture wildcard is a special architecture string that will
- match any real architecture being part of it.
- The general form is a Debian architecture tuple with four or less elements,
- and with at least one of them being \fBany\fP.
- Missing elements of the tuple are prefixed implicitly as \fBany\fP, and thus
- the following pairs are equivalent:
- .nf
- \fBany\fP\-\fBany\fP\-\fBany\fP\-\fBany\fP = \fBany\fP
- \fBany\fP\-\fBany\fP\-\fIos\fP\-\fBany\fP = \fIos\fP\-\fBany\fP
- \fBany\fP\-\fIlibc\fP\-\fBany\fP\-\fBany\fP = \fIlibc\fP\-\fBany\fP\-\fBany\fP
- .fi
- Examples: linux\-any, any\-i386, hurd\-any, eabi\-any\-any\-arm,
- musl\-any\-any.
- .IP "GNU system type" 4
- An 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.
- .IP "multiarch triplet" 4
- The 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
- for i386 based systems is always i386.
- Examples: i386\-linux\-gnu, x86_64\-linux\-gnu.
- Example paths: /lib/powerpc64le-linux-gnu/, /usr/lib/i386-kfreebsd-gnu/.
- .
- .SH VARIABLES
- The following variables are set by \fBdpkg\-architecture\fP:
- .IP "\fBDEB_BUILD_ARCH\fP" 4
- The Debian architecture of the build machine.
- .IP "\fBDEB_BUILD_ARCH_ABI\fP" 4
- The Debian abi name of the build machine (since dpkg 1.18.11).
- .IP "\fBDEB_BUILD_ARCH_LIBC\fP" 4
- The Debian libc name of the build machine (since dpkg 1.18.11).
- .IP "\fBDEB_BUILD_ARCH_OS\fP" 4
- The Debian system name of the build machine (since dpkg 1.13.2).
- .IP "\fBDEB_BUILD_ARCH_CPU\fP" 4
- The Debian cpu name of the build machine (since dpkg 1.13.2).
- .IP "\fBDEB_BUILD_ARCH_BITS\fP" 4
- The pointer size of the build machine (in bits; since dpkg 1.15.4).
- .IP "\fBDEB_BUILD_ARCH_ENDIAN\fP" 4
- The endianness of the build machine (little / big; since dpkg 1.15.4).
- .IP "\fBDEB_BUILD_GNU_CPU\fP" 4
- The CPU part of \fBDEB_BUILD_GNU_TYPE\fP.
- .IP "\fBDEB_BUILD_GNU_SYSTEM\fP" 4
- The System part of \fBDEB_BUILD_GNU_TYPE\fP.
- .IP "\fBDEB_BUILD_GNU_TYPE\fP" 4
- The GNU system type of the build machine.
- .IP "\fBDEB_BUILD_MULTIARCH\fP" 4
- The clarified GNU system type of the build machine, used for filesystem
- paths (since dpkg 1.16.0).
- .IP "\fBDEB_HOST_ARCH\fP" 4
- The Debian architecture of the host machine.
- .IP "\fBDEB_HOST_ARCH_ABI\fP" 4
- The Debian abi name of the host machine (since dpkg 1.18.11).
- .IP "\fBDEB_HOST_ARCH_LIBC\fP" 4
- The Debian libc name of the host machine (since dpkg 1.18.11).
- .IP "\fBDEB_HOST_ARCH_OS\fP" 4
- The Debian system name of the host machine (since dpkg 1.13.2).
- .IP "\fBDEB_HOST_ARCH_CPU\fP" 4
- The Debian cpu name of the host machine (since dpkg 1.13.2).
- .IP "\fBDEB_HOST_ARCH_BITS\fP" 4
- The pointer size of the host machine (in bits; since dpkg 1.15.4).
- .IP "\fBDEB_HOST_ARCH_ENDIAN\fP" 4
- The endianness of the host machine (little / big; since dpkg 1.15.4).
- .IP "\fBDEB_HOST_GNU_CPU\fP" 4
- The CPU part of \fBDEB_HOST_GNU_TYPE\fP.
- .IP "\fBDEB_HOST_GNU_SYSTEM\fP" 4
- The System part of \fBDEB_HOST_GNU_TYPE\fP.
- .IP "\fBDEB_HOST_GNU_TYPE\fP" 4
- The GNU system type of the host machine.
- .IP "\fBDEB_HOST_MULTIARCH\fP" 4
- The clarified GNU system type of the host machine, used for filesystem
- paths (since dpkg 1.16.0).
- .IP "\fBDEB_TARGET_ARCH\fP" 4
- The Debian architecture of the target machine (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_ARCH_ABI\fP" 4
- The Debian abi name of the target machine (since dpkg 1.18.11).
- .IP "\fBDEB_TARGET_ARCH_LIBC\fP" 4
- The Debian libc name of the target machine (since dpkg 1.18.11).
- .IP "\fBDEB_TARGET_ARCH_OS\fP" 4
- The Debian system name of the target machine (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_ARCH_CPU\fP" 4
- The Debian cpu name of the target machine (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_ARCH_BITS\fP" 4
- The pointer size of the target machine (in bits; since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_ARCH_ENDIAN\fP" 4
- The endianness of the target machine (little / big; since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_GNU_CPU\fP" 4
- The CPU part of \fBDEB_TARGET_GNU_TYPE\fP (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_GNU_SYSTEM\fP" 4
- The System part of \fBDEB_TARGET_GNU_TYPE\fP (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_GNU_TYPE\fP" 4
- The GNU system type of the target machine (since dpkg 1.17.14).
- .IP "\fBDEB_TARGET_MULTIARCH\fP" 4
- The clarified GNU system type of the target machine, used for filesystem
- paths (since dpkg 1.17.14).
- .
- .SH FILES
- .SS Architecture tables
- All these files have to be present for \fBdpkg\-architecture\fP to
- work. Their location can be overridden at runtime with the environment
- variable \fBDPKG_DATADIR\fP.
- These tables contain a format \fBVersion\fP pseudo-field on their first
- line to mark their format, so that parsers can check if they understand
- it, such as "# Version=1.0".
- .TP
- .I %PKGDATADIR%/cputable
- Table of known CPU names and mapping to their GNU name.
- Format version 1.0 (since dpkg 1.13.2).
- .TP
- .I %PKGDATADIR%/ostable
- Table of known operating system names and mapping to their GNU name.
- Format version 2.0 (since dpkg 1.18.11).
- .TP
- .I %PKGDATADIR%/tupletable
- Mapping between Debian architecture tuples and Debian architecture
- names.
- Format version 1.0 (since dpkg 1.18.11).
- .TP
- .I %PKGDATADIR%/abitable
- Table of Debian architecture ABI attribute overrides.
- Format version 2.0 (since dpkg 1.18.11).
- .SS Packaging support
- .TP
- .I %PKGDATADIR%/architecture.mk
- Makefile snippet that properly sets and exports all the variables that
- \fBdpkg\-architecture\fP outputs (since dpkg 1.16.1).
- .
- .SH EXAMPLES
- \fBdpkg\-buildpackage\fP accepts the \fB\-a\fR option and passes it to
- \fBdpkg\-architecture\fP. Other examples:
- .IP
- CC=i386\-gnu\-gcc dpkg\-architecture \-c debian/rules build
- .IP
- eval \`dpkg\-architecture \-u\`
- .PP
- Check if the current or specified host architecture is equal to an
- architecture:
- .IP
- dpkg\-architecture \-elinux\-alpha
- .IP
- dpkg\-architecture \-amips \-elinux\-mips
- .PP
- Check if the current or specified host architecture is a Linux system:
- .IP
- dpkg\-architecture \-ilinux\-any
- .IP
- dpkg\-architecture \-ai386 \-ilinux\-any
- .
- .SS Usage in debian/rules
- The environment variables set by \fBdpkg\-architecture\fP are passed to
- \fIdebian/rules\fP 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 using
- \fBdpkg\-architecture\fP with the \fB\-q\fP option. Here are some examples,
- which also show how you can improve the cross compilation support in your
- package:
- .PP
- Retrieving the GNU system type and forwarding it to ./configure:
- .PP
- .RS 4
- .nf
- 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)
- else
- confflags += \-\-build=$(DEB_BUILD_GNU_TYPE) \\
- \-\-host=$(DEB_HOST_GNU_TYPE)
- endif
- [...]
- \&./configure $(confflags)
- .fi
- .RE
- .PP
- Doing something only for a specific architecture:
- .PP
- .RS 4
- .nf
- DEB_HOST_ARCH ?= $(shell dpkg\-architecture \-qDEB_HOST_ARCH)
- ifeq ($(DEB_HOST_ARCH),alpha)
- [...]
- endif
- .fi
- .RE
- .PP
- or if you only need to check the CPU or OS type, use the
- \fBDEB_HOST_ARCH_CPU\fP or \fBDEB_HOST_ARCH_OS\fP variables.
- .PP
- Note that you can also rely on an external Makefile snippet to properly
- set all the variables that \fBdpkg\-architecture\fP can provide:
- .PP
- .RS 4
- .nf
- include %PKGDATADIR%/architecture.mk
- ifeq ($(DEB_HOST_ARCH),alpha)
- [...]
- endif
- .fi
- .RE
- .PP
- In any case, you should never use \fBdpkg \-\-print\-architecture\fP to get
- architecture information during a package build.
- .
- .SH ENVIRONMENT
- .TP
- .B DPKG_DATADIR
- If set, it will be used as the \fBdpkg\fP data directory, where the
- architecture tables are located (since dpkg 1.14.17).
- Defaults to «%PKGDATADIR%».
- .SH NOTES
- All long command and option names available only since dpkg 1.17.17.
- .
- .SH SEE ALSO
- .BR dpkg\-buildpackage (1),
- .BR dpkg\-cross (1).
|