diff --git a/py/mpconfig.h b/py/mpconfig.h index d3a57dda4a..1453560e08 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -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 +#define UINT_FMT "%"PRIu64 +#define INT_FMT "%"PRId64 #else // Archs where mp_int_t == int #define UINT_FMT "%u" diff --git a/py/mpz.h b/py/mpz.h index b2dd88acf9..63ac772ffd 100644 --- a/py/mpz.h +++ b/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 diff --git a/windows/Makefile b/windows/Makefile index ca3c08c1fb..10c5f2ba7f 100644 --- a/windows/Makefile +++ b/windows/Makefile @@ -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 diff --git a/windows/README b/windows/README index e9ccc33f58..ca26c46293 100644 --- a/windows/README +++ b/windows/README @@ -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): diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h index fe13a68763..4b13fedad2 100644 --- a/windows/mpconfigport.h +++ b/windows/mpconfigport.h @@ -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 +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;