1# Build Makefile for Microsoft NMake 2 3# Engine options - these may be overridden by game makefiles 4# USE_POLYMOST - enables Polymost renderer 5# USE_OPENGL - enables OpenGL support in Polymost 6# Define as 0 to disable OpenGL 7# Define as 1 (or 2) for GL 2.0/2.1 profile 8# Define as 3 for GL 3.2 Core profile 9# USE_ASM - enables the use of assembly code 10USE_POLYMOST=1 11USE_OPENGL=1 12USE_ASM=1 13 14RELEASE=1 15 16# Create Makefile.msvcuser yourself to provide your own overrides 17# for configurable values 18!if EXIST(Makefile.msvcuser) 19!include Makefile.msvcuser 20!endif 21 22SRC=src 23GAME=kenbuild 24GAMEDATA=kenbuild-data 25TOOLS=tools 26INC=include 27 28o=obj 29res=res 30asm=masm 31 32ENGINELIB=engine.lib 33EDITORLIB=build.lib 34 35LIBSQUISH=libsquish 36 37flags_cl= 38flags_rc= 39!if "$(PLATFORM)" == "X64" || "$(PLATFORM)" == "x64" 40flags_rc=/d_M_AMD64 41USE_ASM=0 42!elseif "$(PLATFORM)" == "ARM" 43# Some day, perhaps. 44USE_ASM=0 45!else 46flags_cl=/arch:IA32 47!endif 48 49!if $(RELEASE) 50# release options 51flags_cl=$(flags_cl) /O2 52flags_link=/RELEASE 53!else 54# debugging options 55flags_cl=$(flags_cl) /Ot /Z7 /DDEBUGGINGAIDS 56flags_link=/DEBUG 57!endif 58 59CC=cl 60AS=ml 61RC=rc 62LINK=link 63OURCFLAGS=/nologo /MD $(flags_cl) /DKSFORBUILD /I$(INC) /I$(LIBSQUISH) /I$(SRC) 64GAMECFLAGS=/I$(GAME) 65ASFLAGS=/nologo /coff 66LINKFLAGS=/opt:ref /nologo $(flags_link) 67RFLAGS=/nologo /i$(INC) /i$(GAME) $(flags_rc) 68EXESUFFIX=.exe 69 70ENGINEOBJS=$(SRC)\a-c.$o \ 71 $(SRC)\asmprot.$o \ 72 $(SRC)\baselayer.$o \ 73 $(SRC)\cache1d.$o \ 74 $(SRC)\compat.$o \ 75 $(SRC)\crc32.$o \ 76 $(SRC)\defs.$o \ 77 $(SRC)\engine.$o \ 78 $(SRC)\polymost.$o \ 79 $(SRC)\polymost_fs.$o \ 80 $(SRC)\polymost_vs.$o \ 81 $(SRC)\polymostaux_fs.$o \ 82 $(SRC)\polymostaux_vs.$o \ 83 $(SRC)\polymosttex.$o \ 84 $(SRC)\polymosttexcache.$o \ 85 $(SRC)\polymosttexcompress.$o \ 86 $(SRC)\hightile.$o \ 87 $(SRC)\mdsprite.$o \ 88 $(SRC)\glbuild.$o \ 89 $(SRC)\glbuild_fs.$o \ 90 $(SRC)\glbuild_vs.$o \ 91 $(SRC)\kplib.$o \ 92 $(SRC)\mmulti.$o \ 93 $(SRC)\osd.$o \ 94 $(SRC)\pragmas.$o \ 95 $(SRC)\scriptfile.$o \ 96 $(SRC)\textfont.$o \ 97 $(SRC)\smalltextfont.$o \ 98 $(SRC)\winlayer.$o 99 100LIBSQUISHOBJS=$(LIBSQUISH)\alpha.$o $(LIBSQUISH)\clusterfit.$o \ 101 $(LIBSQUISH)\colourblock.$o $(LIBSQUISH)\colourfit.$o \ 102 $(LIBSQUISH)\colourset.$o $(LIBSQUISH)\maths.$o \ 103 $(LIBSQUISH)\rangefit.$o $(LIBSQUISH)\singlecolourfit.$o \ 104 $(LIBSQUISH)\squish.$o $(SRC)\rg_etc1.$o 105 106EDITOROBJS=$(SRC)\build.$o \ 107 $(SRC)\startwin_editor.$o \ 108 $(SRC)\config.$o 109 110GAMEEXEOBJS=$(GAME)\config.$o \ 111 $(GAME)\game.$o \ 112 $(GAME)\gameres.$(res) \ 113 $(GAME)\startwin_game.$o \ 114 $(GAME)\kdmsound.$o \ 115 $(GAME)\kdmsound_stub.$o \ 116 $(SRC)\$(ENGINELIB) 117 118EDITOREXEOBJS=$(GAME)\bstub.$o \ 119 $(GAME)\buildres.$(res) \ 120 $(SRC)\$(EDITORLIB) \ 121 $(SRC)\$(ENGINELIB) 122 123!if $(USE_ASM) 124ENGINEOBJS=$(ENGINEOBJS) $(SRC)\a.$o 125!endif 126 127RENDERTYPE=WIN 128BUILDCFLAGS=/DRENDERTYPEWIN=1 129BUILDLIBS=user32.lib gdi32.lib shell32.lib ws2_32.lib comctl32.lib comdlg32.lib uxtheme.lib xinput9_1_0.lib 130 131!if $(USE_POLYMOST) 132BUILDCFLAGS=$(BUILDCFLAGS) /DUSE_POLYMOST=$(USE_POLYMOST) 133!endif 134!if $(USE_OPENGL) 135BUILDCFLAGS=$(BUILDCFLAGS) /DUSE_OPENGL=$(USE_OPENGL) 136!endif 137!if $(USE_ASM) 138BUILDCFLAGS=$(BUILDCFLAGS) /DUSE_ASM=$(USE_ASM) 139!endif 140 141LIBS=$(LIBS) $(BUILDLIBS) 142CFLAGS=$(CFLAGS) $(BUILDCFLAGS) 143 144# Source-control version stamping 145!if [git --version >nul] == 0 146ENGINEOBJS=$(ENGINEOBJS) $(SRC)\version-auto.$o 147!else 148ENGINEOBJS=$(ENGINEOBJS) $(SRC)\version.$o 149!endif 150 151# RULES 152.SUFFIXES: .masm .cc .glsl 153 154{$(SRC)}.masm{$(SRC)}.$o: 155 $(AS) /c $(ASFLAGS) /Fo$@ $< 156 157{$(SRC)}.c{$(SRC)}.$o: 158 $(CC) /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 159 160{$(SRC)}.cc{$(SRC)}.$o: 161 $(CC) /TP /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 162 163{$(SRC)}.cpp{$(SRC)}.$o: 164 $(CC) /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 165 166{$(LIBSQUISH)}.cpp{$(LIBSQUISH)}.$o: 167 $(CC) /TP /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 168 169{$(TOOLS)}.c{$(TOOLS)}.$o: 170 $(CC) /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 171 172{$(TOOLS)}.cc{$(TOOLS)}.$o: 173 $(CC) /TP /c $(CFLAGS) $(OURCFLAGS) /Fo$@ $< 174 175{$(GAME)}.c{$(GAME)}.$o: 176 $(CC) /c $(CFLAGS) $(OURCFLAGS) $(GAMECFLAGS) /Fo$@ $< 177 178{$(GAME)}.cpp{$(GAME)}.$o: 179 $(CC) /c $(CFLAGS) $(OURCFLAGS) $(GAMECFLAGS) /Fo$@ $< 180 181{$(GAME)}.rc{$(GAME)}.$(res): 182 $(RC) $(RFLAGS) /fo$@ /r $< 183 184{$(SRC)}.glsl{$(SRC)}.c: 185 if not exist bin2c$(EXESUFFIX) $(MAKE) /f Makefile.msvc /$(MAKEFLAGS) /nologo bin2c$(EXESUFFIX) 186 bin2c$(EXESUFFIX) -text $< default_$(@B)_glsl > $@ 187 188# TARGETS 189UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2map$(EXESUFFIX) wad2map$(EXESUFFIX) 190 191all: enginelib editorlib $(GAMEDATA)\game$(EXESUFFIX) $(GAMEDATA)\build$(EXESUFFIX) ; 192utils: $(UTILS) ; 193 194enginelib: $(SRC)\$(ENGINELIB) ; 195$(SRC)\$(ENGINELIB): $(ENGINEOBJS) $(LIBSQUISHOBJS) 196 lib /out:$@ /nologo $** 197 198editorlib: $(SRC)\$(EDITORLIB) ; 199$(SRC)\$(EDITORLIB): $(EDITOROBJS) 200 lib /out:$@ /nologo $** 201 202 203$(GAMEDATA)\game$(EXESUFFIX): $(GAMEEXEOBJS) 204 $(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS "/LIBPATH:$(DXROOT)\lib" $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 205 206$(GAMEDATA)\build$(EXESUFFIX): $(EDITOREXEOBJS) 207 $(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS "/LIBPATH:$(DXROOT)\lib" $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 208 209# the tools 210kextract$(EXESUFFIX): $(TOOLS)\kextract.$o $(SRC)\compat.$o 211 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 212 213kgroup$(EXESUFFIX): $(TOOLS)\kgroup.$o $(SRC)\compat.$o 214 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 215 216transpal$(EXESUFFIX): $(TOOLS)\transpal.$o $(SRC)\pragmas.$o $(SRC)\compat.$o 217 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 218 219wad2map$(EXESUFFIX): $(TOOLS)\wad2map.$o $(SRC)\pragmas.$o $(SRC)\compat.$o 220 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 221 222wad2art$(EXESUFFIX): $(TOOLS)\wad2art.$o $(SRC)\pragmas.$o $(SRC)\compat.$o 223 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** $(LIBS) msvcrt.lib 224 225bin2c$(EXESUFFIX): $(TOOLS)\bin2c.$o 226 $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(LINKFLAGS) /MAP $** msvcrt.lib 227 228$(SRC)\version-auto.c: AlwaysBuild 229 cmd /c $(TOOLS)\generateversion.cmd > $@ 230 231AlwaysBuild: ; 232 233# DEPENDENCIES 234!include Makefile.deps 235 236# PHONIES 237clean: 238 -del /q $(ENGINEOBJS) $(LIBSQUISHOBJS) $(EDITOROBJS) $(GAMEEXEOBJS) $(EDITOREXEOBJS) 239veryclean: clean 240 -del /q $(SRC)\$(ENGINELIB) $(SRC)\$(EDITORLIB) $(GAMEDATA)\game$(EXESUFFIX) $(GAMEDATA)\build$(EXESUFFIX) $(UTILS) 241 242