#############################################################################
#############################################################################
#
#	Makefile for PmHeretic
#
#	by Patrice Mandin
#
#	Compilation time :
#	Atari Falcon	Motorola 68030/16	1 h  04 mn
#	PC		Intel Pentium/100	3 mn 10 s
#	PC		Cyrix 6x86 P200+/150	1 mn 35 s
#	PC		Amd K6-2/333		     35 s
#
#############################################################################
#############################################################################

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

SYSTEM=		atari
CPU=		m68k

###############	Configuration definition

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)

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

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

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

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

###############	Parse configuration

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

###############	Compiler options

CC=		gcc
AS=		as
LD=		gcc

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

# Program name , sources and objects directories

PROGRAM=	heretic

OBJS=		\
		$(OBJDIR)/am_map.o \
		$(OBJDIR)/ct_chat.o \
		$(OBJDIR)/d_main.o \
		$(OBJDIR)/d_net.o \
		$(OBJDIR)/f_finale.o \
		$(OBJDIR)/g_game.o \
		$(OBJDIR)/in_lude.o \
		$(OBJDIR)/info.o \
		$(OBJDIR)/m_fixed.o \
		$(OBJDIR)/m_misc.o \
		$(OBJDIR)/m_swap.o \
		$(OBJDIR)/mn_menu.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_mobj.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_telept.o \
		$(OBJDIR)/p_tick.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_things.o \
		$(OBJDIR)/sb_bar.o \
		$(OBJDIR)/sounds.o \
		$(OBJDIR)/tables.o \
		$(OBJDIR)/v_video.o \
		$(OBJDIR)/w_wad.o \
		$(OBJDIR)/z_zone.o \
		$(OBJDIR)/r_draw8.o \
		$(OBJDIR)/r_draw16.o \
		$(OBJDIR)/r_draw24.o \
		$(OBJDIR)/r_draw32.o \
		$(OBJDIR)/v_video8.o \
		$(OBJDIR)/v_video16.o \
		$(OBJDIR)/v_video24.o \
		$(OBJDIR)/v_video32.o \
		$(OBJDIR)/s_sound.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)
