xref: /aosp_15_r20/external/cronet/build/detect_host_arch.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1#!/usr/bin/env python3
2# Copyright 2014 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Outputs host CPU architecture in format recognized by gyp."""
7
8
9import platform
10import re
11import sys
12
13
14def HostArch():
15  """Returns the host architecture with a predictable string."""
16  host_arch = platform.machine()
17
18  # Convert machine type to format recognized by gyp.
19  if re.match(r'i.86', host_arch) or host_arch == 'i86pc':
20    host_arch = 'ia32'
21  elif host_arch in ['x86_64', 'amd64']:
22    host_arch = 'x64'
23  elif host_arch.startswith('arm'):
24    host_arch = 'arm'
25  elif host_arch.startswith('aarch64'):
26    host_arch = 'arm64'
27  elif host_arch.startswith('mips64'):
28    host_arch = 'mips64'
29  elif host_arch.startswith('mips'):
30    host_arch = 'mips'
31  elif host_arch.startswith('ppc'):
32    host_arch = 'ppc'
33  elif host_arch.startswith('s390'):
34    host_arch = 's390'
35
36
37  # platform.machine is based on running kernel. It's possible to use 64-bit
38  # kernel with 32-bit userland, e.g. to give linker slightly more memory.
39  # Distinguish between different userland bitness by querying
40  # the python binary.
41  if host_arch == 'x64' and platform.architecture()[0] == '32bit':
42    host_arch = 'ia32'
43  if host_arch == 'arm64' and platform.architecture()[0] == '32bit':
44    host_arch = 'arm'
45
46  return host_arch
47
48def DoMain(_):
49  """Hook to be called from gyp without starting a separate python
50  interpreter."""
51  return HostArch()
52
53if __name__ == '__main__':
54  print(DoMain([]))
55