mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-09 01:01:07 +00:00
SDL_config_windows.h from development version of SDL added inclusion of winsdkver.h which may not be available in old SDKs. we have no use for the functionality provided by it, therefore disable it.
293 lines
6 KiB
Text
293 lines
6 KiB
Text
# GNU Makefile for compiling Win32 quakespasm.exe using MinGW or MinGW-w64.
|
|
# Usage: "make -f Makefile.w32"
|
|
# To cross-compile on Linux hosts, see the build_cross_win32*.sh scripts.
|
|
# "make DEBUG=1" to build a debug client.
|
|
# "make SDL_CONFIG=/path/to/sdl-config" to override the locally included SDL versions.
|
|
# "make WINSOCK2=1" to use WinSock2 api instead of the old WinSock 1.1.
|
|
|
|
### Enable/disable SDL2
|
|
USE_SDL2=0
|
|
|
|
### Enable/disable codecs for streaming music support
|
|
USE_CODEC_WAVE=1
|
|
USE_CODEC_FLAC=1
|
|
USE_CODEC_MP3=1
|
|
USE_CODEC_VORBIS=1
|
|
USE_CODEC_OPUS=1
|
|
# either mikmod or xmp
|
|
USE_CODEC_MIKMOD=1
|
|
USE_CODEC_XMP=0
|
|
USE_CODEC_UMX=1
|
|
|
|
# which library to use for mp3 decoding: mad or mpg123
|
|
MP3LIB=mad
|
|
# which library to use for ogg decoding: vorbis or tremor
|
|
VORBISLIB=vorbis
|
|
|
|
# ---------------------------
|
|
# Helper functions
|
|
# ---------------------------
|
|
|
|
check_gcc = $(shell if echo | $(CC) $(1) -Werror -S -o /dev/null -xc - > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi;)
|
|
|
|
# ---------------------------
|
|
|
|
DEBUG ?= 0
|
|
WINSOCK2?= 0
|
|
|
|
# ---------------------------
|
|
# build variables
|
|
# ---------------------------
|
|
|
|
CC = gcc
|
|
LINKER = $(CC)
|
|
WINDRES = windres
|
|
|
|
STRIP = strip
|
|
|
|
CPUFLAGS=
|
|
LDFLAGS = -m32 -mwindows -static-libgcc
|
|
DFLAGS ?=
|
|
CFLAGS ?= -m32 -Wall -Wno-trigraphs
|
|
CFLAGS += $(CPUFLAGS)
|
|
|
|
ifneq ($(DEBUG),0)
|
|
DFLAGS += -DDEBUG
|
|
CFLAGS += -g
|
|
do_strip=
|
|
else
|
|
DFLAGS += -DNDEBUG
|
|
CFLAGS += -O2
|
|
CFLAGS += $(call check_gcc,-fweb,)
|
|
CFLAGS += $(call check_gcc,-frename-registers,)
|
|
cmd_strip=$(STRIP) $(1)
|
|
define do_strip
|
|
$(call cmd_strip,$(1));
|
|
endef
|
|
endif
|
|
|
|
ifeq ($(USE_SDL2),1)
|
|
CFLAGS += -DUSE_SDL2
|
|
# for compatibility with old sdks
|
|
CFLAGS += -DNO_WINSDKVER_H
|
|
endif
|
|
|
|
# default to our local SDL[2] for build
|
|
ifeq ($(USE_SDL2),1)
|
|
SDL_CONFIG ?=../Windows/SDL2/bin/sdl2-config --prefix=../Windows/SDL2
|
|
else
|
|
SDL_CONFIG ?=../Windows/SDL/bin/sdl-config --prefix=../Windows/SDL
|
|
endif
|
|
SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)
|
|
SDL_LIBS := $(shell $(SDL_CONFIG) --libs)
|
|
|
|
ifeq ($(WINSOCK2),1)
|
|
DEFWINSOCK :=-D_USE_WINSOCK2
|
|
LIBWINSOCK := -lws2_32
|
|
else
|
|
DEFWINSOCK :=
|
|
LIBWINSOCK := -lwsock32
|
|
endif
|
|
|
|
CFLAGS += $(DEFWINSOCK)
|
|
NET_LIBS := $(LIBWINSOCK)
|
|
|
|
ifneq ($(VORBISLIB),vorbis)
|
|
ifneq ($(VORBISLIB),tremor)
|
|
$(error Invalid VORBISLIB setting)
|
|
endif
|
|
endif
|
|
ifneq ($(MP3LIB),mpg123)
|
|
ifneq ($(MP3LIB),mad)
|
|
$(error Invalid MP3LIB setting)
|
|
endif
|
|
endif
|
|
ifeq ($(MP3LIB),mad)
|
|
mp3_obj=snd_mp3
|
|
lib_mp3dec=-lmad
|
|
endif
|
|
ifeq ($(MP3LIB),mpg123)
|
|
mp3_obj=snd_mpg123
|
|
lib_mp3dec=-lmpg123
|
|
endif
|
|
ifeq ($(VORBISLIB),vorbis)
|
|
cpp_vorbisdec=
|
|
lib_vorbisdec=-lvorbisfile -lvorbis -logg
|
|
endif
|
|
ifeq ($(VORBISLIB),tremor)
|
|
cpp_vorbisdec=-DVORBIS_USE_TREMOR
|
|
lib_vorbisdec=-lvorbisidec -logg
|
|
endif
|
|
|
|
CODECLIBS :=
|
|
ifeq ($(USE_CODEC_WAVE),1)
|
|
CFLAGS+= -DUSE_CODEC_WAVE
|
|
endif
|
|
ifeq ($(USE_CODEC_FLAC),1)
|
|
CFLAGS+= -DUSE_CODEC_FLAC
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= -lFLAC
|
|
endif
|
|
ifeq ($(USE_CODEC_OPUS),1)
|
|
CFLAGS+= -DUSE_CODEC_OPUS
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= -lopusfile -lopus -logg
|
|
endif
|
|
ifeq ($(USE_CODEC_VORBIS),1)
|
|
CFLAGS+= -DUSE_CODEC_VORBIS $(cpp_vorbisdec)
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= $(lib_vorbisdec)
|
|
endif
|
|
ifeq ($(USE_CODEC_MP3),1)
|
|
CFLAGS+= -DUSE_CODEC_MP3
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= $(lib_mp3dec)
|
|
endif
|
|
ifeq ($(USE_CODEC_MIKMOD),1)
|
|
CFLAGS+= -DUSE_CODEC_MIKMOD
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= -lmikmod
|
|
endif
|
|
ifeq ($(USE_CODEC_XMP),1)
|
|
CFLAGS+= -DUSE_CODEC_XMP
|
|
CODEC_INC = -I../Windows/codecs/include
|
|
CODEC_LINK= -L../Windows/codecs/x86
|
|
CODECLIBS+= -lxmp
|
|
endif
|
|
ifeq ($(USE_CODEC_UMX),1)
|
|
CFLAGS+= -DUSE_CODEC_UMX
|
|
endif
|
|
CFLAGS+= $(CODEC_INC)
|
|
|
|
COMMON_LIBS:= -lopengl32 -lwinmm
|
|
|
|
LIBS := $(COMMON_LIBS) $(NET_LIBS) $(CODEC_LINK) $(CODECLIBS)
|
|
|
|
# ---------------------------
|
|
# targets
|
|
# ---------------------------
|
|
|
|
.PHONY: clean debug release
|
|
|
|
DEFAULT_TARGET := quakespasm.exe
|
|
|
|
# ---------------------------
|
|
# rules
|
|
# ---------------------------
|
|
|
|
%.o: %.c
|
|
$(CC) $(DFLAGS) -c $(CFLAGS) $(SDL_CFLAGS) -o $@ $<
|
|
%.res: ../Windows/%.rc
|
|
$(WINDRES) -I../Windows --output-format=coff --target=pe-i386 -o $@ $<
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# objects
|
|
# ----------------------------------------------------------------------------
|
|
|
|
MUSIC_OBJS:= bgmusic.o \
|
|
snd_codec.o \
|
|
snd_flac.o \
|
|
snd_wave.o \
|
|
snd_vorbis.o \
|
|
snd_opus.o \
|
|
$(mp3_obj).o \
|
|
snd_mp3tag.o \
|
|
snd_mikmod.o \
|
|
snd_xmp.o \
|
|
snd_umx.o
|
|
COMOBJ_SND := snd_dma.o snd_mix.o snd_mem.o $(MUSIC_OBJS)
|
|
SYSOBJ_SND := snd_sdl.o
|
|
SYSOBJ_CDA := cd_sdl.o
|
|
SYSOBJ_INPUT := in_sdl.o
|
|
SYSOBJ_GL_VID:= gl_vidsdl.o
|
|
SYSOBJ_NET := net_win.o net_wins.o net_wipx.o
|
|
SYSOBJ_SYS := pl_win.o sys_sdl_win.o
|
|
SYSOBJ_MAIN:= main_sdl.o
|
|
SYSOBJ_RES := QuakeSpasm.res
|
|
|
|
GLOBJS = \
|
|
gl_refrag.o \
|
|
gl_rlight.o \
|
|
gl_rmain.o \
|
|
gl_fog.o \
|
|
gl_rmisc.o \
|
|
r_part.o \
|
|
r_world.o \
|
|
gl_screen.o \
|
|
gl_sky.o \
|
|
gl_warp.o \
|
|
$(SYSOBJ_GL_VID) \
|
|
gl_draw.o \
|
|
image.o \
|
|
gl_texmgr.o \
|
|
gl_mesh.o \
|
|
r_sprite.o \
|
|
r_alias.o \
|
|
r_brush.o \
|
|
gl_model.o
|
|
|
|
OBJS := strlcat.o \
|
|
strlcpy.o \
|
|
$(GLOBJS) \
|
|
$(SYSOBJ_INPUT) \
|
|
$(COMOBJ_SND) \
|
|
$(SYSOBJ_SND) \
|
|
$(SYSOBJ_CDA) \
|
|
$(SYSOBJ_NET) \
|
|
net_dgrm.o \
|
|
net_loop.o \
|
|
net_main.o \
|
|
chase.o \
|
|
cl_demo.o \
|
|
cl_input.o \
|
|
cl_main.o \
|
|
cl_parse.o \
|
|
cl_tent.o \
|
|
console.o \
|
|
keys.o \
|
|
menu.o \
|
|
sbar.o \
|
|
view.o \
|
|
wad.o \
|
|
cmd.o \
|
|
common.o \
|
|
miniz.o \
|
|
crc.o \
|
|
cvar.o \
|
|
cfgfile.o \
|
|
host.o \
|
|
host_cmd.o \
|
|
mathlib.o \
|
|
pr_cmds.o \
|
|
pr_edict.o \
|
|
pr_exec.o \
|
|
sv_main.o \
|
|
sv_move.o \
|
|
sv_phys.o \
|
|
sv_user.o \
|
|
world.o \
|
|
zone.o \
|
|
$(SYSOBJ_SYS) $(SYSOBJ_MAIN) $(SYSOBJ_RES)
|
|
|
|
# ------------------------
|
|
# MinGW build rules
|
|
# ------------------------
|
|
|
|
quakespasm.exe: $(OBJS)
|
|
$(LINKER) $(OBJS) $(LDFLAGS) $(LIBS) $(SDL_LIBS) -o $@
|
|
$(call do_strip,$@)
|
|
|
|
image.o: lodepng.c lodepng.h stb_image_write.h
|
|
|
|
release: quakespasm.exe
|
|
debug:
|
|
$(error Use "make DEBUG=1")
|
|
|
|
clean:
|
|
rm -f $(shell find . \( -name '*~' -o -name '#*#' -o -name '*.o' -o -name '*.res' -o -name $(DEFAULT_TARGET) \) -print)
|
|
|