Skip to main content

The xPack Binary Development Tools

There are several tools, grouped by their expected use.

Main tools

The intended use case for the main tools is building and testing C/C++ projects, with an emphasis on embedded projects, but native projects can benefit as well.

Toolchains

The core tools are the toolchains. There are two Arm Embedded GCC toolchains, one for 32-bit devices (arm-none-eabi-gcc) and one for 64-bit devices (aarch64-none-elf-gcc). The second supported embedded architecture is RISC-V, with the riscv-none-elf-gcc toolchain that generates both 32 and 64-bit executables.

For native builds, the two main toolchains (gcc and clang) are supported.

To cross-build Windows projects, the mingw-w64-gcc toolchain is included.

Build tools

The main system build generators (cmake and meson) are supported.

As a modern replacement to make, the ninja small build system is included.

Emulators

To test the Arm and RISC-V executables, the qemu-system-arm, qemu-system-aarch64 and qemu-system-riscv emulators are supported.

OpenOCD

To flash and debug bare metal boards, the openocd on-chip debugger is incuded.

Supplementary tools

The supplementary tools were needed to build the main tools. Since these tools are exclusively built on macOS and GNU/Linux, to reduce maintenance efforts, currently there are no Windows binaries. However, the projects are versatile and can be used in any builds; if necessary, Windows binaries can be added in future releases.

The bison, flex, m4, patchelf, pkg-config, realpath, sed, wine are provided.

Work in progress

Some projects are not yet production ready, and need some more work.

Common internal projects

The xPack Build Box (XBB)

For reproducibility, the GNU/Linux builds, also used to build the Windows binaries, are based on several Docker images.

The scripts to create these Docker images are hosted in a separate project.

The xPack Build Box Helper

The build procedures for all projects have many things in common; to avoid code duplication, the common scripts and other resources were grouped in a helper project.