blob: 8638bd0463f1481d7316e420ad12231572fb6d75 [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 past.builtins import basestring
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",
}
class Platform(object):
def __init__(self, api, os, arch):
self._api = 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._api.platform_util.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 target 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, Platform):
return self._os == other._os and self._arch == other._arch
elif isinstance(other, basestring):
return self.platform == other
return False
def __ne__(self, other):
return not self.__eq__(other)
class PlatformUtilApi(recipe_api.RecipeApi):
def platform(self, name):
return Platform(self.m, *name.split("-", 2))
@property
def host(self):
return Platform(
self.m,
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],
)