In software development a toolchain is a group of programs or utilities used to create an application or library for a given computer language. Developers traditionally refer to their build tools, compilers, and linkers as the components of a toolchain. Other programs or utilities like debuggers, sanitizers, or profilers, may also be considered as part of a toolchain. This is not an exact term but any tool that is required to create, build, and deploy your software could fall under the umbrella of a toolchain.
- Project generator or Configuration Tool
- Reads a configuration file and gathers information about the computer system the user is building on, then generates project build files.
- Examples: cmake, autotools, meson, bazel
- Build Tools
- A build tool reads the project build files and generates the necessary commands to call other tools to build the program.
- Examples: ninja, make, msbuild
- Compilers
- A compiler is used to transform source code into a compiled object format.
- Examples: clang, gcc, MinGW (Windows), MSVC (Windows)
- Linkers
- A linker is used to combine the compiled object files and libraries into a binary format or executable.
- Examples: ld, lld
- Shell Environment
- Will always be present on Unix systems
- Examples: bash, zsh
- Debugger
- A debugger is used to inspect the values of variables defined in the source code at runtime.
- Examples: gdb, lldb, windbg, Visual Studio
- Sanitizers
- Utilities to detect known incorrect code like buffer overflows, accessing a nullptr, or different types of undefined behavior which may be present in your code base.
- Examples: address sanitizer (asan), memory sanitizer (msan), thread sanitizer (tsan)