# Makefile for Linux Heretic/GLHeretic

# Comment the line below if you don't want to build GLHeretic.
WANT_OGL = yes

# Comment this if you don't want to build GLHeretic 
# with highest quality options.
# (Only if you have WANT_OGL !)
WANT_NICE_OGL = yes


# Uncomment the line below if you want to use GSI for sound.
# (doesn't really work yet. :-()
#WANT_GSI = yes

CC = gcc -pipe

#
# For old SVGALIB, comment out -D__NEWVGALIB__
#
CDEFS.ipx = -DUNIX -DHAVE_USLEEP -DHAVE_MATH_H -DHAVE_VALUES_H -DLINUX_MOUSE \
	-DIPX_PROTOCOL -DI_GGI_HERETIC -DNEED_SHMGETEVENTBASE \
	-D__NEWVGALIB__ # -DIPX_DEBUG -DEXTRA_WADS
CDEFS.udp = -DUNIX -DHAVE_USLEEP -DHAVE_MATH_H -DHAVE_VALUES_H -DLINUX_MOUSE \
	-DUDP_PROTOCOL -DI_GGI_HERETIC -DNEED_SHMGETEVENTBASE \
	-D__NEWVGALIB__ # -DEXTRA_WADS

CDEFS.solaris = -DUNIX -DHAVE_USLEEP -DHAVE_MATH_H -DHAVE_VALUES_H \
	-DUDP_PROTOCOL -DNEED_SHMGETEVENTBASE -DSOLARIS

# Plattform specific definitions
# _begin_
COPT.x86 = -O2 -fomit-frame-pointer -mcpu=i586 -march=i586 -D__32BIT__ \
		-DHAVE_ALLOCA_H -DINLINE_FIXED

COPT.m68k = -m68020-60 -O2 -fomit-frame-pointer -D__BIG_ENDIAN__ -D__32BIT__ \
		-DHAVE_ALLOCA_H

COPT.alpha = -O2 -D__64BIT__ -DHAVE_ALLOCA_H

COPT.FreeBSD = -m486 -O2 -malign-jumps=2 -malign-functions=2 -D__32BIT__

COPT.arm = -O2 -D__32BIT__ -fsigned-char -fomit-frame-pointer \
           -DHAVE_ALLOCA_H -D__PACKED__=__attribute__\ \(\(packed\)\)

COPT.sparc = -O2  -D__BIG_ENDIAN__ -D__32BIT__ -mcpu=v8 \
           -DHAVE_ALLOCA_H -D__PACKED__=__attribute__\ \(\(packed\)\)
# _end_

ifeq ($(WANT_OGL),yes)
COPT.opengl = -Iopengl -DGL_HERETIC -I/usr/X11R6/include

ifeq ($(WANT_NICE_OGL),yes)
COPT.opengl += -DNICE_GL
endif

endif

# Change this to change the platform
COPT.arch = $(COPT.x86)

# If you want IPX-netcode compiled, replace $(CDEFS.udp) with $(CDEFS.ipx)

CFLAGS = -Wall $(CDEFS.udp) $(COPT.arch) \
	 -I. -I.. -I/usr/X11R6/include $(COPT.sound) $(COPT.opengl)

# Uncomment the line below if you want to use original "[" and "]" keys
# for inventory access, instead of "k" and "l".
#CFLAGS += -DORIG_INVKEYS

ifeq ($(WANT_GSI),yes)
SOUND_OBJS = gsisound/i_sound.o gsisound/soundst.o gsisound/sounds.o \
	     gsisound/gsi.o m_misc.o
SOUND_REFS = gsisound/i_sound.c gsisound/soundst.c gsisound/sounds.c \
	     gsisound/gsi.c m_misc.c

COPT.sound = -D__DOSOUND__ -D__DOMUSIC__ -DUSE_GSI -Igsisound
X11LIBS = -Xext -lX11 -lm
else
SOUND_OBJS = soundclient/i_sound.o soundclient/soundst.o soundclient/sounds.o \
	     m_misc.o
SOUND_REFS = soundclient/i_sound.c soundclient/soundst.c soundclient/sounds.c \
	     m_misc.c

COPT.sound = -D__DOSOUND__ -DSNDSERV -Isoundclient -D__DOMUSIC__ -DMUSSERV # -D_DEBUGSOUND
X11LIBS = -lXext -lX11

MUSSERV = musserver
SNDSERV = sndserver

endif

X_LDFLAGS = -L/usr/X11R6/lib

X11LIBS = -lXext -lX11
GLLIBS  = -lSDL -lpthread
GGILIBS = -lggi -lm
VGALIBS = -lvga
SDLLIBS = -lSDL -lpthread 

OBJS =	am_map.o ct_chat.o d_main.o d_net.o f_finale.o g_game.o \
	p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o \
	p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_setup.o p_sight.o \
	p_spec.o p_switch.o p_telept.o  p_tick.o p_user.o r_bsp.o r_data.o \
	r_draw.o r_plane.o r_segs.o r_things.o r_main.o mn_menu.o sb_bar.o \
	tables.o v_video.o w_wad.o z_zone.o in_lude.o \
	info.o i_net.o i_system.o i_udp.o i_ipx.o i_main.o $(SOUND_OBJS)

GLOBJS = opengl/gl_effects.o opengl/gl_floorceil.o opengl/gl_fonts.o \
	 opengl/gl_func.o opengl/gl_init.o opengl/gl_lights.o \
	 opengl/gl_sprites.o opengl/gl_texture.o opengl/gl_walls.o \
	 opengl/gl_weapon.o opengl/loadlum.o opengl/gl_mem.o

