#############################################################################
#############################################################################
#
#	Makefile for Pmdoom
#
#	by Patrice Mandin
#
#	Compilation time :
#	Atari Falcon	Motorola 68030/16	 1 h  04 mn
#	Atari Falcon	Motorola 68030/50 (CT2)	13 mn 36 s
#	PC		Intel Pentium/100	 3 mn 20 s
#	PC		Cyrix 6x86 P200+/150	 1 mn 35 s
#	PC		Amd K6-2/333		      40 s
#
#############################################################################
#############################################################################

###############	Choose the configuration to compile Doom for :
#
#	Configurations allowed are:
#
#	SYSTEM	CPU
#
#	linux	x86
#	atari	m68k

SYSTEM=		atari
CPU=		m68k

###############	Different initializations values

CPU_IS_m68k=	-m68030 -D__BIG_ENDIAN__
CPU_IS_x86=	-m486 -ffast-math -malign-loops=2 -malign-functions=2 -malign-jumps=2

SYS_IS_linux=	-DLINUX
SYS_IS_atari=	-DATARI -DNONETWORK

VID_IS_x11=	-L/usr/X11R6/lib -lXext -lX11
VID_IS_svgalib=	-lvga -lvgagl
VID_IS_xbios=
VID_IS_vdi=

VIDLIB_IS_linux=	$(VID_IS_x11) $(VID_IS_svgalib)
VIDLIB_IS_atari=	$(VID_IS_xbios) $(VID_IS_vdi)

###############	System specific objects files

OBJ_IS_linux=	\
		$(OBJDIR)/sound/devaudio.o \
		$(OBJDIR)/video/x11.o \
		$(OBJDIR)/video/svgalib.o

OBJ_IS_atari=	\
		$(OBJDIR)/i_cookies.o \
		$(OBJDIR)/control/joypad.o \
		$(OBJDIR)/control/ikbd.o \
		$(OBJDIR)/control/bios.o \
		$(OBJDIR)/sound/ataridma.o \
		$(OBJDIR)/video/xbios.o \
		$(OBJDIR)/video/vdi.o \
		$(OBJDIR)/$(CPU)/c2p.o \
		$(OBJDIR)/$(CPU)/ataridma.o \
		$(OBJDIR)/$(CPU)/time.o \
		$(OBJDIR)/$(CPU)/joypad.o \
		$(OBJDIR)/$(CPU)/ikbd.o \
		$(OBJDIR)/$(CPU)/m_fixed.o \
		$(OBJDIR)/$(CPU)/m_swap.o \
		$(OBJDIR)/$(CPU)/r_draw8.o \
		$(OBJDIR)/$(CPU)/r_draw16.o \
		$(OBJDIR)/$(CPU)/v_video16.o

###############	Parse configuration now

SYSTEMFLAGS=	$(SYS_IS_$(SYSTEM))
VIDEOLIBS=	$(VIDLIB_IS_$(SYSTEM))
CPUFLAGS=	$(CPU_IS_$(CPU))
SYSTEMOBJS=	$(OBJ_IS_$(SYSTEM))

###############	Common variables

CC=		gcc
AS=		as
LD=		gcc

INCLUDES=	-Iinclude
SRCDIR=		./src
OBJDIR=		./obj
SYSTEMLIBS=	-lm 
CFLAGS=		-Wall -O2 -fomit-frame-pointer -DNORMALUNIX

###############	Program name , source and object files

PROGRAM=	doom

