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

Reply via email to