fune/taskcluster/taskgraph/util/platforms.py
Tom Prince afa141b26c Bug 1514124: [win64-aarch64] Pass the architecture to mar generation, so that it can pass the appropriate arch flag to xz; r=aki,Callek
XZ supports rewritting addresses in executable code, which is architechture
specific. The updater is compiled with support for the target architecture
only, so we can't always compress updates passing `--x86` to XZ. This threads
the architecture through to the repackage steps, so we can pass the appropraite
flags to the update packaging scripts.

Differential Revision: https://phabricator.services.mozilla.com/D14601

--HG--
extra : moz-landing-system : lando
2018-12-17 21:45:09 +00:00

61 lines
1.7 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, print_function, unicode_literals
import re
from .attributes import keymatch
# platform family is extracted from build platform by taking the alphabetic prefix
# and then translating win -> windows
_platform_re = re.compile(r'^[a-z]*')
_renames = {
'win': 'windows'
}
_archive_formats = {
'linux': '.tar.bz2',
'macosx': '.tar.gz',
'windows': '.zip',
}
_executable_extension = {
'linux': '',
'macosx': '',
'windows': '.exe',
}
_architectures = {
r'linux\b.*': 'x86',
r'linux64\b.*': 'x86_64',
r'macosx64\b.*': 'x86_64',
r'win32\b.*': 'x86',
r'win64\b(?!-aarch64).*': 'x86_64',
r'win64-aarch64\b.*': 'aarch64',
}
def platform_family(build_platform):
"""Given a build platform, return the platform family (linux, macosx, etc.)"""
family = _platform_re.match(build_platform).group(0)
return _renames.get(family, family)
def archive_format(build_platform):
"""Given a build platform, return the archive format used on the platform."""
return _archive_formats[platform_family(build_platform)]
def executable_extension(build_platform):
"""Given a build platform, return the executable extension used on the platform."""
return _executable_extension[platform_family(build_platform)]
def architecture(build_platform):
matches = keymatch(_architectures, build_platform)
if len(matches) == 1:
return matches[0]
raise Exception("Could not determine architecture of platform `{}`.".format(build_platform))