* Port to MinGW

This commit is contained in:
Tim Angus 2005-09-22 03:21:33 +00:00
parent 50eb77ed1a
commit fcaf343d7f
28 changed files with 347 additions and 64 deletions

View file

@ -30,6 +30,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/ *****************************************************************************/
#define Vector2Angles(v,a) vectoangles(v,a) #define Vector2Angles(v,a) vectoangles(v,a)
#ifndef MAX_PATH
#define MAX_PATH MAX_QPATH #define MAX_PATH MAX_QPATH
#endif
#define Maximum(x,y) (x > y ? x : y) #define Maximum(x,y) (x > y ? x : y)
#define Minimum(x,y) (x < y ? x : y) #define Minimum(x,y) (x < y ? x : y)

View file

@ -34,7 +34,7 @@ int* snd_p;
int snd_linear_count; int snd_linear_count;
short* snd_out; short* snd_out;
#if !( (defined __linux__ || defined __FreeBSD__ ) && (defined __i386__) ) // rb010123 #if !( (defined __linux__ || defined __FreeBSD__ || defined __MINGW32__ ) && (defined __i386__) ) // rb010123
#if !id386 #if !id386
void S_WriteLinearBlastStereo16 (void) void S_WriteLinearBlastStereo16 (void)

View file

@ -55,7 +55,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "inv.h" #include "inv.h"
#include "syn.h" #include "syn.h"
#ifndef MAX_PATH
#define MAX_PATH 144 #define MAX_PATH 144
#endif
//bot states //bot states

View file

@ -740,7 +740,7 @@ int BoxOnPlaneSide2 (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
================== ==================
*/ */
#if !( (defined __linux__ || __FreeBSD__) && (defined __i386__) && (!defined C_ONLY)) // rb010123 #if !( (defined __linux__ || __FreeBSD__ || __MINGW32__) && (defined __i386__) && (!defined C_ONLY)) // rb010123
#if defined __LCC__ || defined C_ONLY || !id386 || defined __VECTORC #if defined __LCC__ || defined C_ONLY || !id386 || defined __VECTORC

View file

@ -31,7 +31,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#define MAX_TEAMNAME 32 #define MAX_TEAMNAME 32
#ifdef _WIN32 #ifdef _MSC_VER
#pragma warning(disable : 4018) // signed/unsigned mismatch #pragma warning(disable : 4018) // signed/unsigned mismatch
#pragma warning(disable : 4032) #pragma warning(disable : 4032)
@ -90,7 +90,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#endif #endif
#ifdef _WIN32 #ifdef _MSC_VER
//#pragma intrinsic( memset, memcpy ) //#pragma intrinsic( memset, memcpy )
@ -134,6 +134,7 @@ float FloatSwap (const float *f);
#define QDECL __cdecl #define QDECL __cdecl
// buildstring will be incorporated into the version string // buildstring will be incorporated into the version string
#ifdef _MSC_VER
#ifdef NDEBUG #ifdef NDEBUG
#ifdef _M_IX86 #ifdef _M_IX86
#define CPUSTRING "win-x86" #define CPUSTRING "win-x86"
@ -147,14 +148,25 @@ float FloatSwap (const float *f);
#define CPUSTRING "win-AXP-debug" #define CPUSTRING "win-AXP-debug"
#endif #endif
#endif #endif
#elif defined __MINGW32__
#ifdef NDEBUG
#ifdef __i386__
#define CPUSTRING "mingw-x86"
#endif
#else
#ifdef __i386__
#define CPUSTRING "mingw-x86-debug"
#endif
#endif
#endif
#define ID_INLINE __inline #define ID_INLINE __inline
static ID_INLINE short BigShort( short l) { return ShortSwap(l); } static ID_INLINE short BigShort( short l) { return ShortSwap(l); }
#define LittleShort #define LittleShort
static ID_INLINE int BigLong(int l) { LongSwap(l); } static ID_INLINE int BigLong(int l) { return LongSwap(l); }
#define LittleLong #define LittleLong
static ID_INLINE float BigFloat(const float l) { FloatSwap(&l); } static ID_INLINE float BigFloat(const float l) { return FloatSwap(&l); }
#define LittleFloat #define LittleFloat
#define PATH_SEP '\\' #define PATH_SEP '\\'

View file

@ -15,7 +15,7 @@
*/ */
#ifdef _WIN32 #ifdef _MSC_VER
#pragma warning(disable : 4018) // signed/unsigned mismatch #pragma warning(disable : 4018) // signed/unsigned mismatch
#pragma warning(disable : 4032) #pragma warning(disable : 4032)

View file

@ -149,7 +149,9 @@ typedef unsigned short UINT16;
typedef unsigned int UINT16; typedef unsigned int UINT16;
#endif /* HAVE_UNSIGNED_SHORT */ #endif /* HAVE_UNSIGNED_SHORT */
#ifndef DONT_TYPEDEF_INT32
typedef long INT32; typedef long INT32;
#endif
/* INT16 must hold at least the values -32768..32767. */ /* INT16 must hold at least the values -32768..32767. */

View file

@ -2817,7 +2817,7 @@ void Com_Shutdown (void) {
} }
#if !( defined __VECTORC ) #if !( defined __VECTORC )
#if !( defined __linux__ || defined __FreeBSD__ ) // r010123 - include FreeBSD #if !( defined __linux__ || defined __FreeBSD__ || defined __MINGW32__ ) // r010123 - include FreeBSD
#if ((!id386) && (!defined __i386__)) // rcg010212 - for PPC #if ((!id386) && (!defined __i386__)) // rcg010212 - for PPC
void Com_Memcpy (void* dest, const void* src, const size_t count) void Com_Memcpy (void* dest, const void* src, const size_t count)

View file

