Historically external-arm-toolchain recipe packaged all gcc headers from
${libdir}/gcc/${TARGET_SYS}/${BINV}/include - some would be picked up by
packages like gcc-sanitizers, libssp-dev. libquadmath-dev or libgomp-dev.
The rest would fall into catch-all libgcc-dev package.
Unfortunately, that could result in a conflict with a target gcc, which
also packages some of those files, like unwind.h or stddef.h, among others.
The conflict could be seen with this config:
EXTRA_IMAGE_FEATURES += "dev-pkgs tools-sdk"
TCMODE = "external-arm"
EXTERNAL_TOOLCHAIN = "/OE/toolchains/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu"
And the error message is:
Error: Transaction test error:
file /usr/lib/gcc/aarch64-poky-linux/11.2.1/include/stddef.h conflicts between attempted installs of libgcc-s-dev-11.2.1-r0.1.cortexa57 and gcc-arm+11.2-r2022.02.1.cortexa57
file /usr/lib/gcc/aarch64-poky-linux/11.2.1/include/unwind.h conflicts between attempted installs of libgcc-s-dev-11.2.1-r0.1.cortexa57 and gcc-arm+11.2-r2022.02.1.cortexa57
Modify external-arm-toolchain recipe according to how libgcc in OE-Core
handles those header files by removing and not packaging them:
https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/gcc/libgcc-common.inc#n40
Also need to adjust gcc recipe to pick up unwind.h from EXTERNAL_TOOLCHAIN
location now, since libgcc-dev no longer carries it, and install it into
STAGING_LIBDIR_NATIVE, where OE-Core gcc-target.inc expects it from
gcc-cross:
https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/gcc/gcc-target.inc#n164
Signed-off-by: Denys Dmytriyenko <denys@konsulko.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
meta-arm-toolchain Yocto Layer
This layer contains recipes for GNU Arm toolchains which could either be built from source or pre-built toolchain binaries.
Information regarding contributing, reporting bugs, etc can be found in the top-level meta-arm readme file.
Source Arm toolchain for Linux development
Recipes for GNU Arm toolchain built from source are provided under
recipes-devtools/gcc/. In order to use Arm toolchain instead of OE core
toolchain, one just needs to override GCCVERSION in corresponding distro
conf file.
- Eg. to use GNU Arm toolchain version
9.2GCCVERSION = "arm-9.2"
Pre-built Arm toolchain for Linux development
Recipes for pre-built GNU Arm toolchain for Linux development are provided under
recipes-devtools/external-arm-toolchain/.
external-arm-toolchain.bb
This recipe provides support for pre-built GNU toolchains targeting processors
from the Arm Cortex-A family and implementing the Arm A-profile architecture.
Usage
^^^^^
In order to use any of pre-built Arm toolchain versions (8.2, 8.3, 9.2 and so
on), a user needs to download and untar tool-set on host machine at a particular
installation path eg: ``/opt/toolchain/``. Then user needs to specify following
in ``conf/local.conf`` in order to replace OE toolchain with pre-built GNU-A
toolchain:
TCMODE = "external-arm"
EXTERNAL_TOOLCHAIN = "<path-to-the-toolchain>"
- Eg. for AArch64 (eg. qemuarm64 machine in poky distro)
EXTERNAL_TOOLCHAIN = "\
<installation-path>/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu \
"
- Eg. for AArch32 (eg. qemuarm machine in poky distro)
EXTERNAL_TOOLCHAIN = "\
<installation-path>/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf \
"
Supported distros and machines
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Since this pre-built GNU-A tool-set simply replaces OE toolchain, so it is
meant to be distro and machine agnostic as long as one is cross-compiling for
Arm A-profile architecture.
Tested distro and machines (for zeus stable release):
1. Distro: poky; machines: qemuarm and qemuarm64 (build and boot tested)
2. Distro: RPB; machines: dragonboard-410c (build and boot tested)
3. Distro: world; machines: qemuarm and qemuarm64. Build tested for following
layers:
- poky/meta
- poky/meta-poky
- poky/meta-yocto-bsp
- meta-openembedded/meta-oe
- meta-openembedded/meta-python
- meta-openembedded/meta-networking
SDK support
^^^^^^^^^^^
Pre-built toochain provides support to build OE SDK which has been tested using
following commands:
$ bitbake core-image-base -c populate_sdk
$ bitbake core-image-base -c testsdk
Note: Currently generated SDK only uses glibc provided by pre-built toolchain.
The cross compiler, binutils, gdb/gdbserver etc. are built from source.
This is something we would like to improve in future in order to package
most of the components from pre-built toolchain instead.
Pre-built Arm toolchain for bare-metal development
--------------------------------------------------
Recipes for pre-built GNU Arm toolchain for bare-metal development are provided
under ``recipes-devtools/external-arm-toolchain/``.
gcc-arm-none-eabi_<version>.bb
This recipe provides support for pre-built GNU Arm Embedded toolchain for bare-metal software development on devices based on 32-bit Arm Cortex-A, Cortex-R and Cortex-M processors.
Supported version: 9-2019-q4-major
gcc-aarch64-none-elf_.bb
This recipe provides support for pre-built GNU Arm toolchain for bare-metal
software development on devices based on 64-bit Arm Cortex-A processors.
Supported version: 9.2-2019.12
Layer maintainer(s)
-------------------
* Sumit Garg <sumit.garg@linaro.org>
* Denys Dmytriyenko <denis@denix.org>