| # Copyright (c) 2017 Google Inc. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Starboard's abstract Toolchain which is implemented for each platform.""" |
| |
| import abc |
| import imp |
| import logging |
| import os |
| |
| import starboard |
| from starboard.tools import paths |
| from starboard.tools import platform |
| |
| |
| class ABCMetaSingleton(abc.ABCMeta): |
| instances = {} |
| |
| def __call__(self, *args, **kwargs): |
| if self not in self.instances: |
| self.instances[self] = super(ABCMetaSingleton, self).__call__( |
| *args, **kwargs) |
| return self.instances[self] |
| |
| |
| class Toolchain(object): |
| """This is an abstract interface of the Toolchain.""" |
| """ TODO: move variables / commands |
| AR / _HOST |
| ARFLAGS / _HOST |
| ARTHINFLAGS / _HOST |
| CC / CC_HOST |
| CXX / CXX_HOST |
| LD / LD_HOST |
| RC / RC_HOST |
| And / or implement NinjaWriter.WriteSources & GenerateOutputForConfig body |
| here. |
| """ |
| __metaclass__ = ABCMetaSingleton |
| |
| @abc.abstractmethod |
| def Define(self, d): |
| pass |
| |
| @abc.abstractmethod |
| def EncodeRspFileList(self, args): |
| pass |
| |
| @abc.abstractmethod |
| def ExpandEnvVars(self, path, env): |
| pass |
| |
| @abc.abstractmethod |
| def ExpandRuleVariables(self, path, root, dirname, source, ext, name): |
| pass |
| |
| @abc.abstractmethod |
| def GenerateEnvironmentFiles(self, toplevel_build_dir, generator_flags, |
| open_out): |
| pass |
| |
| @abc.abstractmethod |
| def GetCompilerSettings(self): |
| pass |
| |
| @abc.abstractmethod |
| def GetPrecompiledHeader(self, **kwargs): |
| pass |
| |
| @abc.abstractmethod |
| def InitCompilerSettings(self, spec, **kwargs): |
| pass |
| |
| @abc.abstractmethod |
| def SetAdditionalGypVariables(self, default_variables, **kwargs): |
| pass |
| |
| @abc.abstractmethod |
| def VerifyMissingSources(self, sources, **kwargs): |
| pass |
| |
| @abc.abstractmethod |
| def QuoteForRspFile(self, arg): |
| pass |
| |
| |
| class PrecompiledHeader: |
| __metaclass__ = abc.ABCMeta |
| |
| @abc.abstractmethod |
| def __init__(self): |
| pass |
| |
| @abc.abstractmethod |
| def GetFlagsModifications(self, input_flags, output, implicit, command, |
| cflags_c, cflags_cc, expand_special): |
| pass |
| |
| @abc.abstractmethod |
| def GetPchBuildCommands(self): |
| pass |
| |
| @abc.abstractmethod |
| def GetInclude(self): |
| pass |
| |
| @abc.abstractmethod |
| def GetObjDependencies(self, sources, output): |
| pass |
| |
| |
| class CompilerSettings: |
| """Abstract Compiler Settings class.""" |
| __metaclass__ = abc.ABCMeta |
| |
| @abc.abstractmethod |
| def __init__(self): |
| pass |
| |
| @abc.abstractmethod |
| def GetArch(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetCflags(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetCflagsC(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetCflagsCC(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetCflagsObjectiveC(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetCflagsObjectiveCC(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetDefines(self, config): |
| pass |
| |
| @abc.abstractmethod |
| def GetLdFlags(self, config, **kwargs): |
| pass |
| |
| @abc.abstractmethod |
| def GetLibFlags(self, config, gyp_path_to_ninja): |
| pass |
| |
| @abc.abstractmethod |
| def GetRcFlags(self, config, gyp_path_to_ninja): |
| pass |
| |
| @abc.abstractmethod |
| def ProcessIncludeDirs(self, include_dirs, config_name): |
| pass |
| |
| @abc.abstractmethod |
| def ProcessLibraries(self, libraries, config_name): |
| pass |