all:	
	@echo "Choose one of following actions:"
	@echo
ifeq ($(WANT_OGL),yes)
	@echo " make glheretic - will build GLHeretic - needs OpenGL hardware accelleration"
	@echo
else
	@echo " make x11       - will build xheretic - runs under X11"
	@echo
	@echo " make fastx11   - will build xaheretic (fast X-version) - runs under X11"
	@echo
	@echo " make ggi       - will build ggiheretic - runs under GGI"
	@echo		
	@echo " make vga       - will build vgaheretic - runs under SVGAlib"
	@echo
	@echo " make sdl       - will build sdlheretic - runs under SDL-lib"
	@echo
endif
	@echo " make sndserver - will build the soundserver for Heretic"
	@echo
	@echo " make musserver - will build the musicserver (from lxdoom) for Heretic"
	@echo
	@echo " make clean     - will clean up object and exec files"
	@echo

clean:	
	rm -f $(OBJS) $(GLOBJS) xheretic xaheretic glheretic \
	ggiheretic vgaheretic sdlheretic graphics/i_sdl_gl.o \
	graphics/i_x11.o graphics/i_x11_fast.o \
	graphics/i_ggi.o graphics/i_vga.o graphics/i_sdl.o
	(cd sndserv; $(MAKE) clean; cd ..) || exit 1
	(cd musserv; $(MAKE) clean; cd ..) || exit 1
	(cd opengl/sgi-si/libtess; $(MAKE) clean; cd ../../../) || exit 1

distclean:
	rm -f $(OBJS) $(GLOBJS) xheretic xaheretic ggiheretic vgaheretic \
        sdlheretic glheretic graphics/i_x11.o graphics/i_x11_fast.o \
	graphics/i_sdl.o graphics/i_sdl_gl.o graphics/*.orig \
        graphics/i_ggi.o graphics/i_vga.o graphics/*~ graphics/*.rej \
        .depend soundclient/*~ gsisound/*~ sndserv/*~ opengl/*~ *~ \
	*.rej *.orig doc/*~ doc/*.rej doc/*.orig
	(cd sndserv; $(MAKE) clean; cd ..) || exit 1
	(cd musserv; $(MAKE) clean; cd ..) || exit 1
	(cd opengl/sgi-si/libtess; $(MAKE) clean; cd ../../../) || exit 1

depx11:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c $(SOUND_REFS) \
	graphics/i_x11.c > .depend

depx11f:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c $(SOUND_REFS) \
	graphics/i_x11.c > .depend

depsdlogl:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c opengl/*.c \
	$(SOUND_REFS) graphics/i_sdl_gl.c > .depend 

depggi:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c $(SOUND_REFS) \
	graphics/i_ggi.c > .depend

depvga:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c $(SOUND_REFS) \
	graphics/i_vga.c > .depend

depsdl:
	$(CC) -E -M $(CFLAGS) $(X_LDFLAGS) *.c $(SOUND_REFS) \
	graphics/i_sdl.c > .depend                                                               

x11:	depx11 $(OBJS) graphics/i_x11.o $(MUSSERV) $(SNDSERV)
	$(CC) $(CFLAGS) $(X_LDFLAGS) $(X11LIBS) $(OBJS) \
	graphics/i_x11.o -o xheretic

fastx11:depx11f $(OBJS) graphics/i_x11_fast.o $(MUSSERV) $(SNDSERV)
	$(CC) $(CFLAGS) $(X_LDFLAGS) $(X11LIBS) $(OBJS) \
	graphics/i_x11_fast.o -o xaheretic


glheretic:depsdlogl $(OBJS) $(GLOBJS) graphics/i_sdl_gl.o \
	$(MUSSERV) $(SNDSERV) sgi-libtess
ifeq ($(WANT_OGL_FULLSCREEN),yes)
	$(CC) $(CFLAGS) $(X_LDFLAGS) $(X11LIBS) $(GLLIBS) \
	$(OBJS) $(GLOBJS) /usr/X11R6/lib/libXxf86vm.a \
	opengl/sgi-si/libtess/libtess.a graphics/i_sdl_gl.o -o $@
else
	$(CC) $(CFLAGS) $(X_LDFLAGS) $(X11LIBS) $(GLLIBS) \
        $(OBJS) $(GLOBJS) opengl/sgi-si/libtess/libtess.a graphics/i_sdl_gl.o -o $@
endif


ggi:	depggi $(OBJS) graphics/i_ggi.o $(MUSSERV) $(SNDSERV)
	$(CC) $(CFLAGS) $(GGILIBS) $(OBJS) \
	graphics/i_ggi.o -o ggiheretic

vga:	depvga $(OBJS) graphics/i_vga.o $(MUSSERV) $(SNDSERV)
	$(CC) $(CFLAGS) $(VGALIBS) $(OBJS) \
	graphics/i_vga.o -o vgaheretic

sdl:    depsdl $(OBJS) graphics/i_sdl.o $(MUSSERV) $(SNDSERV)
	$(CC) $(CFLAGS) $(X_LDFLAGS) $(SDLLIBS) $(OBJS) \
	graphics/i_sdl.o -o sdlheretic

sndserver:
	$(MAKE) -C sndserv COPT.arch="$(COPT.arch)" $@

musserver:
	$(MAKE) -C musserv COPT.arch="$(COPT.arch)" $@

sgi-libtess:
	$(MAKE) -C opengl/sgi-si/libtess $@

%.o:	%.c
	$(CC) $(CFLAGS) -c $< -o $@


ifeq (.depend,$(wildcard .depend))
include .depend
endif
