Re: [pypy-dev] [pypy-commit] pypy default: Add an alternative method to detect main cpu model and size using different
![](https://secure.gravatar.com/avatar/bfc96d2a02d9113edb992eb96c205c5a.jpg?s=120&d=mm&r=g)
Maybe it's worth noting that IA64 (intel itanium) is an entirely different architecture than x86_64 and we do not support it. Please remove chekcing for this code. Cheers, fijal On Tue, Apr 23, 2013 at 6:08 PM, bivab <noreply@buildbot.pypy.org> wrote:
Author: David Schneider <david.schneider@picle.org> Branch: Changeset: r63566:1891968c05e4 Date: 2013-04-23 18:06 +0200 http://bitbucket.org/pypy/pypy/changeset/1891968c05e4/
Log: Add an alternative method to detect main cpu model and size using different compiler macros, useful for cross-compilation builds.
diff --git a/rpython/jit/backend/detect_cpu.py b/rpython/jit/backend/detect_cpu.py --- a/rpython/jit/backend/detect_cpu.py +++ b/rpython/jit/backend/detect_cpu.py @@ -2,12 +2,40 @@ Processor auto-detection """ import sys, os +from rpython.rtyper.tool.rffi_platform import getdefined +from rpython.translator.platform import is_host_build
class ProcessorAutodetectError(Exception): pass
+ +def detect_main_model_and_size_from_platform(): + # based on http://sourceforge.net/p/predef/wiki/Architectures/ + mapping = { + ('x86', '64'): [ + '__amd64__', '__amd64', '__x86_64__', '__x86_64', # AMD64 + '__ia64__', '_IA64', '__IA64__' # Intel Itanium (IA-64) + ], + ('arm', '32'): ['__arm__', '__thumb__'], + ('x86', '32'): ['i386', '__i386', '__i386__', '__i686__',], + ('ppc', '64'): ['__powerpc64__'], + } + for k, v in mapping.iteritems(): + for macro in v: + if not getdefined(macro, ''): + continue + return k + raise ProcessorAutodetectError, "Cannot detect processor using compiler macros" + + +def detect_main_model_from_platform(): + return detect_main_model_and_size_from_platform()[0] + + def autodetect_main_model(): + if not is_host_build(): + return detect_main_model_from_platform() mach = None try: import platform @@ -40,6 +68,8 @@ return mach
def autodetect_main_model_and_size(): + if not is_host_build(): + return detect_main_model_and_size_from_platform() model = autodetect_main_model() if sys.maxint == 2**31-1: model += '_32' diff --git a/rpython/jit/backend/test/test_detect_cpu.py b/rpython/jit/backend/test/test_detect_cpu.py --- a/rpython/jit/backend/test/test_detect_cpu.py +++ b/rpython/jit/backend/test/test_detect_cpu.py @@ -26,3 +26,8 @@ else: from rpython.jit.backend.model import AbstractCPU assert issubclass(cpu, AbstractCPU) + + +def test_detect_main_model_and_size_from_platform(): + info = detect_main_model_and_size_from_platform() + assert detect_main_model_and_size_from_platform() == info diff --git a/rpython/translator/platform/__init__.py b/rpython/translator/platform/__init__.py --- a/rpython/translator/platform/__init__.py +++ b/rpython/translator/platform/__init__.py @@ -347,3 +347,6 @@ global host host = platform
+ +def is_host_build(): + return host == platform diff --git a/rpython/translator/platform/test/test_platform.py b/rpython/translator/platform/test/test_platform.py --- a/rpython/translator/platform/test/test_platform.py +++ b/rpython/translator/platform/test/test_platform.py @@ -172,3 +172,13 @@ assert X() == X() assert Y(3) == Y(3) assert Y(2) != Y(3) + + +def test_is_host_build(): + from rpython.translator import platform + assert platform.host == platform.platform + + assert platform.is_host_build() + platform.set_platform('maemo', None) + assert platform.host != platform.platform + assert not platform.is_host_build() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit
participants (1)
-
Maciej Fijalkowski