Introduction to Arm® Compiler 6
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, 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:
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.
The legacy assembler. Only use
armasmfor legacy Arm-syntax assembly code. Use the
armclangassembler and GNU syntax for all new assembly files.
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.
- 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.
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.
NoteArm does not guarantee the compatibility of C++ compilation units compiled with different major or minor versions of Arm Compiler and linked into a single image. Therefore, Arm recommends that you always build your C++ code from source with a single version of the toolchain.
- Arm C libraries
The Arm C libraries provide:
An implementation of the library features as defined in the C standards.
Nonstandard extensions common to many C libraries.
POSIX extended functionality.
Functions standardized by POSIX.
A typical application development flow might involve the following:
Developing C/C++ source code for the main application (armclang).
Developing assembly source code for near-hardware components, such as interrupt service routines (armclang, or armasm for legacy assembly code).
Linking all objects together to generate an image (armlink).
Converting an image to flash format in plain binary, Intel Hex, and Motorola-S formats (fromelf).
The following figure shows how the compilation tools are used for the development of a typical application.
Figure 1-1 A typical tool usage flow diagram
Arm Compiler 6 has more functionality than the set of product features that is described in the documentation. The various features in Arm Compiler 6 can have different levels of support and guarantees. For more information, see Support level definitions.
- If you are migrating your toolchain from Arm Compiler 5 to Arm Compiler 6, see the Arm® Compiler Migration and Compatibility Guide. It contains information on how to migrate your source code and toolchain build options.
- For a list of Arm® Compiler 6 documents, see the documentation on Arm Developer.
Be aware of the following:
- Generated code might be different between two Arm Compiler releases.
- For a feature release, there might be significant code generation differences.