detect_host_arch.py 1.5 KB

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