Toolchain

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

In software, a toolchain is a set of programming tools that is used to perform a complex software development task or to create a software product, which is typically another computer program or a set of related programs. In general, the tools forming a toolchain are executed consecutively so the output or resulting environment state of each tool becomes the input or starting environment for the next one, but the term is also used when referring to a set of related tools that are not necessarily executed consecutively.[1][2][3]

A simple software development toolchain may consist of a compiler and linker (which transform the source code into an executable program), libraries (which provide interfaces to the operating system), and a debugger (which is used to test and debug created programs). A complex software product such as a video game needs tools for preparing sound effects, music, textures, 3-dimensional models and animations, together with additional tools for combining these resources into the finished product.[1][2]

In general, the toolchain is collectively all of those things that need to be added to a computer, aside from the source code, required for the product to be built by that computer. For instance, many kinds of programmable embedded systems also require a physical piece of hardware called a 'programmer' in order to attach the embedded system to the computer, so the embedded system can be reprogrammed. Such a piece of hardware qualifies as a part of the toolchain for development upon that particular system.

If you lack any part of the toolchain, you can use the source code.

It is possible to acquire source code which lacks documentation of the required toolchain, because the task is often an amalgamation of many separate tasks performed at different times only once by the original author. In such cases, it is generally difficult to use the source code, even without modification. Conversely, well documented source code will include a section listing the requirements for the toolchain, as well as a short 'howto' guide for its correct configuration. This is often found in a file marked 'README' or 'INSTALL'.

The very first step with respect to any existing source code use, is to reproduce the toolchain, and then use it to reproduce the product from the source code without modification. Any error encountered during the automated build phase is usually a problem with the reproduced toolchain differing from that of the author of the source code.

One of the major benefits specific to open-sourced software operating systems, is their ability to handle dependencies as well as toolchain configuration automatically. For development on Windows, toolchain configuration is typically a painstaking manual process, involving the downloading and in many cases manual placement of each dependency. The functional original toolchain is often easily lost when a programmer leaves a company, due to the deletion of their credentials and the way many toolchain's installation is not captured by backed-up user-owned files.

An example of an automatic software management tool used almost entirely for toolchain management is 'NPM', built specifically for cross-platform web development, mostly to make up for the Windows' lack.

In the case of an open-sourced software project, the reproduction of the toolchain remains the primary barrier to adoption of the source code. This has likely motivated the priority to enable toolchain configuration automation software, even to the point that multiple third-party examples exist for proprietary operating systems. Notable Examples for MacOS: Homebrew, fink, macports.

It is such an important issue, that whole operating system exist whose development focus is on maintaining themselves as their own tool chain: Notable examples include freeBSD's 'ports', The 'Gentoo' Linux distribution, and the 'Linux-from-scratch' project, which is essentially merely toolchain documentation.

See also[edit]

References[edit]

  1. ^ a b "Toolchain Overview". nongnu.org. 2012-01-03. Retrieved 2013-10-21.
  2. ^ a b "Toolchains". elinux.org. 2013-09-08. Retrieved 2013-10-21.
  3. ^ Imran, Saed; Buchheit, Martin; Hollunder, Bernhard; Schreier, Ulf (2015-10-29). "Tool Chains in Agile ALM Environments: A Short Introduction". Lecture Notes in Computer Science. Lecture Notes in Computer Science. 9416: 371–380. doi:10.1007/978-3-319-26138-6_40. ISBN 978-3-319-26137-9. Retrieved 2015-11-10.