cpython
cpython copied to clipboard
Target libc based suffix (-musl/-gnu) in PLATFORM_TRIPLET is chosen based on build machine configuration instead of configuration of the target
That, as an example, leads to cpython 3.9.13 build failing[^1] when cross-compiling on AMD64 Linux with glibc for mpc8548 Linux (OpenWrt) with musl.
As already described and confirmed as a bug in https://github.com/python/cpython/pull/24502#discussion_r938078760 :
If I'm not mistaken, PLATFORM_TRIPLET should refer to the target platform on which cpython will run. If that is the case, the musl libc vs. glibc decision should be based on $host_os rather than $build_os as the former is based on autoconf's AC_CANONICAL_HOST macro[^2] which refers to the target platform that might differ from the build platform in case of cross-compilation.
I'm creating this as a separate issue concerning a particular problem, but I think this also contributes to existing discussion in https://github.com/python/cpython/issues/87278 .
[^1]: "internal configure error for the platform triplet, please file a bug report" [^2]: https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/Canonicalizing.html
I have been looking into the issue. The current code has more problems and https://github.com/python/cpython/pull/24502 should not have been accepted in its state. The lines
https://github.com/python/cpython/blob/2fa03b1b0708d5d74630c351ec9abd2aac7550da/configure.ac#L1076-L1080
are a hack that just happens to generate correct platform triplet for most common platforms. It breaks for some platforms that are detected by our detection code. For example glibc mips64el-linux-gnuabi64 should be musl mips64el-linux-musl, not mips64el-linux-muslabi64.
For example glibc
mips64el-linux-gnuabi64should be muslmips64el-linux-musl, notmips64el-linux-muslabi64.
I believe musl for mips64 can be compiled for o32/n32 ABIs so mips64el-linux-muslabi64 would be the most explicit/appropriate, but I also think the current approach is a hack.
Edit: I'm incorrect on both points: musl for mips64 can be built for n64/n32 (not o32); mips64el-linux-musl is correct (with n64 as the most common/default abi for mips64).
Resolved in:
- gh-107221