Compiler toolchains are a set of programming tools, including a compiler, which is used by programmers to perform complex software development tasks, like creation of applications or a system platform itself. These days the software development often is done in a cross environment in which the tools are used and run on one platform and the resulting product is prepared for a different platform.
We can help you developing a toolchain for your target, or develop it for you. We can help with
- Full toolchain cycle: compiler, linker, debugger, system libraries
- Maintenance the existing toolchain, catching up with the upstream releases and changes
- Custom features including compiler pragmas, language extensions, target-specific optimizations, and more
- Code security hardening
We have been involved in the creation and maintenance of compiler toolchains for various targets. Some, like ARM, are common now, and some are still quite unique in the areas of microcontrollers, SoCs and DSPs.
- C std library
- C++ std library (supporting C++11, 14, 17 features)
- Target-specific tuning
System libraries such as libc and libc++ are quite standard when facing toward applications. On the other end, each of them requires some porting and tuning for a particular platform to be efficient.
We can help you with porting the system libraries to your platform or tuning them up for your platform.
Having your platform officially supported by a large open source project like LLVM could save significant time and effort in adapting changes from upstream. There are certain requirements for getting a platform formally supported.
In some cases it is easier and more secure to have us represent your target for the Open Source community. We know the procedure and practices, which help to minimize risk, time and effort. This also might screen your involvement or interest in a particular architecture, or certain aspects of a to-be-announced platform.
- Code analysis tools
- Profiling and code coverage
- PGO (needs target support) and LTO
A big part of quality software applications is having the right tools for identifying unsafe or non-optimal code constructions that are specific to a target platform. Some of these checkers perform when compiling and check statically, while others must perform at run time.
In both cases the compiler can be of service in aiding the checkers and placing instrumentation points. It helps to have compiler-based tools made for specific tasks as a part of a modern toolchain.