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 <nore...@buildbot.pypy.org> wrote: > Author: David Schneider <david.schnei...@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-com...@python.org > http://mail.python.org/mailman/listinfo/pypy-commit _______________________________________________ pypy-dev mailing list pypy-dev@python.org http://mail.python.org/mailman/listinfo/pypy-dev