OBJS=		\
		$(OBJDIR)/dstrings.o \
		$(OBJDIR)/doomstat.o \
		$(OBJDIR)/doomdef.o \
		$(OBJDIR)/tables.o \
		$(OBJDIR)/f_finale.o \
		$(OBJDIR)/f_wipe.o \
		$(OBJDIR)/d_main.o \
		$(OBJDIR)/d_net.o \
		$(OBJDIR)/d_items.o \
		$(OBJDIR)/g_game.o \
		$(OBJDIR)/m_fixed.o \
		$(OBJDIR)/m_menu.o \
		$(OBJDIR)/m_misc.o \
		$(OBJDIR)/m_argv.o \
		$(OBJDIR)/m_bbox.o \
		$(OBJDIR)/m_cheat.o \
		$(OBJDIR)/m_random.o \
		$(OBJDIR)/m_swap.o \
		$(OBJDIR)/am_map.o \
		$(OBJDIR)/p_ceilng.o \
		$(OBJDIR)/p_doors.o \
		$(OBJDIR)/p_enemy.o \
		$(OBJDIR)/p_floor.o \
		$(OBJDIR)/p_inter.o \
		$(OBJDIR)/p_lights.o \
		$(OBJDIR)/p_map.o \
		$(OBJDIR)/p_maputl.o \
		$(OBJDIR)/p_plats.o \
		$(OBJDIR)/p_pspr.o \
		$(OBJDIR)/p_setup.o \
		$(OBJDIR)/p_sight.o \
		$(OBJDIR)/p_spec.o \
		$(OBJDIR)/p_switch.o \
		$(OBJDIR)/p_mobj.o \
		$(OBJDIR)/p_telept.o \
		$(OBJDIR)/p_tick.o \
		$(OBJDIR)/p_saveg.o \
		$(OBJDIR)/p_user.o \
		$(OBJDIR)/r_bsp.o \
		$(OBJDIR)/r_data.o \
		$(OBJDIR)/r_draw.o \
		$(OBJDIR)/r_main.o \
		$(OBJDIR)/r_plane.o \
		$(OBJDIR)/r_segs.o \
		$(OBJDIR)/r_sky.o \
		$(OBJDIR)/r_things.o \
		$(OBJDIR)/w_wad.o \
		$(OBJDIR)/wi_stuff.o \
		$(OBJDIR)/v_video.o \
		$(OBJDIR)/st_lib.o \
		$(OBJDIR)/st_stuff.o \
		$(OBJDIR)/hu_stuff.o \
		$(OBJDIR)/hu_lib.o \
		$(OBJDIR)/s_sound.o \
		$(OBJDIR)/z_zone.o \
		$(OBJDIR)/info.o \
		$(OBJDIR)/sounds.o \
		$(OBJDIR)/r_draw8.o \
		$(OBJDIR)/v_video8.o \
		$(OBJDIR)/r_draw16.o \
		$(OBJDIR)/v_video16.o \
		$(OBJDIR)/r_draw24.o \
		$(OBJDIR)/v_video24.o \
		$(OBJDIR)/r_draw32.o \
		$(OBJDIR)/v_video32.o \
		$(OBJDIR)/i_main.o \
		$(OBJDIR)/i_system.o \
		$(OBJDIR)/i_net.o \
		$(OBJDIR)/i_sound.o \
		$(OBJDIR)/i_video.o \
		$(OBJDIR)/i_zoom.o \
		$(OBJDIR)/i_version.o \
		$(OBJDIR)/sound/sndserv.o \
		$(SYSTEMOBJS)

###############	Rules to build program

all:	 $(PROGRAM) strip $(SYSTEM)

clean:
	rm -rf $(OBJDIR)
	rm -f $(PROGRAM)

strip:
	strip	$(PROGRAM)

$(PROGRAM):	$(OBJS)
	$(LD) $(VIDEOLIBS) $(OBJS) $(SYSTEMLIBS) -o $(PROGRAM)

$(OBJDIR)/%.o:	$(SRCDIR)/%.c
	@if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi
	@if [ ! -d $(OBJDIR)/video ]; then mkdir $(OBJDIR)/video; fi
	@if [ ! -d $(OBJDIR)/sound ]; then mkdir $(OBJDIR)/sound; fi
	@if [ ! -d $(OBJDIR)/control ]; then mkdir $(OBJDIR)/control; fi
	$(CC) $(INCLUDES) $(CFLAGS) $(SYSTEMFLAGS) $(CPUFLAGS) -c $< -o $@

$(OBJDIR)/$(CPU)/%.o:	$(SRCDIR)/$(CPU)/%.s
	@if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi
	@if [ ! -d $(OBJDIR)/$(CPU) ]; then mkdir $(OBJDIR)/$(CPU); fi
	$(AS) -o $@ $< 

###############	System dependent rules

linux:
	@echo "--> Warning: you need to be root to use Svgalib"
	chown root $(PROGRAM)
	chgrp root $(PROGRAM)
	chmod +s $(PROGRAM)

atari:
	fixstk 131072 $(PROGRAM)
