Arm Compiler Version 6

Arm Compiler 6 is the compilation toolchain for the Arm architecture, available in all editions of MDK. It brings together the modern LLVM compiler infrastructure and the highly optimized Arm C libraries to produce performance and power optimized embedded software for the Arm architecture.

Efficient code generation, better diagnostics, and faster feature development, coupled with Arm’s compiler backend expertise, make LLVM the natural choice for the next generation of Arm Compiler.

Arm Compiler 6 makes use of Clang for the compiler front-end, whilst also retaining familiar sub-tools such as armasm, armlink, armar and fromelf.

 

Migrating code to Arm Compiler 6 on Keil MDK

This webinar explains how to utilize the benefits of Arm Compiler 6 and how to control the extended warnings when reusing existing application code. We also explain the advantages of link-time code optimization (LTO), which helps you to remove unused program code frequently part of hardware abstraction layers.

Here is an example, that has many typical components of a microcontroller application. It initializes and uses pins from a HAL library. It relies on an RTOS kernel, here Keil RTX 5. In this example, the HAL library is available in an optimized version for the three compilers. The values for gcc were created using the highest optimization, with an emphasis on size.

Code Size Comparison

Keil RTX5 Blinky on LPCXpresso5411x board with NXP LPCOpen library. C runtime for ArmCC is microlib, for GCC it is newlib-nano.

Safety Applications

Functional safety standards such as IEC 61508 and ISO 26262 require developers to justify the usage of compilers and demonstrate confidence in the selected toolchain.

Arm offers a compiler safety package to develop functional safety applications and help customers achieve certification by providing confidence-building evidence which can be used to make a toolchain justification argument.

Furthermore, Arm Run-Time System (FuSa RTS) includes the real-time operating system (RTOS) and C library that are certified for use in safety-critical  applications.

Arm® Compiler 6 is the most advanced C and C++ compilation toolchain from Arm for Arm Cortex® and Arm Neoverse™ processors. Arm Compiler 6 is developed alongside the Arm architecture. Therefore, <span "="">Arm Compiler 6 is tuned to generate highly efficient code for embedded bare-metal applications ranging from small sensors to 64-bit devices.

Arm Compiler 6 is a component of  Arm® Development Studio, Arm® DS-5 Development Studio, and Arm® Keil® MDK. Alternatively, you can use Arm Compiler 6 as a standalone product. The features and processors that Arm Compiler 6 supports depend on the product edition. See Compare Editions for Arm Development Studio and Arm® DS-5 Development Studio editions for the specification of the different standard products.

Arm Compiler 6 combines the optimized tools and libraries from Arm with a modern LLVM-based compiler framework.

The components in Arm Compiler 6 are:

armclang

The compiler and integrated assembler that compiles C, C++, and GNU assembly language sources.
The compiler is based on LLVM and Clang technology.
Clang is a compiler front end for LLVM that supports the C and C++ programming languages.

armasm

The legacy assembler. Only use armasm for legacy Arm-syntax assembly code. Use the armclang assembler and GNU syntax for all new assembly files.

armlink

The linker combines the contents of one or more object files with selected parts of one or more object libraries to produce an executable program.

armar

The archiver enables sets of ELF object files to be collected together and maintained in archives or libraries. If you do not change the files often, these collections reduce compilation time as you do not have to recompile from source every time you use them. You can pass such a library or archive to the linker in place of several ELF files. You can also use the archive for distribution to a third-party application developer as you can share the archive without giving away the source code.

fromelf

The image conversion utility can convert Arm ELF images to binary formats. It can also generate textual information about the input image, such as its disassembly, code size, and data size.

Arm C++ libraries

The Arm C++ libraries are based on the LLVM libc++ project:

  • The libc++abi library is a runtime library providing implementations of low-level language features.
  • The libc++ library provides an implementation of the ISO C++ library standard. It depends on the functions that are provided by libc++abi.

Arm Compiler 6 offers lots of benefits compared to the previous Arm Compiler 6 and other available alternatives:

  • It has the best-in-class code size for cores based on the Armv7-M architecture (Arm Cortex-M3/M4/M7).
  • It supports cores based on Armv8-M (Arm Cortex-M23 and M33) and creates secure and non-secure code for devices with TrustZone for Armv8-M.
  • It fully supports the C++14 language standard.
  • Source code created for gcc can be built and optimized with Arm Compiler 6.