[Ecls-list] gmp bitness on 32bit msvc

red plait redplait at gmail.com
Sat Feb 18 14:16:48 UTC 2012


Hi
> I believe there is a simpler way to achieve this: just teaching ECL (not
> GMP) that there exist long long integers in Windows/32. Why not just change
> config.h.msvc6 to define ecl_uint64_t also for 32 bits?
It seems that I now able to build ECL with int64 numbers support
Patch:
*** msvc\ecl\config.h.msvc6.old Wed Feb 15 17:16:30 2012
--- msvc\ecl\config.h.msvc6     Sat Feb 18 17:49:26 2012
***************
*** 120,126 ****
  #define ecl_uint32_t unsigned int
  #define ecl_int32_t int

! #ifdef _WIN64
  # define ecl_uint64_t unsigned __int64
  # define ecl_int64_t __int64
  # define ecl_long_long_t long long
--- 120,126 ----
  #define ecl_uint32_t unsigned int
  #define ecl_int32_t int

! #if defined(_WIN64) || defined(BITS64)
  # define ecl_uint64_t unsigned __int64
  # define ecl_int64_t __int64
  # define ecl_long_long_t long long

*** msvc\Makefile.old	Wed Feb 15 16:01:44 2012
--- msvc\Makefile	Sat Feb 18 18:05:10 2012
***************
*** 60,65 ****
--- 60,68 ----
  # Profiling
  ECL_PROFILE =

+ # Bitness of numbers - set it to non-empty to build 64bit numbers on win32
+ ECL_64BITS = 1
+
  # <END> (ECL configuration)
  # =============================================================

***************
*** 91,97 ****
--- 94,106 ----
  ARCHITECTURE=AMD64
  VCREDIST=vcredist_x64.exe
  !else
+ !if "$(ECL_64BITS)" != ""
+ GMP_BITS=32
+ ECL_BITS64=/D BITS64
+ !else
  GMP_BITS=32
+ ECL_BITS64=
+ !endif
  GC_CPU=i386
  ARCHITECTURE=PENTIUM4
  VCREDIST=vcredist_x86.exe
***************
*** 102,114 ****
  #
  !if "$(ECL_DEBUG)" != ""
  CFLAGS_OPTIMIZE = /Od
! CFLAGS_CONFIG = /Zi /D_DEBUG /MDd $(CFLAGS_OPTIMIZE) $(CFLAGS_SSE)
  LDFLAGS_CONFIG = /debug /nodefaultlib:msvcrt.lib
  SHARED_LDFLAGS = /LDd
  GCFLAGS =
  !else
  CFLAGS_OPTIMIZE = /O2
! CFLAGS_CONFIG = /DNDEBUG /MD $(CFLAGS_OPTIMIZE) $(CFLAGS_SSE)
  LDFLAGS_CONFIG = /nodefaultlib:msvcrtd.lib
  SHARED_LDFLAGS = /LD
  GCFLAGS = nodebug=1
--- 111,123 ----
  #
  !if "$(ECL_DEBUG)" != ""
  CFLAGS_OPTIMIZE = /Od
! CFLAGS_CONFIG = /Zi /D_DEBUG /MDd $(CFLAGS_OPTIMIZE) $(CFLAGS_SSE)
$(ECL_BITS64)
  LDFLAGS_CONFIG = /debug /nodefaultlib:msvcrt.lib
  SHARED_LDFLAGS = /LDd
  GCFLAGS =
  !else
  CFLAGS_OPTIMIZE = /O2
! CFLAGS_CONFIG = /DNDEBUG /MD $(CFLAGS_OPTIMIZE) $(CFLAGS_SSE) $(ECL_BITS64)
  LDFLAGS_CONFIG = /nodefaultlib:msvcrtd.lib
  SHARED_LDFLAGS = /LD
  GCFLAGS = nodebug=1
***************
*** 352,358 ****
  eclgmp.lib:
  	cd gmp
  	$(MAKE) "MPN_TYPE=$(GMP_TYPE)" "CFLAGS_CONFIG=$(CFLAGS_CONFIG)" \
! 		"BITS=$(GMP_BITS)"
  	$(CP) gmp.lib ..\eclgmp.lib
  	$(CP) gmp.h ..\ecl\gmp.h
  	cd ..
--- 361,367 ----
  eclgmp.lib:
  	cd gmp
  	$(MAKE) "MPN_TYPE=$(GMP_TYPE)" "CFLAGS_CONFIG=$(CFLAGS_CONFIG)" \
! 		"BITS=$(GMP_BITS)" "BITS64=$(ECL_BITS64)"
  	$(CP) gmp.lib ..\eclgmp.lib
  	$(CP) gmp.h ..\ecl\gmp.h
  	cd ..

After building:
dumpbin /exports ecl.dll | grep int64
       1040  40F 000B44E0 ecl_make_int64_t
       1058  421 000B4470 ecl_make_uint64_t
       1176  497 000B4380 ecl_to_int64_t
       1182  49D 000B4270 ecl_to_uint64_t




More information about the ecl-devel mailing list