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:
stijn 2015-11-20 15:59:06 +01:00 committed by Paul Sokolovsky
parent a58fa27c24
commit 3baf6b5319
5 changed files with 24 additions and 3 deletions

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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):

View File

@ -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;