Closed
Labels
3.7 (EOL)end of lifeend of lifebuildThe build process and cross-buildThe build process and cross-builddocsDocumentation in the Doc dirDocumentation in the Doc dirtype-featureA feature request or enhancementA feature request or enhancement
Description
| BPO | 28542 |
|---|---|
| Nosy | @vadmium, @moreati |
| Files |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = 'https://github.com/xdegaye'
closed_at = None
created_at = <Date 2016-10-27.10:17:40.433>
labels = ['type-feature', '3.7', 'build', 'docs']
title = 'document cross compilation'
updated_at = <Date 2019-12-10.08:13:06.397>
user = 'https://github.com/xdegaye'bugs.python.org fields:
activity = <Date 2019-12-10.08:13:06.397>
actor = 'xdegaye'
assignee = 'xdegaye'
closed = False
closed_date = None
closer = None
components = ['Documentation', 'Cross-Build']
creation = <Date 2016-10-27.10:17:40.433>
creator = 'xdegaye'
dependencies = []
files = ['45238', '45263', '45268', '45294', '45319']
hgrepos = []
issue_num = 28542
keywords = ['patch']
message_count = 12.0
messages = ['279532', '279648', '279668', '279669', '279695', '279751', '279752', '279800', '279845', '279942', '280098', '280121']
nosy_count = 2.0
nosy_names = ['martin.panter', 'Alex.Willmer']
pr_nums = []
priority = 'normal'
resolution = None
stage = 'patch review'
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue28542'
versions = ['Python 3.6', 'Python 3.7']Metadata
Metadata
Assignees
Labels
3.7 (EOL)end of lifeend of lifebuildThe build process and cross-buildThe build process and cross-builddocsDocumentation in the Doc dirDocumentation in the Doc dirtype-featureA feature request or enhancementA feature request or enhancement
Activity
xdegaye commentedon Oct 27, 2016
Patch adding a section to the README.
vadmium commentedon Oct 29, 2016
Thanks, this looks like a decent start. I’m not that familiar with cross-compiling Python, but here are a couple questions:
$(cd /path/to/source && pwd)/configure
Why do you use $(pwd) here? I have mainly seen relative paths used (my own experiments, and reports from others), so I don’t think you need to force an absolute path. The instructions further up already mention “../configure” from a subdirectory.
--prefix=$(cd ../install && pwd)
Won’t that embed the path of the install directory in e.g. sys.prefix or something? Can’t you use “DESTDIR=../install” instead?
I remember there are a bunch of extra things you have to manually configure to cross-compile. See e.g. revision 12a56a349af2 which asks for /dev/ptmx and /dev/ptc settings in a CONFIG_SITE file (although I have had success just adding them to the “configure” command line). Perhaps we could add something like
'''
configure --host=[. . .] \
ac_cv_file__dev_ptmx=no \
ac_cv_file__dev_ptc=no
. . .
If the target Python could use /dev/ptmx or /dev/ptc to implement os.openpty(), set the corresponding argument to "yes".
'''
I suspect some people cross compile 2.7, so it may be worth applying something like this to that branch.
xdegaye commentedon Oct 29, 2016
'configure' fails with the following error message when used with '--prefix=../install':
configure: error: expected an absolute directory name for --prefix: ../install
So for consistency, the example used absolute paths everywhere.
You are right.
On an Android device where /usr and /bin do not exist, the platform independent Python files are installed on the sdcard. So the build system I am using for Android does the following:
Ok
Not sure that all the recent cross-compilation changes have been applied to 2.7. Would not documenting cross-compilation in 2.7 entail that we support it on 2.7 ?
xdegaye commentedon Oct 29, 2016
New patch.
xdegaye commentedon Oct 29, 2016
I have changed my Android build system to use DESTDIR, it is simpler than using 'mount --bind'. Thanks for the suggestion Martin.
Here is a new patch adding some text for the Android cross compilation.
xdegaye commentedon Oct 30, 2016
One must also add '--(en|dis)able-ipv6' to configure, otherwise configure exits with:
Fatal: You must get working getaddrinfo() function.
or you can specify "--disable-ipv6".
The ACTION-IF-CROSS-COMPILING parameter of the AC_RUN_IFELSE that checks for getaddrinfo is $ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6".
xdegaye commentedon Oct 30, 2016
Hum, I should have written:
The ACTION-IF-CROSS-COMPILING parameter of the AC_RUN_IFELSE that checks for getaddrinfo is $ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6" when configure is run with --disable-ipv6 or --enable-ipv6.
xdegaye commentedon Oct 31, 2016
New patch, less verbose and taking into account the previous posts.
vadmium commentedon Nov 1, 2016
Regarding 2.7, I guess it depends on your definition of “support”. People have been cross-compiling Python 2.7 longer than I have been working on Python. In the past I have tried to apply cross compilation fixes to 2.7. But if you are only confident about 3.6, let’s just stick with that for the moment.
FWIW, DESTDIR, --prefix, etc are not specific to cross compilation or Android. DESTDIR is also useful when building a package/tarball or whatever, rather than installing directly. And --prefix would be useful if you don’t have root access and want to install to $HOME or somewhere. These settings are mentioned in the 2.7 README, but it looks like Guido trimmed them out for Python 3.0 (revision 07d67a9725a7).
xdegaye commentedon Nov 2, 2016
About 2.7, this is a list of the issues I am aware of, that may have to be fixed also in 2.7 (and 3.5 for some of them): issues bpo-26884 bpo-27434 bpo-28444 and bpo-22724. Issue bpo-28589 was entered today and is a duplicate of the previous one.
I must be seeing everything through my little Android hammer these days :)
This new patch removes the last paragraph.
vadmium commentedon Nov 5, 2016
Actually I think it is good to document DESTDIR (you weren’t seem aware of it before?). I was just pointing out that it is useful to more than just Android. Perhaps Guido shouldn’t have trimmed it from the 2.7 readme (original text: https://hg.python.org/cpython/diff/988b3e807043/README). On the other hand, --prefix etc are already mentioned in “./configure --help”, and more people already seem to know about it.
xdegaye commentedon Nov 5, 2016
Yes, I was not aware of DESTDIR. The 2.7 README contains also useful information on the build process, for example about some use cases of the '*shared*' entries in the Setup files (for when setup.py cannot detect/build an extension module) or about the '*static' entries (to be able to profile extension modules). It also explains Setup.local whereas the only information on Setup.local in the Python3 documentation, is restricted to https://docs.python.org/3/extending/extending.html#compilation-and-linkage :(
There is also a lot of noise in the 2.7 README, this possibly explains the trimming. Maybe the cross-build section in the 3.6 README could be a link to a new build section in the documentation ?
The documentation on sys.prefix and sys.exec_prefix gives details about where go which files which is useful when trying to figure out where to copy the files on the target after a cross-build.
methane commentedon Sep 30, 2026
29835 added cross-compilation documentation, including configuration options and an example.