#############################################################################
#
# $Id:$
#     Makefile for GCC, based on 'dosdoom', based on linux doom...
#     Modified for PC DOS/win95 version by Fab & Boris.
#						 (bpereira@ulb.ac.be)
#
# $Log:$
#
#     Makefile for dos/win95(compatible) Doom v1.10
#
#     -DUSEASM -> use assembly routines instead of C ones, where possible.
#     -DPC_DOS -> use dos specific code (eg:textmode stuff)... win95 ok.
#

# gcc or g++
CC=gcc

#if use PGCC
PGCC=1

WFLAGS=-Wall -W -Wno-unused -Wno-sign-compare

#indicate platform and what interface use with
# posible value for now : DJGPPDOS
#			  LINUX
DJGPPDOS=1
#LINUX=1

#determine the interface directory (where you put all i_*.c
ifdef DJGPPDOS
       INTERFACE=DJGPPDOS
else
       ifdef LINUX
	     INTERFACE=LINUX
       endif
endif

ifdef DJGPPDOS
	# options
	OPTS=-DNORMALUNIX -DPC_DOS -DUSEASM

	ifdef PROFILEMODE

		# build with profiling information
		ifdef PGCC
			CFLAGS = -g -pg $(OPTS)
		else
			CFLAGS = -g -pg -m486 -O3 -ffast-math $(OPTS)
		endif
		LDFLAGS = -g -pg

	else

		# build a normal optimised version
		ifdef PGCC
			CFLAGS = -mpentium -O6 -ffast-math -fomit-frame-pointer $(OPTS)
		else
			CFLAGS = -m486 -O3 -ffast-math -fomit-frame-pointer $(OPTS)
		endif
	endif
		     #remove -s for objdump
	LIBS=-lalleg -s

	SFLAGS=

	# name of the exefile
	EXENAME=DOOM3

endif #ifdef DJGPP_DOS

ifdef LINUX
	CFLAGS=-O3 -Wall -DNORMALUNIX -DLINUX
	LDFLAGS=-L/usr/X11R6/lib
	LIBS=-lXext -lX11 -lnsl -lm
	# name of the exefile
	EXENAME=linuxxdoom
	SFLAGS=
endif

# subdirectory for objects
O=OBJS

# not too sophisticated dependency
OBJS=	\
		$(O)/doomdef.o		\
		$(O)/doomstat.o 	\
		$(O)/dstrings.o 	\
		$(O)/i_sound.o	     \
		$(O)/i_video.o		\
		$(O)/i_net.o		\
		$(O)/i_system.o 	\
		$(O)/tables.o			\
		$(O)/f_finale.o 	\
		$(O)/f_wipe.o		\
		$(O)/d_main.o			\
		$(O)/d_net.o			\
		$(O)/d_items.o		\
		$(O)/g_game.o			\
		$(O)/m_menu.o			\
		$(O)/m_misc.o			\
		$(O)/m_argv.o		\
		$(O)/m_bbox.o			\
		$(O)/m_fixed.o		\
		$(O)/m_swap.o			\
		$(O)/m_cheat.o		\
		$(O)/m_random.o 	\
		$(O)/am_map.o			\
		$(O)/p_ceilng.o 	\
		$(O)/p_doors.o		\
		$(O)/p_enemy.o		\
		$(O)/p_floor.o		\
		$(O)/p_inter.o		\
		$(O)/p_lights.o 	\
		$(O)/p_map.o			\
		$(O)/p_maputl.o 	\
		$(O)/p_plats.o		\
		$(O)/p_pspr.o			\
		$(O)/p_setup.o		\
		$(O)/p_sight.o		\
		$(O)/p_spec.o			\
		$(O)/p_switch.o 	\
		$(O)/p_mobj.o			\
		$(O)/p_telept.o 	\
		$(O)/p_tick.o			\
		$(O)/p_saveg.o		\
		$(O)/p_user.o			\
		$(O)/r_bsp.o			\
		$(O)/r_data.o			\
		$(O)/r_draw.o			\
		$(O)/r_main.o			\
		$(O)/r_plane.o		\
		$(O)/r_segs.o			\
		$(O)/r_sky.o			\
		$(O)/r_things.o 	\
		$(O)/w_wad.o			\
		$(O)/wi_stuff.o 	\
		$(O)/v_video.o		\
		$(O)/st_lib.o			\
		$(O)/st_stuff.o 	\
		$(O)/hu_stuff.o 	\
		$(O)/hu_lib.o			\
		$(O)/s_sound.o		\
		$(O)/z_zone.o			\
		$(O)/info.o				\
		$(O)/sounds.o		\
		$(O)/tmap.o \
		$(O)/p_fab.o \
		$(O)/dehacked.o \
		$(O)/qmus2mid.o \
		$(O)/vid_copy.o \
		$(O)/vid_vesa.o \
		$(O)/i_dos.o \
		$(O)/g_input.o \
		$(O)/screen.o


all:	 $(O)/$(EXENAME)

clean:
ifdef LINUX
	rm -f *.o *~ *.flc
	rm -f $(O)/*
else
	del $(O)\*.* >NUL
endif

# executable

$(O)/$(EXENAME):	$(OBJS) $(O)/i_main.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(O)/i_main.o \
	-o $(O)/$(EXENAME) $(LIBS)

# more complete dependencies for STATUS BAR

$(O)/am_map.o : am_map.c am_map.h st_stuff.h v_video.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/d_main.o : d_main.c d_main.h st_stuff.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/g_game.o : g_game.c g_game.h st_stuff.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/r_main.o : r_main.c r_main.h st_stuff.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/st_lib.o : st_lib.c doomdef.h v_video.h i_system.h am_map.h st_lib.h st_stuff.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/st_stuff.o : st_stuff.c st_stuff.h st_lib.h am_map.h v_video.h doomdef.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/info.o : info.c sounds.h m_fixed.h info.h p_mobj.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/p_enemy.o : p_enemy.c m_random.h i_system.h doomdef.h p_local.h s_sound.h g_game.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/p_mobj.o : p_mobj.c i_system.h z_zone.h m_random.h doomdef.h p_local.h sounds.h st_stuff.h hu_stuff.h s_sound.h doomstat.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/p_saveg.o : p_saveg.c i_system.h z_zone.h p_local.h doomstat.h r_state.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/p_telept.o : p_telept.c doomdef.h s_sound.h p_local.h sounds.h r_state.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

$(O)/r_data.o : r_data.c i_system.h z_zone.h m_swap.h w_wad.h doomdef.h r_local.h p_local.h doomstat.h r_sky.h v_video.h r_data.h
	$(CC) $(CFLAGS) $(WFLAGS) -c $< -o $@

# in all other case
$(O)/%.o : %.c
	$(CC) $(CFLAGS) $(LDFLAGS) $(WFLAGS) -c $< -o $@


$(O)/%.o : %.S
	$(CC) $(OPTS) $(SFLAGS) -x assembler-with-cpp -c $< -o $@

$(O)/%.o : DJGPPDOS/%.S
	$(CC) $(OPTS) $(SFLAGS) -x assembler-with-cpp -c $< -o $@

$(O)/%.o : DJGPPDOS/%.c
	$(CC) $(CFLAGS) $(LDFLAGS) $(WFLAGS) -c $< -o $@


#############################################################
#
#############################################################
