blob: 0a7e5bd8436645b6cbae39d59e831c14c6910a8c [file] [log] [blame] [view]
# Abstract Toolchain
## Motivation
The aim of implementing an Abstract Toolchain is to allow porters to add
new toolchains or customize existing ones without the need of modifying
common code.
Initially all targets were defined in one common shared file,
`src/tools/gyp/pylib/gyp/generator/ninja.py`.
Modifications to this file were required for replacing any of the toolchain
components, adding platform-specific tooling, adding new toolchains, or
accommodating platform-specific flavor of reference tool. Doing this in a
shared file does not scale with the number of ports.
## Overview
The solution implemented to solve toolchain abstraction consists of adding two
new functions to the platform specific `gyp_configuration.py` file found under:
`starboard/<PLATFORM>/gyp_configuration.py`
The functions to implement are:
`GetHostToolchain` and `GetTargetToolchain`
## Example
The simplest complete GCC based toolchain, where a target and host are the same,
and all tools are in the PATH:
class ExamplePlatformConfig(starboard.PlatformConfig)
# ...
def GetTargetToolchain(self):
return [
starboard.toolchains.gnu.CCompiler(),
starboard.toolchains.gnu.CPlusPlusCompiler(),
starboard.toolchains.gnu.Assembler(),
starboard.toolchains.gnu.StaticLinker(),
starboard.toolchains.gnu.DynamicLinker(),
starboard.toolchains.gnu.Bison(),
starboard.toolchains.gnu.Stamp(),
starboard.toolchains.gnu.Copy(),
]
def GetHostToolchain(self):
return self.GetTargetToolchain()
You can find real examples of this in the Open Source repo:
[Linux x8611](https://cobalt.googlesource.com/cobalt/+/refs/heads/21.lts.1+/src/starboard/linux/x64x11/gyp_configuration.py)
[Raspberry Pi 2](https://cobalt.googlesource.com/cobalt/+/refs/heads/21.lts.1+/src/starboard/raspi/shared/gyp_configuration.py)