@ -1,7 +1,7 @@
/* GLOBAL.H - RSAREF types and constants */ /* GLOBAL.H - RSAREF types and constants */
#include <string.h> #include <string.h>
#if defined(_WIN32) #ifdef _MSC_VER
#pragma warning(disable : 4711) // selected for automatic inline expansion #pragma warning(disable : 4711) // selected for automatic inline expansion
#endif #endif

View file

@ -858,7 +858,7 @@ void VM_LogSyscalls( int *args ) {
#ifdef oDLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM #ifdef DLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM
int VM_CallCompiled( vm_t *vm, int *args ) { int VM_CallCompiled( vm_t *vm, int *args ) {
return(0); return(0);
} }

View file

@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "vm_local.h" #include "vm_local.h"
//#define DEBUG_VM
#ifdef DEBUG_VM // bk001204 #ifdef DEBUG_VM // bk001204
static char *opnames[256] = { static char *opnames[256] = {
"OP_UNDEF", "OP_UNDEF",
@ -306,7 +307,6 @@ locals from sp
*/ */
#define MAX_STACK 256 #define MAX_STACK 256
#define STACK_MASK (MAX_STACK-1) #define STACK_MASK (MAX_STACK-1)
//#define DEBUG_VM
#define DEBUGSTR va("%s%i", VM_Indent(vm), opStack-stack ) #define DEBUGSTR va("%s%i", VM_Indent(vm), opStack-stack )

View file

@ -60,8 +60,13 @@ int _ftol( float );
static int ftolPtr = (int)_ftol; static int ftolPtr = (int)_ftol;
#endif #endif
#ifndef __MINGW32__
void AsmCall( void ); void AsmCall( void );
static int asmCallPtr = (int)AsmCall; static int asmCallPtr = (int)AsmCall;
#else
void doAsmCall( void );
static int asmCallPtr = (int)doAsmCall;
#endif
#else // _WIN32 #else // _WIN32
@ -105,7 +110,7 @@ static ELastCommand LastCommand;
AsmCall AsmCall
================= =================
*/ */
#ifdef _WIN32 #ifdef _MSC_VER
__declspec( naked ) void AsmCall( void ) { __declspec( naked ) void AsmCall( void ) {
int programStack; int programStack;
int *opStack; int *opStack;
@ -168,7 +173,7 @@ _asm {
} }
#else //!_WIN32 #else //!_MSC_VER
static int callProgramStack; static int callProgramStack;
static int *callOpStack; static int *callOpStack;
@ -185,13 +190,14 @@ void callAsmCall(void)
// save the stack to allow recursive VM entry // save the stack to allow recursive VM entry
currentVM->programStack = callProgramStack - 4; currentVM->programStack = callProgramStack - 4;
*(int *)((byte *)currentVM->dataBase + callProgramStack + 4) = callSyscallNum; *(int *)((byte *)currentVM->dataBase + callProgramStack + 4) = callSyscallNum;
//VM_LogSyscalls( (int *)((byte *)currentVM->dataBase + programStack + 4) ); //VM_LogSyscalls((int *)((byte *)currentVM->dataBase + callProgramStack + 4) );
*(callOpStack2+1) = currentVM->systemCall( (int *)((byte *)currentVM->dataBase + callProgramStack + 4) ); *(callOpStack2+1) = currentVM->systemCall( (int *)((byte *)currentVM->dataBase + callProgramStack + 4) );
currentVM = savedVM; currentVM = savedVM;
} }
void AsmCall( void ) { void AsmCall( void ) {
#ifndef __MINGW32__
__asm__("doAsmCall: \n\t" \ __asm__("doAsmCall: \n\t" \
" movl (%%edi),%%eax \n\t" \ " movl (%%edi),%%eax \n\t" \
" subl $4,%%edi \n\t" \ " subl $4,%%edi \n\t" \
@ -223,6 +229,42 @@ void AsmCall( void ) {
: "rm" (instructionPointers) \ : "rm" (instructionPointers) \
: "ax", "di", "si", "cx" \ : "ax", "di", "si", "cx" \
); );
#else
// The only difference is _ added to the C symbols. It seems mingw
// mangles all symbols this way, like linux gcc does when producing
// a.out instead of elf
__asm__("_doAsmCall: \n\t" \
" movl (%%edi),%%eax \n\t" \
" subl $4,%%edi \n\t" \
" orl %%eax,%%eax \n\t" \
" jl systemCall \n\t" \
" shll $2,%%eax \n\t" \
" addl %3,%%eax \n\t" \
" call *(%%eax) \n\t" \
" movl (%%edi),%%eax \n\t" \
" andl _callMask, %%eax \n\t" \
" jmp doret \n\t" \
"systemCall: \n\t" \
" negl %%eax \n\t" \
" decl %%eax \n\t" \
" movl %%eax,%0 \n\t" \
" movl %%esi,%1 \n\t" \
" movl %%edi,%2 \n\t" \
" pushl %%ecx \n\t" \
" pushl %%esi \n\t" \
" pushl %%edi \n\t" \
" call _callAsmCall \n\t" \
" popl %%edi \n\t" \
" popl %%esi \n\t" \
" popl %%ecx \n\t" \
" addl $4,%%edi \n\t" \
"doret: \n\t" \
" ret \n\t" \
: "=rm" (callSyscallNum), "=rm" (callProgramStack), "=rm" (callOpStack) \
: "rm" (instructionPointers) \
: "ax", "di", "si", "cx" \
);
#endif
} }
#endif #endif
@ -1140,7 +1182,7 @@ int VM_CallCompiled( vm_t *vm, int *args ) {
entryPoint = vm->codeBase; entryPoint = vm->codeBase;
opStack = &stack; opStack = &stack;
#ifdef _WIN32 #ifdef _MSC_VER
__asm { __asm {
pushad pushad
mov esi, programStack; mov esi, programStack;

View file

@ -32,12 +32,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#elif defined( _WIN32 ) #elif defined( _WIN32 )
#if _MSC_VER
#pragma warning (disable: 4201) #pragma warning (disable: 4201)
#pragma warning (disable: 4214) #pragma warning (disable: 4214)
#pragma warning (disable: 4514) #pragma warning (disable: 4514)
#pragma warning (disable: 4032) #pragma warning (disable: 4032)
#pragma warning (disable: 4201) #pragma warning (disable: 4201)
#pragma warning (disable: 4214) #pragma warning (disable: 4214)
#endif
#include <windows.h> #include <windows.h>
#include <gl/gl.h> #include <gl/gl.h>

View file

@ -311,12 +311,12 @@ typedef union {
float readFloat( void ) { float readFloat( void ) {
poor me; poor me;
#if __WORD_ORDER == __BIG_ENDIAN #if defined BigFloat
me.fred[0] = fdFile[fdOffset+3]; me.fred[0] = fdFile[fdOffset+3];
me.fred[1] = fdFile[fdOffset+2]; me.fred[1] = fdFile[fdOffset+2];
me.fred[2] = fdFile[fdOffset+1]; me.fred[2] = fdFile[fdOffset+1];
me.fred[3] = fdFile[fdOffset+0]; me.fred[3] = fdFile[fdOffset+0];
#else #elif defined LittleFloat
me.fred[0] = fdFile[fdOffset+0]; me.fred[0] = fdFile[fdOffset+0];
me.fred[1] = fdFile[fdOffset+1]; me.fred[1] = fdFile[fdOffset+1];
me.fred[2] = fdFile[fdOffset+2]; me.fred[2] = fdFile[fdOffset+2];

View file

@ -1025,10 +1025,14 @@ void RB_CalcRotateTexCoords( float degsPerSecond, float *st )
#if id386 && !( (defined __linux__ || defined __FreeBSD__ ) && (defined __i386__ ) ) // rb010123 #if id386 && !( (defined __linux__ || defined __FreeBSD__ ) && (defined __i386__ ) ) // rb010123
long myftol( float f ) { long myftol( float f ) {
#ifndef __MINGW32__
static int tmp; static int tmp;
__asm fld f __asm fld f
__asm fistp tmp __asm fistp tmp
__asm mov eax, tmp __asm mov eax, tmp
#else
return (long)f;
#endif
} }
#endif #endif

View file

@ -1,32 +1,38 @@
TODO: the Mac port seems stable, but outputs a bunch of warnings.. TODO: the Mac port seems stable, but outputs a bunch of warnings..
2005-09-?? 2005-09-22 Tim Angus <tim@ngus.net>
- SDL Stuff (icculus) + MinGW port
- x86_64 (ludwig von angstenheimer)
- patches from a casth of thousands
2004-05-22 2005-09-??
- updated the xcode project from Apple's version + SDL Stuff (icculus)
now with the latest vm_ppc code + x86_64 (ludwig von angstenheimer)
+ patches from a cast of thousands
2004-05-22 Timothee Besset <ttimo@idsoftware.com>
+ updated the xcode project from Apple's version
now with the latest vm_ppc code
2004-05-21 Timothee Besset <ttimo@idsoftware.com> 2004-05-21 Timothee Besset <ttimo@idsoftware.com>
- fixed the Linux build to compile again on sid (glext.h and gcc3 warnings) + fixed the Linux build to compile again on sid (glext.h and gcc3 warnings)
- 2 weeks ago, hacked up the source to compile on panther / xcode 1.1 + 2 weeks ago, hacked up the source to compile on panther / xcode 1.1
several cleanups were needed, and VM support seems broke (hangs or crashes) several cleanups were needed, and VM support seems broke (hangs or crashes)
- got altivec optimisations from Apple (Kenneth Dyke) + got altivec optimisations from Apple (Kenneth Dyke)
merged back in merged back in
- looks like with the new code merge the VM support is back in and working + looks like with the new code merge the VM support is back in and working
2003-09-15 Timothee Besset <ttimo@idsoftware.com> 2003-09-15 Timothee Besset <ttimo@idsoftware.com>
- import Q3 java master code, cleanups on monster + import Q3 java master code, cleanups on monster
2003-08-31 Timothee Besset <ttimo@idsoftware.com> 2003-08-31 Timothee Besset <ttimo@idsoftware.com>
+ loki_setup hell + loki_setup hell
https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=626 https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=626
http://zerowing.idsoftware.com/linux/q3a/index.html#glibc http://zerowing.idsoftware.com/linux/q3a/index.html#glibc
text mode installer in loki_setup image built on Mandrake 7.2 crashes on some glibc 2.3 systems such as RH9 etc. text mode installer in loki_setup image built on Mandrake 7.2 crashes on
need to move to a different version of the installer, and update old installers to keep them still 'installing' some glibc 2.3 systems such as RH9 etc. need to move to a different
moving to build the setup binaries on Debian Woody systems (glibc 2.2, text mode installer will no longer work on 2.1 systems) version of the installer, and update old installers to keep them still
hacked together a new setup, using setup tree from RTCW. would need a complete revamp if a new full setup with new binaries is needed 'installing' moving to build the setup binaries on Debian Woody systems
(glibc 2.2, text mode installer will no longer work on 2.1 systems) hacked
together a new setup, using setup tree from RTCW. would need a complete
revamp if a new full setup with new binaries is needed
2003-07-17 Timothee Besset <ttimo@idsoftware.com> 2003-07-17 Timothee Besset <ttimo@idsoftware.com>
+ new cvsreport, testing per-module config + new cvsreport, testing per-module config

View file

@ -17,7 +17,7 @@
# GNU Make required # GNU Make required
# #
PLATFORM=$(shell uname|tr A-Z a-z) PLATFORM=$(shell uname|sed -e s/_.*//|tr A-Z a-z)
PLATFORM_RELEASE=$(shell uname -r) PLATFORM_RELEASE=$(shell uname -r)
ARCH:=$(shell uname -m | sed -e s/i.86/i386/) ARCH:=$(shell uname -m | sed -e s/i.86/i386/)
ifndef COPYDIR ifndef COPYDIR
@ -42,6 +42,9 @@ BUILD_NAME=quake3
BUILD_FREETYPE=0 BUILD_FREETYPE=0
# Used for building with mingw
DXSDK_DIR=C:/DXSDK
############################################################################# #############################################################################
## ##
## You shouldn't have to touch anything below here ## You shouldn't have to touch anything below here
@ -55,6 +58,7 @@ SDIR=$(MOUNT_DIR)/server
RDIR=$(MOUNT_DIR)/renderer RDIR=$(MOUNT_DIR)/renderer
CMDIR=$(MOUNT_DIR)/qcommon CMDIR=$(MOUNT_DIR)/qcommon
UDIR=$(MOUNT_DIR)/unix UDIR=$(MOUNT_DIR)/unix
W32DIR=$(MOUNT_DIR)/win32
GDIR=$(MOUNT_DIR)/game GDIR=$(MOUNT_DIR)/game
CGDIR=$(MOUNT_DIR)/cgame CGDIR=$(MOUNT_DIR)/cgame
BAIDIR=$(GDIR) BAIDIR=$(GDIR)
@ -209,6 +213,84 @@ ifeq ($(PLATFORM),linux)
else # ifeq Linux else # ifeq Linux
#############################################################################
# SETUP AND BUILD -- MINGW32
#############################################################################
ifeq ($(PLATFORM),mingw32)
GLIBC=-mingw
CC=gcc
CXX=g++
WINDRES=windres
ifeq ($(ARCH),i386)
ARCH=x86
endif
RPMARCH=$(ARCH)
BASE_CFLAGS = -pipe -Wall -Wimplicit -Wstrict-prototypes
ifeq ($(strip $(DLL_ONLY)),true)
BASE_CFLAGS += -DDLL_ONLY
endif
DX_CFLAGS = -I$(DXSDK_DIR)/Include
GL_CFLAGS =
MINGW_CFLAGS = -DDONT_TYPEDEF_INT32
OPTIMIZE = -O3 -march=i686 -fomit-frame-pointer -ffast-math -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -fstrength-reduce
BASE_CFLAGS += -DHAVE_VM_NATIVE -DHAVE_VM_COMPILED
DEBUG_CFLAGS=$(BASE_CFLAGS) -g -O0
RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG $(OPTIMIZE)
LIBEXT=lib
SHLIBEXT=dll
SHLIBCFLAGS=
SHLIBLDFLAGS=-shared $(LDFLAGS)
AR=ar
ARFLAGS=rv
RANLIB=ranlib
THREAD_LDFLAGS=-lpthread
LDFLAGS= -mwindows -lwsock32 -lgdi32 -lwinmm -lole32
GLLDFLAGS=
ifeq ($(BUILD_FREETYPE),1)
RELEASE_CFLAGS += $(shell pkg-config --cflags freetype2) -DBUILD_FREETYPE
DEBUG_CFLAGS += $(shell pkg-config --cflags freetype2) -DBUILD_FREETYPE
LDFLAGS += $(shell pkg-config --libs freetype2)
endif
ifeq ($(ARCH),x86)
# build 32bit
BASE_CFLAGS += -m32
LDFLAGS+=-m32
endif
TARGETS=\
$(B)/$(PLATFORM)quake3 \
$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) \
$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) \
$(B)/baseq3/ui$(ARCH).$(SHLIBEXT) \
$(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) \
$(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) \
$(B)/missionpack/ui$(ARCH).$(SHLIBEXT)
# $(B)/baseq3/vm/qagame.qvm \
# $(B)/baseq3/vm/cgame.qvm \
# $(B)/baseq3/vm/ui.qvm \
# $(B)/missionpack/vm/qagame.qvm \
# $(B)/missionpack/vm/cgame.qvm \
# $(B)/missionpack/vm/ui.qvm
else # ifeq mingw32
############################################################################# #############################################################################
# SETUP AND BUILD -- FREEBSD # SETUP AND BUILD -- FREEBSD
############################################################################# #############################################################################
@ -334,6 +416,7 @@ TARGETS=\
$(B)/$(PLATFORM)q3ded $(B)/$(PLATFORM)q3ded
endif #Linux endif #Linux
endif #mingw32
endif #FreeBSD endif #FreeBSD
endif #IRIX endif #IRIX
@ -351,6 +434,7 @@ DO_SHLIB_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $< DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $<
DO_NASM=nasm -f elf -o $@ $< DO_NASM=nasm -f elf -o $@ $<
DO_DED_CC=$(CC) -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $< DO_DED_CC=$(CC) -DDEDICATED -DC_ONLY $(CFLAGS) -o $@ -c $<
DO_WINDRES=$(WINDRES) -i $< -o $@
#DO_LCC=$(LCC) -o $@ -S -Wf-target=bytecode -Wf-g -DQ3_VM -I$(CGDIR) -I$(GDIR) -I$(UIDIR) $< #DO_LCC=$(LCC) -o $@ -S -Wf-target=bytecode -Wf-g -DQ3_VM -I$(CGDIR) -I$(GDIR) -I$(UIDIR) $<
@ -532,15 +616,16 @@ Q3OBJ = \
$(B)/client/tr_sky.o \ $(B)/client/tr_sky.o \
$(B)/client/tr_surface.o \ $(B)/client/tr_surface.o \
$(B)/client/tr_world.o \ $(B)/client/tr_world.o \
\
$(B)/client/unix_main.o \
$(B)/client/unix_net.o \
$(B)/client/unix_shared.o \
ifeq ($(ARCH),i386) ifeq ($(ARCH),i386)
Q3OBJ += $(B)/client/vm_x86.o Q3OBJ += $(B)/client/vm_x86.o
endif endif
ifeq ($(ARCH),x86)
Q3OBJ += $(B)/client/vm_x86.o
endif
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
Q3OBJ += $(B)/client/vm_none.o Q3OBJ += $(B)/client/vm_none.o
endif endif
@ -556,6 +641,9 @@ Q3OBJ = \
#platform specific objects #platform specific objects
ifeq ($(PLATFORM),freebsd) ifeq ($(PLATFORM),freebsd)
Q3POBJ=\ Q3POBJ=\
$(B)/client/unix_main.o \
$(B)/client/unix_net.o \
$(B)/client/unix_shared.o \
$(B)/client/linux_signals.o \ $(B)/client/linux_signals.o \
$(B)/client/linux_common.o \ $(B)/client/linux_common.o \
$(B)/client/linux_qgl.o \ $(B)/client/linux_qgl.o \
@ -570,15 +658,38 @@ ifeq ($(PLATFORM),freebsd)
else else
ifeq ($(PLATFORM),irix) ifeq ($(PLATFORM),irix)
Q3POBJ=\ Q3POBJ=\
$(B)/client/unix_main.o \
$(B)/client/unix_net.o \
$(B)/client/unix_shared.o \
$(B)/client/irix_qgl.o \ $(B)/client/irix_qgl.o \
$(B)/client/irix_glimp.o \ $(B)/client/irix_glimp.o \
$(B)/client/irix_snd.o $(B)/client/irix_snd.o
else else
ifeq ($(PLATFORM),mingw32)
Q3POBJ=\
$(B)/client/linux_common.o \
$(B)/client/snd_mixa.o \
$(B)/client/matha.o \
$(B)/client/win_gamma.o \
$(B)/client/win_glimp.o \
$(B)/client/win_input.o \
$(B)/client/win_main.o \
$(B)/client/win_net.o \
$(B)/client/win_qgl.o \
$(B)/client/win_shared.o \
$(B)/client/win_snd.o \
$(B)/client/win_syscon.o \
$(B)/client/win_wndproc.o \
$(B)/client/win_resource.o
else
ifeq ($(PLATFORM),linux) ifeq ($(PLATFORM),linux)
ifeq ($(ARCH),axp) ifeq ($(ARCH),axp)
Q3POBJ= Q3POBJ=
else else
Q3POBJ=\ Q3POBJ=\
$(B)/client/unix_main.o \
$(B)/client/unix_net.o \
$(B)/client/unix_shared.o \
$(B)/client/linux_signals.o \ $(B)/client/linux_signals.o \
$(B)/client/linux_common.o \ $(B)/client/linux_common.o \
$(B)/client/linux_qgl.o \ $(B)/client/linux_qgl.o \
@ -591,6 +702,9 @@ else
$(B)/client/matha.o \ $(B)/client/matha.o \
Q3POBJ_SMP=\ Q3POBJ_SMP=\
$(B)/client/unix_main.o \
$(B)/client/unix_net.o \
$(B)/client/unix_shared.o \
$(B)/client/linux_signals.o \ $(B)/client/linux_signals.o \
$(B)/client/linux_common.o \ $(B)/client/linux_common.o \
$(B)/client/linux_qgl.o \ $(B)/client/linux_qgl.o \
@ -606,10 +720,11 @@ else
Q3POBJ_SMP += $(B)/client/ftol.o $(B)/client/snapvector.o Q3POBJ_SMP += $(B)/client/ftol.o $(B)/client/snapvector.o
endif endif
endif endif #Linux-axp
endif #Linux endif #Linux
endif #FreeBSD endif #mingw32
endif #IRIX endif #IRIX
endif #FreeBSD
$(B)/$(PLATFORM)quake3 : $(Q3OBJ) $(Q3POBJ) $(B)/$(PLATFORM)quake3 : $(Q3OBJ) $(Q3POBJ)
$(CC) -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS) $(CC) -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS)
@ -719,10 +834,10 @@ $(B)/client/jdmaster.o : $(JPDIR)/jdmaster.c; $(DO_CC)
$(B)/client/jdpostct.o : $(JPDIR)/jdpostct.c; $(DO_CC) $(B)/client/jdpostct.o : $(JPDIR)/jdpostct.c; $(DO_CC)
$(B)/client/jdsample.o : $(JPDIR)/jdsample.c; $(DO_CC) $(B)/client/jdsample.o : $(JPDIR)/jdsample.c; $(DO_CC)
$(B)/client/jdtrans.o : $(JPDIR)/jdtrans.c; $(DO_CC) $(B)/client/jdtrans.o : $(JPDIR)/jdtrans.c; $(DO_CC)
$(B)/client/jerror.o : $(JPDIR)/jerror.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/jerror.o : $(JPDIR)/jerror.c; $(DO_CC) $(GL_CFLAGS) $(MINGW_CFLAGS)
$(B)/client/jidctflt.o : $(JPDIR)/jidctflt.c; $(DO_CC) $(B)/client/jidctflt.o : $(JPDIR)/jidctflt.c; $(DO_CC)
$(B)/client/jmemmgr.o : $(JPDIR)/jmemmgr.c; $(DO_CC) $(B)/client/jmemmgr.o : $(JPDIR)/jmemmgr.c; $(DO_CC)
$(B)/client/jmemnobs.o : $(JPDIR)/jmemnobs.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/jmemnobs.o : $(JPDIR)/jmemnobs.c; $(DO_CC) $(GL_CFLAGS) $(MINGW_CFLAGS)
$(B)/client/jutils.o : $(JPDIR)/jutils.c; $(DO_CC) $(B)/client/jutils.o : $(JPDIR)/jutils.c; $(DO_CC)
$(B)/client/tr_bsp.o : $(RDIR)/tr_bsp.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_bsp.o : $(RDIR)/tr_bsp.c; $(DO_CC) $(GL_CFLAGS)
@ -732,7 +847,7 @@ $(B)/client/tr_cmds.o : $(RDIR)/tr_cmds.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_curve.o : $(RDIR)/tr_curve.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_curve.o : $(RDIR)/tr_curve.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_flares.o : $(RDIR)/tr_flares.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_flares.o : $(RDIR)/tr_flares.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_font.o : $(RDIR)/tr_font.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_font.o : $(RDIR)/tr_font.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_image.o : $(RDIR)/tr_image.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_image.o : $(RDIR)/tr_image.c; $(DO_CC) $(GL_CFLAGS) $(MINGW_CFLAGS)
$(B)/client/tr_init.o : $(RDIR)/tr_init.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_init.o : $(RDIR)/tr_init.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_light.o : $(RDIR)/tr_light.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_light.o : $(RDIR)/tr_light.c; $(DO_CC) $(GL_CFLAGS)
$(B)/client/tr_main.o : $(RDIR)/tr_main.c; $(DO_CC) $(GL_CFLAGS) $(B)/client/tr_main.o : $(RDIR)/tr_main.c; $(DO_CC) $(GL_CFLAGS)
@ -773,12 +888,28 @@ $(B)/client/sdl_snd.o : $(UDIR)/sdl_snd.c; $(DO_CC)
$(B)/client/snd_mixa.o : $(UDIR)/snd_mixa.s; $(DO_AS) $(B)/client/snd_mixa.o : $(UDIR)/snd_mixa.s; $(DO_AS)
$(B)/client/matha.o : $(UDIR)/matha.s; $(DO_AS) $(B)/client/matha.o : $(UDIR)/matha.s; $(DO_AS)
$(B)/client/win_gamma.o : $(W32DIR)/win_gamma.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_glimp.o : $(W32DIR)/win_glimp.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_input.o : $(W32DIR)/win_input.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_main.o : $(W32DIR)/win_main.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_net.o : $(W32DIR)/win_net.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_qgl.o : $(W32DIR)/win_qgl.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_shared.o : $(W32DIR)/win_shared.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_snd.o : $(W32DIR)/win_snd.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_syscon.o : $(W32DIR)/win_syscon.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_wndproc.o : $(W32DIR)/win_wndproc.c; $(DO_CC) $(DX_CFLAGS)
$(B)/client/win_resource.o : $(W32DIR)/winquake.rc; $(DO_WINDRES)
ifeq ($(ARCH),i386) ifeq ($(ARCH),i386)
$(B)/client/ftol.o : $(UDIR)/ftol.nasm; $(DO_NASM) $(B)/client/ftol.o : $(UDIR)/ftol.nasm; $(DO_NASM)
$(B)/client/snapvector.o : $(UDIR)/snapvector.nasm; $(DO_NASM) $(B)/client/snapvector.o : $(UDIR)/snapvector.nasm; $(DO_NASM)
$(B)/client/vm_x86.o : $(CMDIR)/vm_x86.c; $(DO_CC) $(B)/client/vm_x86.o : $(CMDIR)/vm_x86.c; $(DO_CC)
endif endif
ifeq ($(ARCH),x86)
$(B)/client/vm_x86.o : $(CMDIR)/vm_x86.c; $(DO_CC)
endif
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
$(B)/client/vm_none.o : $(CMDIR)/vm_none.c; $(DO_CC) $(B)/client/vm_none.o : $(CMDIR)/vm_none.c; $(DO_CC)
endif endif
@ -944,6 +1075,7 @@ $(B)/ded/linux_common.o : $(UDIR)/linux_common.c; $(DO_DED_CC)
$(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC) $(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC)
$(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC) $(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC)
$(B)/ded/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_DED_CC) $(B)/ded/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_DED_CC)
$(B)/ded/null_client.o : $(NDIR)/null_client.c; $(DO_DED_CC) $(B)/ded/null_client.o : $(NDIR)/null_client.c; $(DO_DED_CC)
$(B)/ded/null_input.o : $(NDIR)/null_input.c; $(DO_DED_CC) $(B)/ded/null_input.o : $(NDIR)/null_input.c; $(DO_DED_CC)
$(B)/ded/null_snddma.o : $(NDIR)/null_snddma.c; $(DO_DED_CC) $(B)/ded/null_snddma.o : $(NDIR)/null_snddma.c; $(DO_DED_CC)

View file

@ -22,6 +22,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#ifndef __ASM_I386__ #ifndef __ASM_I386__
#define __ASM_I386__ #define __ASM_I386__
#ifdef __MINGW32__
#undef ELF
#endif
#ifdef ELF #ifdef ELF
#define C(label) label #define C(label) label
#else #else

View file

@ -1592,7 +1592,7 @@ qboolean GLimp_SpawnRenderThread( void (*function)( void ) ) {
(LPTHREAD_START_ROUTINE)GLimp_RenderThreadWrapper, // LPTHREAD_START_ROUTINE lpStartAddr, (LPTHREAD_START_ROUTINE)GLimp_RenderThreadWrapper, // LPTHREAD_START_ROUTINE lpStartAddr,
0, // LPVOID lpvThreadParm, 0, // LPVOID lpvThreadParm,
0, // DWORD fdwCreate, 0, // DWORD fdwCreate,
&renderThreadId ); (long *)&renderThreadId );
if ( !renderThreadHandle ) { if ( !renderThreadHandle ) {
return qfalse; return qfalse;

View file

@ -195,7 +195,7 @@ DIRECT INPUT MOUSE CONTROL
#undef DEFINE_GUID #undef DEFINE_GUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID name \ const GUID name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
@ -279,7 +279,7 @@ qboolean IN_InitDIMouse( void ) {
} }
if (!pDirectInputCreate) { if (!pDirectInputCreate) {
pDirectInputCreate = (long (__stdcall *)(void *,unsigned long ,struct IDirectInputA ** ,struct IUnknown *)) pDirectInputCreate = (HRESULT (WINAPI *)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN))
GetProcAddress(hInstDI,"DirectInputCreateA"); GetProcAddress(hInstDI,"DirectInputCreateA");
if (!pDirectInputCreate) { if (!pDirectInputCreate) {
@ -403,7 +403,6 @@ void IN_DIMouse( int *mx, int *my ) {
DWORD dwElements; DWORD dwElements;
HRESULT hr; HRESULT hr;
int value; int value;
static float oldSysTime;
if ( !g_pMouse ) { if ( !g_pMouse ) {
return; return;
@ -929,7 +928,7 @@ void IN_JoyMove( void ) {
if ( joyGetPosEx (joy.id, &joy.ji) != JOYERR_NOERROR ) { if ( joyGetPosEx (joy.id, &joy.ji) != JOYERR_NOERROR ) {
// read error occurred // read error occurred
// turning off the joystick seems too harsh for 1 read error,\ // turning off the joystick seems too harsh for 1 read error,
// but what should be done? // but what should be done?
// Com_Printf ("IN_ReadJoystick: no response\n"); // Com_Printf ("IN_ReadJoystick: no response\n");
// joy.avail = false; // joy.avail = false;

View file

@ -73,7 +73,7 @@ LONG WINAPI MainWndProc (
void Conbuf_AppendText( const char *msg ); void Conbuf_AppendText( const char *msg );
void SNDDMA_Activate( void ); void SNDDMA_Activate( void );
int SNDDMA_InitDS (); int SNDDMA_InitDS (void);
typedef struct typedef struct
{ {

View file

@ -56,7 +56,7 @@ void Spk_Open(char *name)
fh = open( name, O_TRUNC | O_CREAT | O_WRONLY, S_IREAD | S_IWRITE ); fh = open( name, O_TRUNC | O_CREAT | O_WRONLY, S_IREAD | S_IWRITE );
}; };
void Spk_Close() void Spk_Close(void)
{ {
if (!fh) if (!fh)
return; return;
@ -526,7 +526,7 @@ extern char *FS_BuildOSPath( const char *base, const char *game, const char *qp
// fqpath param added 7/20/02 by T.Ray - Sys_LoadDll is only called in vm.c at this time // fqpath param added 7/20/02 by T.Ray - Sys_LoadDll is only called in vm.c at this time
// fqpath will be empty if dll not loaded, otherwise will hold fully qualified path of dll module loaded // fqpath will be empty if dll not loaded, otherwise will hold fully qualified path of dll module loaded
// fqpath buffersize must be at least MAX_QPATH+1 bytes long // fqpath buffersize must be at least MAX_QPATH+1 bytes long
void * QDECL Sys_LoadDll( const char *name, char *fqpath , int (QDECL **entryPoint)(int, ...), void * QDECL Sys_LoadDll( const char *name, char *fqpath , long (QDECL **entryPoint)(long, ...),
long (QDECL *systemcalls)(long, ...) ) { long (QDECL *systemcalls)(long, ...) ) {
static int lastWarning = 0; static int lastWarning = 0;
HINSTANCE libHandle; HINSTANCE libHandle;
@ -1100,7 +1100,11 @@ void Sys_Init( void ) {
{ {
Com_Printf( "...detecting CPU, found " ); Com_Printf( "...detecting CPU, found " );
#ifndef __MINGW32__
cpuid = Sys_GetProcessorId(); cpuid = Sys_GetProcessorId();
#else // See comments in win_shared.c
cpuid = CPUID_GENERIC;
#endif
switch ( cpuid ) switch ( cpuid )
{ {

View file

@ -488,7 +488,7 @@ int NET_IPSocket( char *net_interface, int port ) {
} }
// make it non-blocking // make it non-blocking
if( ioctlsocket( newsocket, FIONBIO, &_true ) == SOCKET_ERROR ) { if( ioctlsocket( newsocket, FIONBIO, (u_long *)&_true ) == SOCKET_ERROR ) {
Com_Printf( "WARNING: UDP_OpenSocket: ioctl FIONBIO: %s\n", NET_ErrorString() ); Com_Printf( "WARNING: UDP_OpenSocket: ioctl FIONBIO: %s\n", NET_ErrorString() );
return 0; return 0;
} }
@ -799,7 +799,7 @@ int NET_IPXSocket( int port ) {
} }
// make it non-blocking // make it non-blocking
if( ioctlsocket( newsocket, FIONBIO, &_true ) == SOCKET_ERROR ) { if( ioctlsocket( newsocket, FIONBIO, (u_long *)&_true ) == SOCKET_ERROR ) {
Com_Printf( "WARNING: IPX_Socket: ioctl FIONBIO: %s\n", NET_ErrorString() ); Com_Printf( "WARNING: IPX_Socket: ioctl FIONBIO: %s\n", NET_ErrorString() );
return 0; return 0;
} }

View file

@ -3220,8 +3220,12 @@ static qboolean GlideIsValid( void )
return qfalse; return qfalse;
} }
#ifdef _MSC_VER
# pragma warning (disable : 4113 4133 4047 ) # pragma warning (disable : 4113 4133 4047 )
# define GPA( a ) GetProcAddress( glw_state.hinstOpenGL, a ) # define GPA( a ) GetProcAddress( glw_state.hinstOpenGL, a )
#else
# define GPA( a ) (void *)GetProcAddress( glw_state.hinstOpenGL, a )
#endif
/* /*
** QGL_Init ** QGL_Init
@ -4368,7 +4372,9 @@ void QGL_EnableLogging( qboolean enable )
} }
} }
#ifdef _MSC_VER
#pragma warning (default : 4113 4133 4047 ) #pragma warning (default : 4113 4133 4047 )
#endif

View file

@ -59,14 +59,19 @@ Sys_SnapVector
================ ================
*/ */
long fastftol( float f ) { long fastftol( float f ) {
#ifndef __MINGW32__
static int tmp; static int tmp;
__asm fld f __asm fld f
__asm fistp tmp __asm fistp tmp
__asm mov eax, tmp __asm mov eax, tmp
#else
return (long)f;
#endif
} }
void Sys_SnapVector( float *v ) void Sys_SnapVector( float *v )
{ {
#ifndef __MINGW32__
int i; int i;
float f; float f;
@ -91,6 +96,11 @@ void Sys_SnapVector( float *v )
v++; v++;
*v = fastftol(*v); *v = fastftol(*v);
*/ */
#else
v[0] = rint(v[0]);
v[1] = rint(v[1]);
v[2] = rint(v[2]);
#endif
} }
@ -99,8 +109,13 @@ void Sys_SnapVector( float *v )
** Disable all optimizations temporarily so this code works correctly! ** Disable all optimizations temporarily so this code works correctly!
** **
*/ */
#ifdef _MSC_VER
#pragma optimize( "", off ) #pragma optimize( "", off )
#endif
// If you fancy porting this stuff to AT&T then feel free... :)
// It's not actually used functionally though, so it may be a waste of effort
#ifndef __MINGW32__
/* /*
** -------------------------------------------------------------------------------- ** --------------------------------------------------------------------------------
** **
@ -268,13 +283,16 @@ int Sys_GetProcessorId( void )
#endif #endif
} }
#endif
/* /*
** **
** Re-enable optimizations back to what they were ** Re-enable optimizations back to what they were
** **
*/ */
#ifdef _MSC_VER
#pragma optimize( "", on ) #pragma optimize( "", on )
#endif
//============================================ //============================================

View file

@ -135,7 +135,7 @@ qboolean SNDDMA_Init(void) {
#undef DEFINE_GUID #undef DEFINE_GUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID name \ const GUID name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000} // DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}
@ -331,8 +331,8 @@ void SNDDMA_BeginPainting( void ) {
reps = 0; reps = 0;
dma.buffer = NULL; dma.buffer = NULL;
while ((hresult = pDSBuf->lpVtbl->Lock(pDSBuf, 0, gSndBufSize, &pbuf, &locksize, while ((hresult = pDSBuf->lpVtbl->Lock(pDSBuf, 0, gSndBufSize, (LPVOID)&pbuf, &locksize,
&pbuf2, &dwSize2, 0)) != DS_OK) (LPVOID)&pbuf2, &dwSize2, 0)) != DS_OK)
{ {
if (hresult != DSERR_BUFFERLOST) if (hresult != DSERR_BUFFERLOST)
{ {

View file

@ -7,7 +7,11 @@
// //
// Generated from the TEXTINCLUDE 2 resource. // Generated from the TEXTINCLUDE 2 resource.
// //
#ifndef __MINGW32__
#include "winres.h" #include "winres.h"
#else
#include <winresrc.h>
#endif
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS
@ -53,7 +57,11 @@ END
// Icon with lowest ID value placed first to ensure application icon // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems. // remains consistent on all systems.
#ifndef __MINGW32__
IDI_ICON1 ICON DISCARDABLE "qe3.ico" IDI_ICON1 ICON DISCARDABLE "qe3.ico"
#else
IDI_ICON1 ICON DISCARDABLE "../win32/qe3.ico"
#endif
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //

View file

@ -52,3 +52,42 @@ To compile working(!) shared libraries for 64bit mods the vmMain and
dllEntry functions as well as the syscall pointer have to be changed dllEntry functions as well as the syscall pointer have to be changed
to accept and return long instead of int. to accept and return long instead of int.
Compiling under windows using MinGW
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It is possible to compile ioQ3 using the MinGW (Minimalist GNU for Windows)
toolset. It's a little more involved than compiling for linux; steps are as
follows:
1. Download and install MinGW and MSys from http://www.mingw.org/.
2. Download and install the DirectX 9 SDK from
http://msdn.microsoft.com/directx/. Previous versions of the SDK will
probably work, but they have not been tested.
3. Find the following in DXSDK/Include/dinput.h...
} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
#ifdef UNICODE
typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;
typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE;
#else
typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;
typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE;
#endif // UNICODE
typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
> #ifdef UNICODE
> typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;
> typedef LPCDIDEVICEINSTANCEW LPCDIDEVICEINSTANCE;
> #else
> typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;
> typedef LPCDIDEVICEINSTANCEA LPCDIDEVICEINSTANCE;
> #endif // UNICODE
typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE;
...and comment out/remove the duplicated code (go Microsoft!) marked by '>'.
4. If you didn't install the DirectX SDK in C:\DXSDK\, edit DXSDK_DIR in
code/unix/Makefile to reflect the new location.
5. Perform the usual precompilation sacrificial ritual.
6. Open an MSys terminal, and follow the instructions for compiling on Linux.