On Fri, Aug 23, 2019 at 2:28 AM Jakub Piotr Cłapa <jpc...@zenburn.net>
wrote:

> Hi,
>
> I spent some time trying to cross-compile NumPy for Linux ARM64 on a
> macOS host as part of an OpenWRT compilation [1]. It was not so bad but
> certainly not trivial and I was wondering if we could use my experience
> to help streamline the process.
>

Thanks, that would be great!

We have quite some issues with cross-compilation, and usually they're hard
to resolve (plus it's not something we officially support - but there's a
clear need for improvement). Note that conda is also a cross-compiler (to
the same system), sometimes worth looking into how it deals with
(numpy.)distutils issues.


> I encountered two challenges:
>
> 1. Python distutils did not allow me to provide a proper cross-ranlib
> program path. I opened an issue for this on the Python bug tracker [2].
>

That seems like a straightforward enough patch. distutils isn't
well-maintained but hopefully that gets merged soon. If it doesn't get
responses in a couple of weeks, please feel free to ping me and I can
review/test (I'm not a core Python dev, but it may help push it forwards).


>
> 2. numpy distutils scripts check sys.platform in many places.
> sys.platform returns the platform on which compilation occurs (darwin in
> my case) which in case of cross-compilation is not the one on which the
> code will be run (linux). This of course results in invalid compiler and
> linker flags.
>
> I made a quick'n'dirty fix [3] and got numpy to compile and run
> correctly (but I have yet to run the full test suite). Of course this is
> not a proper way to solve this so I was hoping to get some feedback on
> the preferred/best way. I did not find any info about an official way to
> do this with distutils.
>
> One idea (from @commodo on GitHub) would be to just change my hardcoded
> string ("Linux") to something like this:
>
> target_platform = os.getenviron(“TARGET_PLATFORM”, sys.platform)
>

That seems reasonable enough. Prefixing that name with NPY_ would be good,
to not get accidental clashes.

I'm not sure if there's a more standard/preferred way, I haven't come
across it in distutils. There's some issues with reasonably detailed
discussion for SciPy - this one may be useful:
https://github.com/scipy/scipy/issues/8571


> It could also be further refactored by moving it to a single place but
> while certainly more elegant and "proper" it may ultimately make it less
> readable and harder to follow. I am also unsure where would be the best
> place to put it and how to pass it around to other modules.
>

Keeping all platform comparisons where they are now seems right. Just need
one central place to parse NPY_TARGET_PLATFORM - perhaps in
numpy/distutils/misc_util.py

Cheers,
Ralf


> [1]: https://github.com/openwrt/packages/pull/9797
> [2]: https://bugs.python.org/issue37916
> [3]:
>
> https://github.com/openwrt/packages/pull/9797/commits/e701e122fb9c78d5cecffb88c1d750178a239083#diff-1ea8d839590bcdc406854d3998a96704
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to