[OE-core] [CONSOLIDATED PULL 17/17] python: skip setup.py 'import check' when cross-compiling

Koen Kooi koen at dominion.thruhere.net
Wed Nov 9 09:39:12 UTC 2011


Missing PR bump!

Op 8 nov. 2011, om 20:22 heeft Saul Wold het volgende geschreven:

> From: Tom Zanussi <tom.zanussi at intel.com>
> 
> build_extension() in setup.py, as part of the build process, does an
> 'import check' on the built extension.  The import check in turn
> dlopen()'s the shared library associated with the extension, which
> isn't something that makes sense if that library was cross-compiled
> for a different architecture.
> 
> This was noticed with an x86_64 target that was compiled with avx
> support, because it caused 'illegal instruction' exceptions:
> 
> | /bin/sh: line 1: 14575 Illegal instruction ... -E ./setup.py -q build
> 
> For other target architectures, it doesn't necessarily cause illegal
> instruction exceptions, but still fails.  For example, on arm, the
> failure pathway causes this warning:
> 
> *** WARNING: renaming "cmath" since importing it failed: .../cmath.so:
>    wrong ELF class: ELFCLASS32
> 
> This patch to setup.py and the associated recipe changes allow the
> whole 'import check' logic to be skipped when cross-compiling.
> 
> Signed-off-by: Tom Zanussi <tom.zanussi at intel.com>
> ---
> .../python/setup_py_skip_cross_import_check.patch  |   27 ++++++++++++++++++++
> meta/recipes-devtools/python/python_2.7.2.bb       |    5 +++
> 2 files changed, 32 insertions(+), 0 deletions(-)
> create mode 100644 meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch
> 
> diff --git a/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch b/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch
> new file mode 100644
> index 0000000..6ccdb94
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python/setup_py_skip_cross_import_check.patch
> @@ -0,0 +1,27 @@
> +This patch skips over the 'import check' setup.py does when building
> +extensions.  This generally won't work when cross-compiling.
> +
> +Upstream-Status: Inappropriate [embedded-specific]
> +
> +Signed-off-by: Tom Zanussi <tom.zanussi at intel.com>
> +
> +Index: Python-2.7.2/setup.py
> +===================================================================
> +--- Python-2.7.2.orig/setup.py	2011-11-04 16:46:34.553796410 -0500
> ++++ Python-2.7.2/setup.py	2011-11-04 16:59:49.692802313 -0500
> +@@ -287,6 +287,15 @@
> +                           (ext.name, sys.exc_info()[1]))
> +             self.failed.append(ext.name)
> +             return
> ++
> ++        # If we're cross-compiling, we want to skip the import check
> ++        # i.e. we shouldn't be dynamically loading target shared libs
> ++        if os.environ.get('CROSS_COMPILE') is not None:
> ++            self.announce(
> ++                'WARNING: skipping import check for cross-compiled "%s"' %
> ++                ext.name)
> ++            return
> ++
> +         # Workaround for Mac OS X: The Carbon-based modules cannot be
> +         # reliably imported into a command-line Python
> +         if 'Carbon' in ext.extra_link_args:
> diff --git a/meta/recipes-devtools/python/python_2.7.2.bb b/meta/recipes-devtools/python/python_2.7.2.bb
> index bb088a4..360e64e 100644
> --- a/meta/recipes-devtools/python/python_2.7.2.bb
> +++ b/meta/recipes-devtools/python/python_2.7.2.bb
> @@ -18,6 +18,7 @@ SRC_URI += "\
>   file://multilib.patch \
>   file://cgi_py.patch \
>   file://remove_sqlite_rpath.patch \
> +  file://setup_py_skip_cross_import_check.patch \
> "
> 
> S = "${WORKDIR}/Python-${PV}"
> @@ -57,6 +58,8 @@ do_compile() {
> 	# then call do_install twice we get Makefile.orig == Makefile.sysroot
> 	install -m 0644 Makefile Makefile.sysroot
> 
> +	export CROSS_COMPILE="${TARGET_PREFIX}"
> +
> 	oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
> 		HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
> 		STAGING_LIBDIR=${STAGING_LIBDIR} \
> @@ -78,6 +81,8 @@ do_install() {
> 	# make install needs the original Makefile, or otherwise the inclues would
> 	# go to ${D}${STAGING...}/...
> 	install -m 0644 Makefile.orig Makefile
> +
> +	export CROSS_COMPILE="${TARGET_PREFIX}"
> 	
> 	oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
> 		HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
> -- 
> 1.7.6.4
> 
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 163 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20111109/5a679811/attachment-0002.sig>


More information about the Openembedded-core mailing list