islpy
islpy copied to clipboard
Build on Windows
I'm trying to build this on Windows for Python 3.6, since I'd like to use Loopy in a project, where we ship packages to Mac, Linux & Win. I've started by trying to see if MSVC 14 could build ISL, but I'm becoming sceptical:
A few things I've done in isl/include/isl/ctx.h,
#define __attribute__(...)
and in isl/isl_arg.c:20 to
static struct isl_arg *help_arg;
Finally, I'm seeing at the end of the build
isl_hash.obj : error LNK2001: unresolved external symbol ffs
isl_stream.obj : error LNK2001: unresolved external symbol strcasecmp
build\lib.win-amd64-3.6\islpy\_isl_cffi.pyd : fatal error LNK1120: 2 unresolved externals
It looks like strcasecmp is a known one and ffs is a GCC builtin, so those can likely be mapped to Windows equivalents.
I'm worried that ignoring __attribute__ might hurt ISL correctness.
Another route would be to compile it all with GCC on MinGW 64, but I'm not sure how compatible this would be with the standard Python packages. Could that be used to produce wheels, etc?
edited to increase SNR
And a workaround for ffs from Cairo,
#include <intrin.h>
#pragma intrinsic(_BitScanForward)
static __forceinline int
ffs (int x)
{
unsigned long i;
if (_BitScanForward(&i, x) != 0)
return i + 1;
return 0;
}
With that sprinkled in a few places, the project builds, fwiw.
I'm trying to build this on Windows for Python 3.6, since I'd like to use Loopy in a project, where we ship packages to Mac, Linux & Win.
Awesome. I'd also like to update https://github.com/conda-forge/islpy-feedstock to include Win support then.
I'm worried that ignoring attribute might hurt ISL correctness.
I don't think there's a worry there.
FWIW, conda-forge now has Windows builds of islpy: https://anaconda.org/conda-forge/islpy