Introduction¶
Requirements¶
Crossenv requires Python 3.5 or higher (host and build). Significant work has gone into cross-compiling Python in newer versions, and many of the techniques needed to do the cross compilation properly are not available on older releases.
Crossenv currently only supports Linux build machines. Other operating systems may work, but they are untested and unsupported.
Vocabulary¶
There is no standard vocabulary for the pieces that go into cross-compiling, and different resources will often use contradictory terms. To prevent confusion we use the GNU terminology exclusively, which is used by Python itself.
Host |
The machine you are building for. (Android, iOS, other embedded systems.) |
Build |
The machine you are building on. (Probably your desktop.) |
Host-python |
The compiled Python binary and libraries that run on Host |
Build-python |
The compiled Python binary and libraries that run on Build. |
Cross-python |
Build-python, configured specially to build packages that can be run with Host-python. This tool creates Cross-python. |
How it works¶
Python makes a note of the compiler and compiler flags used when it was built.
(This information can be viewed by running python3 -m sysconfig
.) When
distutils
or setuptools
attempts to create an extension module, they
compile the extension using these recorded values along with reported
information about the currently running system.
Cross-python creates a virtual environment that, when activated, tricks
Build-Python into reporting all system information exactly as Host-python
would. When done correctly, a side effect of this is that distutils
and
setuptools
will cross-compile when building packages. All of the normal
packaging machinery still works correctly, so dependencies, ABI tags, and so
forth all work as expected.
Installation¶
Crossenv can be installed using pip (using build-python):
$ pip install crossenv