Enable cross compilation for cpython 2.7 (#50245)

This commit is contained in:
Travis Athougies 2018-11-15 10:36:03 -08:00 committed by Frederik Rietdijk
parent b633e1b3d4
commit d0eb502327
2 changed files with 40 additions and 2 deletions

View File

@ -0,0 +1,32 @@
--- ./setup.py.orig 2018-04-29 15:47:33.000000000 -0700
+++ ./setup.py 2018-11-11 09:41:58.097682221 -0800
@@ -458,8 +458,6 @@
if not cross_compiling:
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
- if cross_compiling:
- self.add_gcc_paths()
self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
@@ -517,7 +515,10 @@
# be assumed that no additional -I,-L directives are needed.
inc_dirs = self.compiler.include_dirs[:]
lib_dirs = self.compiler.library_dirs[:]
- if not cross_compiling:
+ if cross_compiling:
+ inc_dirs = []
+ lib_dirs = []
+ else:
for d in (
'/usr/include',
):
@@ -582,6 +584,8 @@ class PyBuildExt(build_ext):
# Some modules that are normally always on:
#exts.append( Extension('_weakref', ['_weakref.c']) )
+ self.compiler.library_dirs = lib_dirs + [ '.' ]
+
# array objects
exts.append( Extension('array', ['arraymodule.c']) )

View File

@ -104,6 +104,8 @@ let
# only works for GCC and Apple Clang. This makes distutils to call C++ # only works for GCC and Apple Clang. This makes distutils to call C++
# compiler when needed. # compiler when needed.
./python-2.7-distutils-C++.patch ./python-2.7-distutils-C++.patch
] ++ optional (stdenv.hostPlatform != stdenv.buildPlatform) [
./cross-compile.patch
]; ];
preConfigure = '' preConfigure = ''
@ -176,10 +178,14 @@ let
LIBRARY_PATH = makeLibraryPath paths; LIBRARY_PATH = makeLibraryPath paths;
}; };
# Python 2.7 needs this
crossCompileEnv = stdenv.lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform)
{ _PYTHON_HOST_PLATFORM = stdenv.hostPlatform.config; };
# Build the basic Python interpreter without modules that have # Build the basic Python interpreter without modules that have
# external dependencies. # external dependencies.
in stdenv.mkDerivation { in stdenv.mkDerivation ({
name = "python-${version}"; name = "python-${version}";
pythonVersion = majorVersion; pythonVersion = majorVersion;
@ -278,4 +284,4 @@ in stdenv.mkDerivation {
# in case both 2 and 3 are installed. # in case both 2 and 3 are installed.
priority = -100; priority = -100;
}; };
} } // crossCompileEnv)