Skip to content
Snippets Groups Projects
Commit d479d0a1 authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Add support for building 64-bit binaries using mingw32-w64

parent 304b65c5
No related branches found
No related tags found
1 merge request!455Update branch with changes from master
......@@ -51,13 +51,22 @@ include:
has_gtk: "yes"
- local: '.gitlab-ci-unix.yml'
inputs:
os: 'mingw32-w64'
os: 'mingw-w64'
platform: 'x86'
tagname: 'FreeBSD'
cross_platform: 'yes'
build_flags: 'AR=/home/admin/mingw-w32/bin/i686-w64-mingw32-ar AS=/home/admin/mingw-w32/bin/i686-w64-mingw32-as CC=/home/admin/mingw-w32/bin/i686-w64-mingw32-gcc CXX=/home/admin/mingw-w32/bin/i686-w64-mingw32-g++ RANLIB=/home/admin/mingw-w32/bin/i686-w64-mingw32-ranlib WINDRES=/home/admin/mingw-w32/bin/i686-w64-mingw32-windres RELEASE=1'
no_javascript: 'yes'
has_curses: 'no'
- local: '.gitlab-ci-unix.yml'
inputs:
os: 'mingw-w64'
platform: 'x64'
tagname: 'FreeBSD'
cross_platform: 'yes'
build_flags: 'AR=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-ar AS=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-as CC=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-gcc CXX=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-g++ RANLIB=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-ranlib WINDRES=/home/admin/mingw-w64/bin/x86_64-w64-mingw32-windres RELEASE=1'
no_javascript: 'yes'
has_curses: 'no'
smoketest-jsexec-linux:
tags: [Linux]
......
......@@ -90,7 +90,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR)
$(CRYPT_IDIR): | $(3RDPODIR)
$(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR)
$(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test-select.patch $(3RDP_ROOT)/build/cl-terminal-params.patch $(3RDP_ROOT)/build/cl-mingw32-static.patch $(3RDP_ROOT)/build/cl-ranlib.patch $(3RDP_ROOT)/build/cl-win32-noasm.patch $(3RDP_ROOT)/build/cl-zz-country.patch $(3RDP_ROOT)/build/cl-algorithms.patch $(3RDP_ROOT)/build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)/build/cl-macosx-minver.patch $(3RDP_ROOT)/build/cl-posix-me-gently.patch $(3RDP_ROOT)/build/cl-PAM-noprompts.patch $(3RDP_ROOT)/build/cl-zlib.patch $(3RDP_ROOT)/build/cl-Dynamic-linked-static-lib.patch $(3RDP_ROOT)/build/cl-SSL-fix.patch $(3RDP_ROOT)/build/cl-bigger-maxattribute.patch $(3RDP_ROOT)/build/cl-endian.patch $(3RDP_ROOT)/build/cl-vcxproj.patch $(3RDP_ROOT)/build/cl-mingw-vcver.patch $(3RDP_ROOT)/build/cl-win32-build-fix.patch $(3RDP_ROOT)/build/cl-no-odbc.patch $(3RDP_ROOT)/build/cl-noasm-defines.patch $(3RDP_ROOT)/build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)/build/cl-prefer-ECC.patch $(3RDP_ROOT)/build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)/build/cl-clear-GCM-flag.patch $(3RDP_ROOT)/build/cl-use-ssh-ctr.patch $(3RDP_ROOT)/build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)/build/cl-no-tpm.patch $(3RDP_ROOT)/build/cl-no-via-aes.patch $(3RDP_ROOT)/build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)/build/cl-just-use-cc.patch $(3RDP_ROOT)/build/cl-no-safe-stack.patch $(3RDP_ROOT)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)/build/cl-openbsd-threads.patch $(3RDP_ROOT)/build/cl-allow-none-auth.patch $(3RDP_ROOT)/build/cl-mingw-add-m32.patch $(3RDP_ROOT)/build/cl-poll-not-select.patch $(3RDP_ROOT)/build/cl-good-sockets.patch $(3RDP_ROOT)/build/cl-moar-objects.patch $(3RDP_ROOT)/build/cl-server-term-support.patch $(3RDP_ROOT)/build/cl-add-pubkey-attribute.patch $(3RDP_ROOT)/build/cl-allow-ssh-auth-retries.patch $(3RDP_ROOT)/build/cl-fix-ssh-channel-close.patch $(3RDP_ROOT)/build/cl-vt-lt-2005-always-defined.patch $(3RDP_ROOT)/build/cl-no-pie.patch $(3RDP_ROOT)/build/cl-no-testobjs.patch $(3RDP_ROOT)/build/cl-win32-lean-and-mean.patch $(3RDP_ROOT)/build/cl-thats-not-asm.patch $(3RDP_ROOT)/build/cl-make-channels-work.patch $(3RDP_ROOT)/build/cl-allow-ssh-2.0-go.patch $(3RDP_ROOT)/build/cl-read-timeout-every-time.patch $(3RDP_ROOT)/build/cl-allow-servercheck-pubkeys.patch $(3RDP_ROOT)/build/cl-pass-after-pubkey.patch $(3RDP_ROOT)/build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)/build/cl-double-delete-fine-on-close.patch $(3RDP_ROOT)/build/cl-handle-unsupported-pubkey.patch $(3RDP_ROOT)/build/cl-add-patches-info.patch $(3RDP_ROOT)/build/cl-netbsd-hmac-symbol.patch $(3RDP_ROOT)/build/cl-netbsd-no-getfsstat.patch GNUmakefile $(3RDP_ROOT)/build/cl-remove-march.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
$(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test-select.patch $(3RDP_ROOT)/build/cl-terminal-params.patch $(3RDP_ROOT)/build/cl-mingw32-static.patch $(3RDP_ROOT)/build/cl-ranlib.patch $(3RDP_ROOT)/build/cl-win32-noasm.patch $(3RDP_ROOT)/build/cl-zz-country.patch $(3RDP_ROOT)/build/cl-algorithms.patch $(3RDP_ROOT)/build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)/build/cl-macosx-minver.patch $(3RDP_ROOT)/build/cl-posix-me-gently.patch $(3RDP_ROOT)/build/cl-PAM-noprompts.patch $(3RDP_ROOT)/build/cl-zlib.patch $(3RDP_ROOT)/build/cl-Dynamic-linked-static-lib.patch $(3RDP_ROOT)/build/cl-SSL-fix.patch $(3RDP_ROOT)/build/cl-bigger-maxattribute.patch $(3RDP_ROOT)/build/cl-endian.patch $(3RDP_ROOT)/build/cl-vcxproj.patch $(3RDP_ROOT)/build/cl-mingw-vcver.patch $(3RDP_ROOT)/build/cl-win32-build-fix.patch $(3RDP_ROOT)/build/cl-no-odbc.patch $(3RDP_ROOT)/build/cl-noasm-defines.patch $(3RDP_ROOT)/build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)/build/cl-prefer-ECC.patch $(3RDP_ROOT)/build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)/build/cl-clear-GCM-flag.patch $(3RDP_ROOT)/build/cl-use-ssh-ctr.patch $(3RDP_ROOT)/build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)/build/cl-no-tpm.patch $(3RDP_ROOT)/build/cl-no-via-aes.patch $(3RDP_ROOT)/build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)/build/cl-just-use-cc.patch $(3RDP_ROOT)/build/cl-no-safe-stack.patch $(3RDP_ROOT)/build/cl-allow-pkcs12.patch $(3RDP_ROOT)/build/cl-openbsd-threads.patch $(3RDP_ROOT)/build/cl-allow-none-auth.patch $(3RDP_ROOT)/build/cl-mingw-add-m32.patch $(3RDP_ROOT)/build/cl-poll-not-select.patch $(3RDP_ROOT)/build/cl-good-sockets.patch $(3RDP_ROOT)/build/cl-moar-objects.patch $(3RDP_ROOT)/build/cl-server-term-support.patch $(3RDP_ROOT)/build/cl-add-pubkey-attribute.patch $(3RDP_ROOT)/build/cl-allow-ssh-auth-retries.patch $(3RDP_ROOT)/build/cl-fix-ssh-channel-close.patch $(3RDP_ROOT)/build/cl-vt-lt-2005-always-defined.patch $(3RDP_ROOT)/build/cl-no-pie.patch $(3RDP_ROOT)/build/cl-no-testobjs.patch $(3RDP_ROOT)/build/cl-win32-lean-and-mean.patch $(3RDP_ROOT)/build/cl-thats-not-asm.patch $(3RDP_ROOT)/build/cl-make-channels-work.patch $(3RDP_ROOT)/build/cl-allow-ssh-2.0-go.patch $(3RDP_ROOT)/build/cl-read-timeout-every-time.patch $(3RDP_ROOT)/build/cl-allow-servercheck-pubkeys.patch $(3RDP_ROOT)/build/cl-pass-after-pubkey.patch $(3RDP_ROOT)/build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)/build/cl-double-delete-fine-on-close.patch $(3RDP_ROOT)/build/cl-handle-unsupported-pubkey.patch $(3RDP_ROOT)/build/cl-add-patches-info.patch $(3RDP_ROOT)/build/cl-netbsd-hmac-symbol.patch $(3RDP_ROOT)/build/cl-netbsd-no-getfsstat.patch GNUmakefile $(3RDP_ROOT)/build/cl-remove-march.patch $(3RDP_ROOT)/build/cl-add-win64.patch $(3RDP_ROOT)/build/cl-fix-mb-w-conv-warnings.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
@echo Creating $@ ...
$(QUIET)-rm -rf $(CRYPT_SRC)/*
$(QUIET)unzip -oa $(3RDPDISTDIR)/cryptlib.zip -d $(CRYPT_SRC)
......@@ -155,17 +155,26 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)/dist/cryptlib.zip $(3RDP_ROOT)/build/cl-fix-test
$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-add-patches-info.patch
$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-netbsd-hmac-symbol.patch
$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-netbsd-no-getfsstat.patch
$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-add-win64.patch
$(QUIET)patch -b -p0 -d $(CRYPT_SRC) < cl-fix-mb-w-conv-warnings.patch
$(QUIET)perl -pi.bak -e 's/^(#define CRYPTLIB_VERSION.*)$$/"$$1\n#define CRYPTLIB_PATCHES \"" . (chomp($$val = `cat cl-*.patch | if (which md5sum > \/dev\/null 2>&1); then md5sum; else md5; fi`), $$val) . "\""/e' $(CRYPT_SRC)/cryptlib.h
ifeq ($(os),win32)
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make MINGW32_NT-6.1 OSNAME=win32
else
ifeq ($(os),win64)
$(QUIET)cd $(CRYPT_SRC) && ln -s win32.c random/win64.c
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make MINGW64_NT-6.1 OSNAME=win64
else
ifdef MINGW32
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make target-mingw
else
$(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make
endif
endif
endif
$(QUIET)cp $(CRYPT_SRC)/libcl.a $(CRYPT_IDIR)
$(QUIET)cp $(CRYPT_SRC)/cryptlib.h $(CRYPT_IDIR)
--- makefile.orig 2024-02-20 20:08:15.914584000 -0500
+++ makefile 2024-02-20 20:09:10.012487000 -0500
@@ -2140,6 +2140,15 @@
$(MAKE) OSNAME=win32 $(DEFINES) EXTRAOBJS="$(WIN32ASMOBJS)" \
CFLAGS="$(XCFLAGS) -O2 -m32 -Wl,--subsystem,windows,--output-def,cl32.def -DSTATIC_LIB"
+MINGW64_NT-5.1:
+ $(MAKE) OSNAME=win64 target-init
+ $(MAKE) $(DEFINES) CFLAGS="$(XCFLAGS) -O2 -m64"
+
+MINGW64_NT-6.1:
+ $(MAKE) OSNAME=win64 target-init
+ $(MAKE) OSNAME=win64 $(DEFINES) EXTRAOBJS="$(WIN32ASMOBJS)" \
+ CFLAGS="$(XCFLAGS) -O2 -m64 -Wl,--subsystem,windows,--output-def,cl32.def -DSTATIC_LIB"
+
# NCR MP-RAS: Use the NCR cc. The "-DNCR_UST" is needed to enable threading
# (User-Space Threads).
--- misc/os_spec.h.orig 2024-02-20 21:13:23.001994000 -0500
+++ misc/os_spec.h 2024-02-20 21:15:43.649318000 -0500
@@ -1164,10 +1164,12 @@
#endif /* OpenBSD safe string functions */
/* Widechar functions */
+#if (!defined(__GNUC__)) || (__GNUC__ < 5)
int mbstowcs_s( size_t *retval, wchar_t *dst, size_t dstmax,
const char *src, size_t len );
int wcstombs_s( size_t *retval, char *dst, size_t dstmax,
const wchar_t *src, size_t len );
+#endif
#if defined( USE_EMBEDDED_OS )
/* Support for the thread-safe mbtowc() is practially nonexistent in
embedded OSes, but in any case is unlikely to be necessary since
--- misc/int_string.c.orig 2024-02-20 21:26:17.818569000 -0500
+++ misc/int_string.c 2024-02-20 21:27:13.057203000 -0500
@@ -475,6 +475,7 @@
****************************************************************************/
#ifndef __STDC_LIB_EXT1__
+#if (!defined(__GNUC__)) || (__GNUC__ < 5)
/* Minimal wrappers for the TR 24731 functions to map them to older stdlib
equivalents. Because of potential issues when comparing a (signed)
@@ -532,6 +533,7 @@
*retval = bytesCopied;
return( 0 );
}
+#endif
#endif /* !__STDC_LIB_EXT1__ */
/****************************************************************************
......@@ -217,14 +217,26 @@ BUILDPATH ?= $(BUILD)
gcc_machine := $(findstring mingw32,$(shell ${CC} -dumpmachine))
gcc_w64 := $(findstring w64,$(shell ${CC} -dumpmachine))
gcc_x86_64 := $(findstring x86_64,$(shell ${CC} -dumpmachine))
ifeq ($(gcc_machine),mingw32)
CFLAGS += -DMSVCRT_VERSION=0x0800
ifeq ($(gcc_x86_64),x86_64)
os := Win64
win := 64
CFLAGS += -m64
LDFLAGS += -m64
machine_uname := x64
else
os := Win32
CFLAGS += -DMSVCRT_VERSION=0x0800 -m32
win := 32
CFLAGS += -m32
LDFLAGS += -m32
WINDRESFLAGS += -Fpe-i386
machine_uname := x86
endif
ifeq ($(gcc_w64),w64)
CFLAGS += -DDISABLE_MKSTEMP_DEFINE
endif
LDFLAGS+= -m32
WINDRESFLAGS+= -Fpe-i386
endif
# Get OS
......@@ -233,14 +245,14 @@ ifndef os
endif
os := $(shell echo $(os) | tr '[A-Z]' '[a-z]' | tr ' ' '_')
ifneq ($(os),win32)
ifndef win
ifneq ($(os),darwin)
CFLAGS += -DPREFER_POLL
endif
endif
machine_uname := $(shell if uname -m | egrep -v "(i[3456789]*|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
machine_uname := $(shell if uname -m | egrep "64" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; else echo $(machine_uname) ; fi)
endif
ifeq ($(os),darwin)
ifeq ("$(machine_uname)","")
ifeq ($(shell sysctl hw.optional.x86_64),hw.optional.x86_64: 1)
......@@ -252,7 +264,7 @@ endif
ifeq ($(machine_uname),x86_64)
machine_uname := x64
endif
ifneq ($(os), win32)
ifndef win
CFLAGS += -fpic
endif
ifeq ($(machine_uname),sparc64)
......@@ -313,7 +325,7 @@ endif
LIBPREFIX := lib
DIRSEP := /
OFILE := .o
ifeq ($(os),win32)
ifdef win
EXEFILE := .exe
else
ifeq ($(os),emscripten)
......@@ -406,7 +418,7 @@ else
# This makes ctime_r() be the correct one.
#CFLAGS += -D_POSIX_PTHREAD_SEMANTICS
else
ifeq ($(os),win32) # Windows
ifdef win # Windows
CFLAGS += -U__STRICT_ANSI__ -D_WIN32 -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -D_WIN32_IE=0x0500
MT_CFLAGS += -D_WIN32
else
......
......@@ -20,11 +20,11 @@ endif
ifeq ($(os),openbsd)
CFLAGS += -DHAVE_VASPRINTF
endif
ifeq ($(os),win32)
ifdef win
CFLAGS += -I${3RDP_ROOT}/win32.release/sdl2/include
endif
ifneq ($(os),win32)
ifndef win
ifeq ($(shell pkg-config ncursesw --exists && echo YES), YES)
CIOLIB-MT_LIBS += $(shell pkg-config ncursesw --libs)
CIOLIB-MT_CFLAGS += $(shell pkg-config ncursesw --cflags)
......@@ -165,7 +165,7 @@ ifdef WITH_SDL
CIOLIB_CFLAGS += -I${SDL_FRAMEWORK_PATH}/SDL2.framework/Headers
CIOLIB_LIBS += -F${SDL_FRAMEWORK_PATH} -framework SDL2 -I${SDL_FRAMEWORK_PATH}/SDL2.framework/Headers
else
ifeq ($(os),win32)
ifdef win
CIOLIB-MT_CFLAGS += -DWITH_SDL
WITH_SDL := 1
CIOLIB_CFLAGS += -DWITH_SDL
......
......@@ -5,7 +5,7 @@ include $(SRC_ROOT)/build/Common.gmake # defines clean and output directory rule
CFLAGS += $(XPDEV-MT_CFLAGS) $(HASH_CFLAGS) $(ENCODE_CFLAGS) $(CIOLIB-MT_CFLAGS)
VPATH = $(SRCODIR)
ifeq ($(os),win32)
ifdef win
ifndef WITHOUT_GDI
OBJS += $(MTOBJODIR)$(DIRSEP)win32gdi$(OFILE)
NEED_BITMAP := 1
......@@ -59,7 +59,7 @@ $(CIOLIB-MT_SHLIB_BUILD): $(MTOBJODIR) $(OBJS)
@echo Creating $@
$(QUIET)$(MKSHLIB) $(LDFLAGS) $(OBJS) $(SHLIBOPTS) -o $@
ifeq ($(os),win32)
ifdef win
mtlib: $(MTOBJODIR)$(DIRSEP)ciolib_res${OFILE}
dl-mtlib: $(MTOBJODIR)$(DIRSEP)ciolib_res${OFILE}
......
......@@ -70,7 +70,7 @@ else
endif
INSTALL_DATA ?= install -m 0644
ifeq ($(os),win32)
ifdef win
OBJS += $(MTOBJODIR)$(DIRSEP)comio_win32$(OFILE) \
$(MTOBJODIR)$(DIRSEP)modem$(OFILE) \
$(MTOBJODIR)$(DIRSEP)comio$(OFILE) \
......@@ -88,7 +88,7 @@ ifndef bcc
ifneq ($(os),sunos)
ifneq ($(os),darwin)
ifneq ($(os),haiku)
ifneq ($(os),win32)
ifndef win
EXTRA_LIBS += -lutil
endif
endif
......@@ -96,7 +96,7 @@ ifndef bcc
endif
endif
ifeq ($(os),win32)
ifdef win
EXTRA_LIBS += -luuid
endif
......@@ -202,7 +202,7 @@ syncterm-clean:
clean: syncterm-clean
ifeq ($(os),win32)
ifdef win
$(MTOBJODIR)$(DIRSEP)syncterm_res${OFILE}: syncterm.rc
@echo Creating $< ...
$(QUIET)${WINDRES} $(WINDRESFLAGS) -O coff -i syncterm.rc -o $@
......
......@@ -28,11 +28,11 @@ endif
ifeq ($(os),linux) # Linux
XPDEV-MT_LIBS += -lpthread
endif
ifeq ($(os),win32) # MinGW32
ifdef win # MinGW32
XPDEV_LIBS += -lws2_32 -lwinmm -lnetapi32 -liphlpapi
XPDEV-MT_LIBS += -lws2_32 -lwinmm -lnetapi32 -liphlpapi
endif
ifneq ($(os),win32)
ifndef win
ifeq ($(shell if [ -c /dev/urandom ] ; then echo YES ; fi),YES)
XPDEV-MT_CFLAGS += -DHAS_DEV_URANDOM -DURANDOM_DEV=\"/dev/urandom\"
XPDEV_CFLAGS += -DHAS_DEV_URANDOM -DURANDOM_DEV=\"/dev/urandom\"
......
......@@ -4,7 +4,7 @@ include $(SRC_ROOT)/build/Common.gmake
ifdef XP_SEM
MTOBJS += $(MTOBJODIR)$(DIRSEP)xpsem$(OFILE)
endif
ifneq ($(os),win32)
ifndef win
MTOBJS += $(MTOBJODIR)$(DIRSEP)xpevent$(OFILE)
endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment