forked from mirrors/gecko-dev
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
61 lines
1.7 KiB
Python
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))
|