blob: 850c104e9baedbee07d25c55a52453120024ea24 [file] [log] [blame]
# 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 <os>-<arch> 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])