windows/py: Support 64bit mingw-w64 builds
- add mp_int_t/mp_uint_t typedefs in mpconfigport.h - fix integer suffixes/formatting in mpconfig.h and mpz.h - use MICROPY_NLR_SETJMP=1 in Makefile since the current nlrx64.S implementation causes segfaults in gc_free() - update README
This commit is contained in:
parent
a58fa27c24
commit
3baf6b5319
|
@ -849,10 +849,14 @@ typedef double mp_float_t;
|
|||
|
||||
// printf format spec to use for mp_int_t and friends
|
||||
#ifndef INT_FMT
|
||||
#ifdef __LP64__
|
||||
#if defined(__LP64__)
|
||||
// Archs where mp_int_t == long, long != int
|
||||
#define UINT_FMT "%lu"
|
||||
#define INT_FMT "%ld"
|
||||
#elif defined(_WIN64)
|
||||
#include <inttypes.h>
|
||||
#define UINT_FMT "%"PRIu64
|
||||
#define INT_FMT "%"PRId64
|
||||
#else
|
||||
// Archs where mp_int_t == int
|
||||
#define UINT_FMT "%u"
|
||||
|
|
6
py/mpz.h
6
py/mpz.h
|
@ -73,7 +73,11 @@ typedef int8_t mpz_dbl_dig_signed_t;
|
|||
#endif
|
||||
|
||||
#ifdef _WIN64
|
||||
#define MPZ_LONG_1 1i64
|
||||
#ifdef __MINGW32__
|
||||
#define MPZ_LONG_1 1LL
|
||||
#else
|
||||
#define MPZ_LONG_1 1i64
|
||||
#endif
|
||||
#else
|
||||
#define MPZ_LONG_1 1L
|
||||
#endif
|
||||
|
|
|
@ -49,6 +49,10 @@ CFLAGS_MOD += -DMICROPY_USE_READLINE=2
|
|||
LDFLAGS_MOD += -lreadline
|
||||
endif
|
||||
|
||||
ifeq ($(CROSS_COMPILE),x86_64-w64-mingw32-)
|
||||
CFLAGS_MOD += -DMICROPY_NLR_SETJMP=1
|
||||
endif
|
||||
|
||||
LIB += -lws2_32
|
||||
|
||||
include ../py/mkrules.mk
|
||||
|
|
|
@ -20,11 +20,15 @@ make CROSS_COMPILE=i586-mingw32msvc-
|
|||
To compile under Cygwin:
|
||||
|
||||
Install following packages using cygwin's setup.exe:
|
||||
mingw64-i686-gcc-core, make
|
||||
mingw64-i686-gcc-core, mingw64-x86_64-gcc-core, make
|
||||
Build using:
|
||||
|
||||
make CROSS_COMPILE=i686-w64-mingw32-
|
||||
|
||||
or for 64bit:
|
||||
|
||||
make CROSS_COMPILE=x86_64-w64-mingw32-
|
||||
|
||||
|
||||
To compile using Visual Studio 2013 (or higher):
|
||||
|
||||
|
|
|
@ -108,6 +108,11 @@
|
|||
#if defined( __MINGW32__ ) && defined( __LP64__ )
|
||||
typedef long mp_int_t; // must be pointer size
|
||||
typedef unsigned long mp_uint_t; // must be pointer size
|
||||
#elif defined ( __MINGW32__ ) && defined( _WIN64 )
|
||||
#include <stdint.h>
|
||||
typedef __int64 mp_int_t;
|
||||
typedef unsigned __int64 mp_uint_t;
|
||||
#define MP_SSIZE_MAX __INT64_MAX__
|
||||
#elif defined ( _MSC_VER ) && defined( _WIN64 )
|
||||
typedef __int64 mp_int_t;
|
||||
typedef unsigned __int64 mp_uint_t;
|
||||
|
|
Loading…
Reference in New Issue