The Architectures how-to guide provides examples of how to use the platforms
and architectures
keywords.
The root keyword platforms
defines a list of platforms, each containing a build-on
and build-for
keyword with the following syntax:
platforms:
<platform 1>:
build-on: [<arch 1>, <arch 2>]
build-for: [<arch 1>]
<platform 2>:
build-on: [<arch 3>]
build-for: [<arch 4>]
...
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 build-for
arch.
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.
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.
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.
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]
Using a list is the recommended syntax. Scalars are not recommended.
The build-on
field is required and can contain multiple architectures.
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.
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.
As an alternative to the explicit format described above, core20
snaps support a shorthand format 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 variable | Description |
---|---|
CRAFT_ARCH_BUILD_FOR |
The architecture of the platform the snap is built for. |
CRAFT_ARCH_BUILD_ON |
The architecture of the platform the snap is built on. |
CRAFT_ARCH_TRIPLET_BUILD_FOR |
The architecture triplet of the platform the snap is built for. |
CRAFT_ARCH_TRIPLET_BUILD_ON |
The architecture triplet of the platform the snap is built on. |
Project variable | Description |
---|---|
CRAFT_ARCH_BUILD_FOR |
The architecture of the platform the snap is built for. |
CRAFT_ARCH_BUILD_ON |
The architecture of the platform the snap is built on. |
CRAFT_ARCH_TRIPLET_BUILD_FOR |
The architecture triplet of the platform the snap is built for. |
CRAFT_ARCH_TRIPLET_BUILD_ON |
The architecture triplet of the platform the snap is built on. |
CRAFT_ARCH_TRIPLET |
Deprecated. Use CRAFT_ARCH_TRIPLET_BUILD_FOR instead. |
CRAFT_TARGET_ARCH |
Deprecated. Use CRAFT_ARCH_BUILD_FOR instead. |
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 |
---|---|
SNAPCRAFT_ARCH_BUILD_FOR |
The architecture of the platform the snap is built for. |
SNAPCRAFT_ARCH_BUILD_ON |
The architecture of the platform the snap is built on. |
SNAPCRAFT_ARCH_TRIPLET_BUILD_FOR |
The architecture triplet of the platform the snap is built for. |
SNAPCRAFT_ARCH_TRIPLET_BUILD_ON |
The architecture triplet of the platform the snap is built on. |
SNAPCRAFT_ARCH_TRIPLET |
The architecture triplet specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. |
SNAPCRAFT_TARGET_ARCH |
The architecture specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. |
SNAPCRAFT_ARCH_BUILD_FOR
and SNAPCRAFT_ARCH_TRIPLET_BUILD_FOR
are not available in either of the following scenarios:
The following architectures can be used when building a snap locally.
The following architectures are supported by Launchpad for remote building.
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.
--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>
.
Last updated 3 months ago.