Chromium Code Reviews| Index: ports/python_modules/numpy/nacl.patch |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/ports/python_modules/numpy/nacl.patch |
| @@ -0,0 +1,171 @@ |
| +diff --git a/numpy/core/code_generators/generate_numpy_api.py b/numpy/core/code_generators/generate_numpy_api.py |
| +index ce270a6..4094a56 100644 |
| +--- a/numpy/core/code_generators/generate_numpy_api.py |
| ++++ b/numpy/core/code_generators/generate_numpy_api.py |
| +@@ -111,14 +111,18 @@ _import_array(void) |
| + } |
| + #if NPY_BYTE_ORDER == NPY_BIG_ENDIAN |
| + if (st != NPY_CPU_BIG) { |
| +- PyErr_Format(PyExc_RuntimeError, "FATAL: module compiled as "\ |
| +- "big endian, but detected different endianness at runtime"); |
| ++ PyErr_Format(PyExc_RuntimeError, "FATAL: (for real) module compiled as "\ |
| ++ "big endian, but detected different endianness at runtime. "\ |
| ++ "(%%d %%d %%d) (%%d %%d)", st, (int) NPY_CPU_BIG, (int) NPY_CPU_LITTLE, |
| ++ (int) NPY_BIG_ENDIAN, (int) NPY_LITTLE_ENDIAN); |
| + return -1; |
| + } |
| + #elif NPY_BYTE_ORDER == NPY_LITTLE_ENDIAN |
| + if (st != NPY_CPU_LITTLE) { |
| +- PyErr_Format(PyExc_RuntimeError, "FATAL: module compiled as "\ |
| +- "little endian, but detected different endianness at runtime"); |
| ++ PyErr_Format(PyExc_RuntimeError, "FATAL: (for real) module compiled as "\ |
| ++ "little endian, but detected different endianness at runtime. " \ |
| ++ "(%%d %%d %%d) (%%d %%d)", st, (int) NPY_CPU_BIG, (int) NPY_CPU_LITTLE, |
| ++ (int) NPY_BIG_ENDIAN, (int) NPY_LITTLE_ENDIAN); |
| + return -1; |
| + } |
| + #endif |
| +diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h |
| +index ab14731..4f7c439 100644 |
| +--- a/numpy/core/include/numpy/npy_cpu.h |
| ++++ b/numpy/core/include/numpy/npy_cpu.h |
| +@@ -27,7 +27,7 @@ |
| + * i386 by Sun compilers on opensolaris at least |
| + */ |
| + #define NPY_CPU_X86 |
| +-#elif defined(__x86_64__) || defined(__amd64__) || defined(__x86_64) || defined(_M_AMD64) |
| ++#elif defined(__x86_64__) || defined(__amd64__) || defined(__x86_64) || defined(_M_AMD64) || defined (__native_client__) |
|
hamaji
2014/01/24 14:32:48
Maybe better to explain why we need this change.
Matthew Turk
2014/01/28 19:39:20
Done.
|
| + /* |
| + * both __x86_64__ and __amd64__ are defined by gcc |
| + * __x86_64 defined by sun compiler on opensolaris at least |
| +diff --git a/numpy/core/setup.py b/numpy/core/setup.py |
| +index 28b15aa..b1210ef 100644 |
| +--- a/numpy/core/setup.py |
| ++++ b/numpy/core/setup.py |
| +@@ -288,7 +288,7 @@ def check_types(config_cmd, ext, build_dir): |
| + "Cannot compile 'Python.h'. Perhaps you need to "\ |
| + "install python-dev|python-devel.") |
| + res = config_cmd.check_header("endian.h") |
| +- if res: |
| ++ if res and os.environ.get("NACL_PORT_BUILD") not in ["host", "bootstrap"]: |
| + private_defines.append(('HAVE_ENDIAN_H', 1)) |
| + public_defines.append(('NPY_HAVE_ENDIAN_H', 1)) |
| + |
| +@@ -465,7 +465,7 @@ def configuration(parent_package='',top_path=None): |
| + 'MOTOROLA_EXTENDED_12_BYTES_BE', |
| + 'IEEE_QUAD_LE', 'IEEE_QUAD_BE', |
| + 'IEEE_DOUBLE_LE', 'IEEE_DOUBLE_BE', |
| +- 'DOUBLE_DOUBLE_BE']: |
| ++ 'DOUBLE_DOUBLE_BE', "NO_LONG_DOUBLE"]: |
| + moredefs.append(('HAVE_LDOUBLE_%s' % rep, 1)) |
| + else: |
| + raise ValueError("Unrecognized long double format: %s" % rep) |
| +@@ -648,12 +648,13 @@ def configuration(parent_package='',top_path=None): |
| + # explicitly add an extension which has generate_config_h and |
| + # generate_numpyconfig_h as sources *before* adding npymath. |
| + |
| +- config.add_extension('_dummy', |
| +- sources = [join('src', 'dummymodule.c'), |
| +- generate_config_h, |
| +- generate_numpyconfig_h, |
| +- generate_numpy_api] |
| +- ) |
| ++ if os.environ.get("NACL_PORT_BUILD") != "bootstrap": |
| ++ config.add_extension('_dummy', |
| ++ sources = [join('src', 'dummymodule.c'), |
| ++ generate_config_h, |
| ++ generate_numpyconfig_h, |
| ++ generate_numpy_api] |
| ++ ) |
| + |
| + ####################################################################### |
| + # npymath library # |
| +diff --git a/numpy/core/setup_common.py b/numpy/core/setup_common.py |
| +index bad3607..bac26c7 100644 |
| +--- a/numpy/core/setup_common.py |
| ++++ b/numpy/core/setup_common.py |
| +@@ -3,6 +3,7 @@ from __future__ import division, absolute_import, print_function |
| + # Code common to build tools |
| + import sys |
| + from os.path import join |
| ++import os |
| + import warnings |
| + import copy |
| + import binascii |
| +@@ -304,5 +305,7 @@ def long_double_representation(lines): |
| + if saw is not None: |
| + raise ValueError("Unrecognized format (%s)" % saw) |
| + else: |
| ++ if os.environ.get("NACL_PORT_BUILD") == "bootstrap": |
| ++ return "NO_LONG_DOUBLE" |
| + # We never detected the after_sequence |
| + raise ValueError("Could not lock sequences (%s)" % saw) |
| +diff --git a/numpy/core/src/npymath/npy_math_private.h b/numpy/core/src/npymath/npy_math_private.h |
| +index 2bca6bf..9d35356 100644 |
| +--- a/numpy/core/src/npymath/npy_math_private.h |
| ++++ b/numpy/core/src/npymath/npy_math_private.h |
| +@@ -51,29 +51,27 @@ |
| + * fix this at some point */ |
| + #define IEEE_WORD_ORDER NPY_BYTE_ORDER |
| + |
| +-#if IEEE_WORD_ORDER == NPY_BIG_ENDIAN |
| ++#if (IEEE_WORD_ORDER == NPY_LITTLE_ENDIAN) || defined(__native_client__) |
|
hamaji
2014/01/24 14:32:48
Why have you swapped the order of this #if clause?
Matthew Turk
2014/01/28 19:39:20
It might. The issue I was running into is that fo
|
| + |
| + typedef union |
| + { |
| + double value; |
| + struct |
| + { |
| +- npy_uint32 msw; |
| + npy_uint32 lsw; |
| ++ npy_uint32 msw; |
| + } parts; |
| + } ieee_double_shape_type; |
| + |
| +-#endif |
| +- |
| +-#if IEEE_WORD_ORDER == NPY_LITTLE_ENDIAN |
| ++#elif IEEE_WORD_ORDER == NPY_BIG_ENDIAN |
| + |
| + typedef union |
| + { |
| + double value; |
| + struct |
| + { |
| +- npy_uint32 lsw; |
| + npy_uint32 msw; |
| ++ npy_uint32 lsw; |
| + } parts; |
| + } ieee_double_shape_type; |
| + |
| +diff --git a/numpy/core/src/private/npy_fpmath.h b/numpy/core/src/private/npy_fpmath.h |
| +index 8a120ca..984bd65 100644 |
| +--- a/numpy/core/src/private/npy_fpmath.h |
| ++++ b/numpy/core/src/private/npy_fpmath.h |
| +@@ -7,6 +7,10 @@ |
| + #include "numpy/npy_cpu.h" |
| + #include "numpy/npy_common.h" |
| + |
| ++#ifdef __native_client__ |
| ++ #define HAVE_LDOUBLE_IEEE_DOUBLE_LE |
| ++#endif |
| ++ |
| + #ifdef NPY_OS_DARWIN |
| + /* This hardcoded logic is fragile, but universal builds makes it |
| + * difficult to detect arch-specific features */ |
| +diff --git a/numpy/distutils/misc_util.py b/numpy/distutils/misc_util.py |
| +index f77e525..c876136 100644 |
| +--- a/numpy/distutils/misc_util.py |
| ++++ b/numpy/distutils/misc_util.py |
| +@@ -2036,6 +2036,11 @@ def get_cmd(cmdname, _cache={}): |
| + |
| + def get_numpy_include_dirs(): |
| + # numpy_include_dirs are set by numpy/core/setup.py, otherwise [] |
| ++ if os.environ.get("NACL_PORT_BUILD") == "dest": |
| ++ # We fake our numpy includes when building on the destination. |
| ++ base_path = os.environ["NACL_BUILD_TREE"] |
| ++ return [os.path.join(base_path, |
| ++ "lib/python2.7/site-packages/numpy/core/include")] |
| + include_dirs = Configuration.numpy_include_dirs[:] |
| + if not include_dirs: |
| + import numpy |