# Copyright 2018 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from recipe_engine import recipe_api PLATFORM_TO_TRIPLE = { 'fuchsia-amd64': 'x86_64-fuchsia', 'fuchsia-arm64': 'aarch64-fuchsia', 'linux-amd64': 'x86_64-linux-gnu', 'linux-arm64': 'aarch64-linux-gnu', 'mac-amd64': 'x86_64-apple-darwin', 'mac-arm64': 'arm64-apple-darwin', } PLATFORMS = PLATFORM_TO_TRIPLE.keys() class Target(object): def __init__(self, api, os, arch): self.m = api self._os = os self._arch = arch @property def is_win(self): """Returns True iff the target platform is Windows.""" return self.os == 'windows' @property def is_mac(self): """Returns True iff the target platform is macOS.""" return self.os == 'mac' @property def is_linux(self): """Returns True iff the target platform is Linux.""" return self.os == 'linux' @property def is_host(self): """Returns True iff the target platform is host.""" return self == self.m.host @property def os(self): """Returns the target os name which will be in: * windows * mac * linux """ return self._os @property def arch(self): """Returns the current CPU architecture.""" return self._arch @property def platform(self): """Returns the target platform in the - format.""" return '%s-%s' % (self.os, self.arch) @property def triple(self): """Returns the target triple.""" return PLATFORM_TO_TRIPLE[self.platform] def __str__(self): return self.platform def __eq__(self, other): if isinstance(other, Target): return self._os == other._os and self._arch == other._arch return False def __ne__(self, other): return not self.__eq__(other) class TargetApi(recipe_api.RecipeApi): def __call__(self, platform): return Target(self, *platform.split('-', 2)) @property def host(self): return Target(self, self.m.platform.name.replace('win', 'windows'), { 'intel': { 32: '386', 64: 'amd64', }, 'arm': { 32: 'armv6', 64: 'arm64', }, }[self.m.platform.arch][self.m.platform.bits])