@sherman: I've never felt any inclination for the qemu approach myself, but, IIRC, it's been done in the past, I think?
(In which case: all hail BuildRoot \o/).
ct-ng can do cross-native & canadian builds, but since BR handles cross ct-ng TCs, and can build TCs itself, ct-ng -> BR ought to be enough to get you a sysroot with another TC inside.
Might need some minor packaging shenanigans in BR to match the glibc, but that's it.
The TL;DR being: if you intend to build a sysroot, I highly recommend letting BuildRoot handle the heavy lifting (and, as far as I'm concerned, it has the advantage of supporting crosstool-ng TCs without any fuss. Which makes sense, as the original ct-ng creator is a BR maintainer ;p).
(I have no experience with the OpenEmbedded stuff, which appears to be the other alternative if you actually aim to build a real, shippable distro. It's what's used by the reMarkable, and the Kindles started using at least parts of it a few years ago, too).
----
Speaking of Python, since numpy's buildsystem is completely bonkers, and I can now afford to dump Python 2, I went with
https://github.com/benfogle/crossenv, and that worked rather well.
I mean, numpy's buildsystem is still bonkers, but it at least convinced it to try to build stuff the right way.
(My previous approach for Python 2 was distutilscross, and that or a funky hack mentioned in a Py 3 issue for Py 3 stuff where that failed).