Architectures¶
snapcraft.yaml¶
The architectures how-to provides examples of how
to use the platforms and architectures keyword.
core24¶
platforms:
    <platform 1>:
        build-on: [<arch 1>, <arch 2>]
        build-for: [<arch 1>]
    <platform 2>:
        build-on: [<arch 3>]
        build-for: [<arch 4>]
    ...
platform¶
The platform name describes a build-on/build-for pairing. If the
platform name is a valid debian architecture, then build-on and
build-for can be omitted (see below for details).
See here for a list of supported architectures.
The recommended platform name is the build-for arch.
build-on¶
The build-on field is an optional list of architectures where the snap can
be built. It can contain multiple architectures.
If the platform name is a valid architecture and build-for is not defined,
then build-on can be omitted. build-on will assume the platform name.
build-for¶
The build-for field is an optional single-element list containing the
architecture where the snap should run.
If the platform name is a valid architecture, then build-for will
assume the platform name.
build-for: [all] is a special keyword to denote an architecture-independent
snap. If the all keyword is used, no other build-on/build-for pairs can
be defined. See this page to learn how to
use the all keyword.
all cannot be used for build-on.
core22¶
The root keyword architectures defines a list of build-on->build-for
pairs with the following syntax:
architectures:
  - build-on: [<arch 1>, <arch 2>]
    build-for: [<arch 1>]
  - build-on: [<arch 3>]
    build-for: [<arch 4>]
    ...
See here for a list of supported architectures.
Data types¶
If the value is a single item, it can be written as a single element list or a scalar. For example:
architectures:
  - build-on: amd64
    build-for: arm64
is equivalent to:
architectures:
  - build-on: [amd64]
    build-for: [arm64]
Note
Using a list is the recommended syntax. Scalars are not recommended.
build-on¶
The build-on field is required and can contain multiple architectures.
build-for¶
The build-for field is optional and should be a single element list. If it
is not defined, the build-for will be set the build-on for each build
in the build plan.
build-for: [all] is a special keyword to denote an architecture-independent
snap. If the all keyword is used, no other build-on/build-for pairs can
be defined. See this page to learn how to
use the all keyword.
all cannot be used for build-on.
The same architecture cannot be defined in multiple build-for entries.
core20¶
The above syntax and rules for core22 apply for core20 except that
run-on is used in place of build-for. Additionally, core20 supports
multiple architectures in the run-on field, which will create
multi-architecture snaps.
Shorthand format¶
As an alternative to the explicit format described above, core20 snaps
support a shorthand format can be used for simple build-on/run-on
pairs. The following shorthand:
architectures: [amd64, arm64]
is equivalent to:
architectures:
  - build-on: [amd64]
    run-on: [amd64]
  - build-on: [arm64]
    run-on: [arm64]
The explicit and shorthand format cannot be mixed.
Project variables¶
core24¶
| Project variable | Description | 
|---|---|
| 
 | The architecture of the platform the snap is built for. | 
| 
 | The architecture of the platform the snap is built on. | 
| 
 | The architecture triplet of the platform the snap is built for. | 
| 
 | The architecture triplet of the platform the snap is built on. | 
core22¶
| Project variable | Description | 
|---|---|
| 
 | The architecture of the platform the snap is built for. | 
| 
 | The architecture of the platform the snap is built on. | 
| 
 | The architecture triplet of the platform the snap is built for. | 
| 
 | The architecture triplet of the platform the snap is built on. | 
| 
 | deprecated: use
 | 
| 
 | deprecated: use  | 
core20¶
core20 snaps use the terminology run-on in the architectures field
in snapcraft.yaml. The project variables and documentation use the
preferred term build-for.
| Project variable | Description | 
|---|---|
| 
 | The architecture of the platform the snap is built for. | 
| 
 | The architecture of the platform the snap is built on. | 
| 
 | The architecture triplet of the platform the snap is built for. | 
| 
 | The architecture triplet of the platform the snap is built on. | 
| 
 | The architecture triplet specified by
 | 
| 
 | The architecture specified by
 | 
SNAPCRAFT_ARCH_BUILD_FOR and SNAPCRAFT_ARCH_TRIPLET_BUILD_FOR are not
available in any of the following scenarios:
- when the build-for architecture is not in the list of supported architectures 
- when building a multi-architecture snap 
Supported architectures¶
Supported locally¶
The following architectures can be used when building a snap locally.
- amd64 
- arm64 
- armhf 
- i386 
- powerpc 
- ppc64el 
- riscv64 
- s390x 
Supported by Launchpad¶
The following architectures are supported by Launchpad for remote building.
- amd64 
- arm64 
- armhf 
- ppc64el 
- riscv64 
- s390x 
Environment variables and command line arguments¶
core22¶
The command line argument --build-for=<arch> or environment variable
SNAPCRAFT_BUILD_FOR=<arch> is used to build a single snap package for an
architecture. It selects a single build-on->build-for pair from the build
plan. It does not allow building a snap not defined by the build plan.
The command line argument takes priority over the environment variable.
See Build plans for more information on how build plans are created.
core20¶
--target-arch=<arch> is used for cross-compiling in core20. It adds
repositories for the target arch, which are used for stage-packages. The
target arch does not need to be listed in the snapcraft.yaml
architectures keyword.
The --target-arch argument can only be used in destructive mode and with
--enable-experimental-target-arch or the environment variable
SNAPCRAFT_ENABLE_EXPERIMENTAL_TARGET_ARCH.
The full usage is
snapcraft --destructive-mode --enable-experimental-target-arch --target-arch=<arch>.
