#
# MAKEFILE.GCC
#   for building the DJGPP version of the GRX library
#   usage: make [-DPLANE=<planes>] [-DMODEL=<Turbo C memory model>] [-DDEBUG]
#
CC     = gcc -O2
CFLAGS = -fno-strength-reduce -fomit-frame-pointer -fkeep-inline-functions -fPIC
#CFLAGS = -fno-strength-reduce -fkeep-inline-functions -fPIC

PLANE = 509

MAJOR_VER	= 1
MINOR_VER	= 0.4
VERSION		= $(MAJOR_VER).$(MINOR_VER)


GSTAMP= stamp.gcc

MODE_X= 32
M_8514= 64
M_S3=	128
MACH32_8= 256
MACH32_16= 512
#
# compiler options
#
CPPOPT= -I../include -DGRXPLANES=$(PLANE)
GCCOPT= $(CFLAGS) $(CPPOPT) $(GCCDBG)

#
# default rules:
#    C -> ASM rules are there to look at the generated code
#    when using inline assembly

.c.o:
	$(CC) -c $(GCCOPT) $*.c

.c.oo:
	$(CC) -c -Wall $(CPPOPT) $(GCCDBG) $*.c -o $*.oo

.c.s:
	$(CC) -S $(GCCOPT) $*.c

.s.o:
	$(CC) -c $*.s

#
# default targets:
#
all: $(GSTAMP) libgrx.so.$(VERSION)

clean :
	@rm -f $(GSTAMP) $(GCCLIB) $(GCCOBJ) $(GEVENT)

#
# stamp files for keeping the objects consistent
#
$(GSTAMP): ../include/grx.h
	-rm -f stamp*.gcc
	echo stamp >$(GSTAMP)
#
# objects for building the DJGPP library
#
GINIT=  layout.o     setmode.o	  context.o    setclip.o    colors.o

GMISC=  fileutil.o   reslist.o	  bestfont.o   gmalloc.o    vmalloc.o	 \
        makepat.o    mouse.o      cursor.o

GDRAW=  clear.o	     plot.o	  hline.o      vline.o	    line.o	 \
	box.o	     fillbox.o	  frambox.o    circle.o	    pixel.o	 \
	bitblt.o     drawpoly.o	  fillpoly.o   patfbox.o    scancnvx.o	 \
	scanpoly.o   scanfill.o	  scanpatt.o   fillcvxp.o   genellip.o	 \
	fillcirc.o   patfpoly.o	  custcirc.o   \
	patfcvxp.o   patfcirc.o	  patfplot.o   patfline.o   \
	solidln.o    solidpix.o	  scanellp.o   polygon.o    thicklne.o	 \
	custline.o   custpoly.o	  pattline.o   pattcirc.o   pattpoly.o

GUSER=  usercord.o   uplot.o	  uline.o      uhline.o	    uvline.o	 \
	ubox.o	     ufillbox.o	  uframbox.o   ucircle.o    upixel.o	 \
	ubestfnt.o   udrawtxt.o

GNCLIP= plotnc.o     linenc.o	  vlinenc.o    hlinenc.o    boxnc.o	 \
	fillbxnc.o   frambxnc.o	  pixelnc.o    bitbltnc.o

GTEXT=  drawtext.o   dumptext.o	  loadfont.o   textsize.o   

#
# DJGPP version specific modules
#
GCCAUX= lnxmode.o   gppconio.o  soundIt.o



#
# low-level mode-dependent drivers
#
#

P1G=	p1pixrd.o	p1pixset.o   \
	p1pixcol.o	p1pixrow.o   \
	p1pixblk.o	p1bitblt.o   \
	p1line.o	p1char.o     \
	p1fillp.o

P4G=	p4pixrd.o	p4pixset.o  \
	p4pixrow.o	p4pixcol.o  \
	p4pixblk.o	p4bitblt.o  \
	p4line.o	p4char.o    \
	p4fillp.o	p4init.o

P8G=	p8pixrd.o	p8pixset.o   \
	p8pixrow.o	p8pixcol.o   \
	p8pixblk.o	p8bitblt.o   \
	p8line.o	p8char.o     \
	p8fillp.o	p8init.o     

PHG=	phpixrd.o	phpixset.o   \
	phpixrow.o	phpixcol.o   \
	phpixblk.o	phbitblt.o   \
	phline.o	phchar.o     \
	phfillp.o	phinit.o

PXG=	pxpixrd.o	pxpixset.o   \
	pxpixrow.o	pxpixcol.o   \
	pxpixblk.o	pxbitblt.o   \
	pxline.o	pxchar.o     \
	pxfillp.o

PIG=	pipixrd.o	pipixset.o   \
	pipixrow.o	pipixcol.o   \
	pipixblk.o	pibitblt.o   \
	piline.o	pichar.o     \
	pifillp.o	piinit.o

PAC16=	m16pixrd.o	m16pixset.o   \
	m16pixrow.o	m16pixcol.o   \
	m16pixblk.o	m16bitblt.o   \
	m16line.o	m16char.o     \
	m16fillp.o	m16init.o

PSG=	pschar.o	psfillp.o

SWG=	swpixrd.o	swpixset.o   \
	swpixrow.o	swpixcol.o   \
	swpixblk.o	swbitblt.o   \
	swline.o	swchar.o     \
	swfillp.o	voiddrv.o

#
# build the DJGPP library
#
GCCOBJ= $(GINIT)    $(GMISC)	 $(GDRAW)    $(GUSER)	$(GNCLIP)   \
	$(GTEXT)    $(P1G)	 $(P4G)	     $(P8G)	$(PHG)	    \
	$(PXG)	    $(PIG)       $(PSG)      $(SWG)     $(PAC16)    \
	$(GCCAUX)   _todo.o

libgrx.so.$(VERSION): $(GCCOBJ)
	$(CC) -s -shared -Wl,-soname,libgrx.so.$(MAJOR_VER) -o libgrx.so.$(VERSION) $(GCCLIB) $(GCCOBJ) $(GEVENT)
	-mv libgrx.so.$(VERSION) ../libs

#
# dependencies
#
INC=	      ../include
GRX_H=	      $(INC)/grx.h libgrx.h
LINECLIP_H=   lineclip.h scale.h clipping.h
USERCORD_H=   usercord.h scale.h
P4_H=	      $(GRX_H) p4.h vgaregs.h
P8_H=	      $(GRX_H) p8.h vgaregs.h
P16_H=	      $(GRX_H) p16.h
P8514A_H=     $(GRX_H) p8514a.h reg8514a.h


rawkey.o:     rawkey.h
bestfont.o:   $(GRX_H) $(INC)/grxfile.h gmalloc.h
bitblt.o:     $(GRX_H) clipping.h
bitbltnc.o:   $(GRX_H)
box.o:	      $(GRX_H)
boxnc.o:      $(GRX_H) fakeclip.h box.c
circle.o:     $(GRX_H)
clear.o:      $(GRX_H)
colors.o:     $(GRX_H) interrup.h gmalloc.h reg8514a.h
context.o:    $(GRX_H) clipping.h gmalloc.h
cursor.o:     $(GRX_H) $(INC)/mousex.h gmalloc.h
custcirc.o:   $(GRX_H) thicklne.h
custline.o:   $(GRX_H) thicklne.h
custpoly.o:   $(GRX_H) thicklne.h
drawpoly.o:   $(GRX_H)
drawtext.o:   $(GRX_H) $(INC)/grxfont.h clipping.h gmalloc.h memfill.h memcopy.h
dumptext.o:   $(GRX_H) $(INC)/grxfont.h clipping.h
fileutil.o:   $(GRX_H) $(INC)/grxfile.h
fillbox.o:    $(GRX_H) clipping.h
fillbxnc.o:   $(GRX_H) fakeclip.h fillbox.c
fillcirc.o:   $(GRX_H)
fillcvxp.o:   $(GRX_H)
fillpoly.o:   $(GRX_H)
frambox.o:    $(GRX_H)
frambxnc.o:   $(GRX_H) fakeclip.h frambox.c
genellip.o:   $(GRX_H)
gmalloc.o:    gmalloc.h
hline.o:      $(GRX_H) clipping.h
hlinenc.o:    $(GRX_H) fakeclip.h hline.c
layout.o:     $(GRX_H)
line.o:	      $(GRX_H) $(LINECLIP_H)
linenc.o:     $(GRX_H) fakeclip.h line.c
loadfont.o:   $(GRX_H) $(INC)/grxfile.h $(INC)/grxfont.h gmalloc.h
makepat.o:    $(GRX_H)
mouse.o:      $(GRX_H) $(INC)/mousex.h interrup.h clipping.h $(EVTINC)
patfbox.o:    $(GRX_H) clipping.h
patfcirc.o:   $(GRX_H)
patfcvxp.o:   $(GRX_H)
patfline.o:   $(GRX_H) $(LINECLIP_H)
patfplot.o:   $(GRX_H) clipping.h
patfpoly.o:   $(GRX_H)
pattcirc.o:   $(GRX_H) thicklne.h
pattline.o:   $(GRX_H) thicklne.h
pattpoly.o:   $(GRX_H) thicklne.h
pixel.o:      $(GRX_H) clipping.h
pixelnc.o:    $(GRX_H) fakeclip.h pixel.c
plot.o:	      $(GRX_H) clipping.h
plotnc.o:     $(GRX_H) fakeclip.h plot.c
polygon.o:    $(GRX_H)
reslist.o:    $(GRX_H) $(INC)/grxfile.h gmalloc.h
scanellp.o:   $(GRX_H) clipping.h
scancnvx.o:   $(GRX_H) clipping.h scale.h
scanfill.o:   $(GRX_H) clipping.h
scanpatt.o:   $(GRX_H) clipping.h
scanpoly.o:   $(GRX_H) clipping.h scale.h gmalloc.h
setclip.o:    $(GRX_H) clipping.h
setmode.o:    $(GRX_H) $(INC)/grdriver.h
solidln.o:    $(GRX_H) lineclip.h
solidpix.o:   $(GRX_H) clipping.h
textsize.o:   $(GRX_H) $(INC)/grxfont.h
thicklne.o:   $(GRX_H) thicklne.h clipping.h
ubestfnt.o:   $(GRX_H) scale.h
ubox.o:	      $(GRX_H) $(USERCORD_H)
ucircle.o:    $(GRX_H) $(USERCORD_H)
udrawtxt.o:   $(GRX_H) $(USERCORD_H)
ufillbox.o:   $(GRX_H) $(USERCORD_H)
uframbox.o:   $(GRX_H) $(USERCORD_H)
uhline.o:     $(GRX_H) $(USERCORD_H)
uline.o:      $(GRX_H) $(USERCORD_H)
upixel.o:     $(GRX_H) $(USERCORD_H)
uplot.o:      $(GRX_H) $(USERCORD_H)
usercord.o:   $(GRX_H) $(USERCORD_H)
uvline.o:     $(GRX_H) $(USERCORD_H)
vline.o:      $(GRX_H) clipping.h
vlinenc.o:    $(GRX_H) fakeclip.h vline.c
vmalloc.o:    gmalloc.h

p1bitblt.o:   $(GRX_H)
p1char.o:     $(GRX_H)
p1fillp.o:    $(GRX_H)
p1line.o:     $(GRX_H)
p1pixblk.o:   $(GRX_H)
p1pixcol.o:   $(GRX_H)
p1pixrd.o:    $(GRX_H)
p1pixrow.o:   $(GRX_H)
p1pixset.o:   $(GRX_H)

p4init.oo:    $(P4_H) gmalloc.h $(INC)/grdriver.h
p4bitblt.oo:  $(P4_H) memcopy.h bitcopy.h gmalloc.h
p4char.oo:    $(P4_H) memfill.h memcopy.h bitdraw.h
p4fillp.oo:   $(P4_H) memfill.h memcopy.h
p4line.oo:    $(P4_H) bitdraw.h
p4pixblk.oo:  $(P4_H) memfill.h memcopy.h
p4pixcol.oo:  $(P4_H) memfill.h
p4pixrd.oo:   $(P4_H)
p4pixrow.oo:  $(P4_H) memfill.h memcopy.h
p4pixset.oo:  $(P4_H)

p8init.o:     $(P8_H) $(INC)/grdriver.h
p8bitblt.o:   $(P8_H) memcopy.h gmalloc.h
p8char.o:     $(P8_H) bytedraw.h
p8fillp.o:    $(P8_H) memcopy.h bytedraw.h gmalloc.h
p8line.o:     $(P8_H) bytedraw.h
p8pixblk.o:   $(P8_H) memfill.h
p8pixcol.o:   $(P8_H) memfill.h
p8pixrd.o:    $(P8_H)
p8pixrow.o:   $(P8_H) memfill.h
p8pixset.o:   $(P8_H)

piinit.o:     $(P8514A_H)
pibitblt.o:   $(P8514A_H)
pichar.o:     $(P8514A_H)
pifillp.o:    $(P8514A_H)
piline.o:     $(P8514A_H)
pipixblk.o:   $(P8514A_H)
pipixcol.o:   $(P8514A_H)
pipixrd.o:    $(P8514A_H)
pipixrow.o:   $(P8514A_H)
pipixset.o:   $(P8514A_H)

m16init.o:     m16.h
m16bitblt.o:   m16.h
m16char.o:     m16.h
m16fillp.o:    m16.h
m16line.o:     m16.h
m16pixblk.o:   m16.h
m16pixcol.o:   m16.h
m16pixrd.o:    m16.h
m16pixrow.o:   m16.h
m16pixset.o:   m16.h

pschar.o:     $(P8514A_H)
psfillp.o:    $(P8514A_H)

pxbitblt.o:   $(GRX_H)
pxchar.o:     $(GRX_H)
pxfillp.o:    $(GRX_H)
pxline.o:     $(GRX_H)
pxpixblk.o:   $(GRX_H)
pxpixcol.o:   $(GRX_H)
pxpixrd.o:    $(GRX_H)
pxpixrow.o:   $(GRX_H)
pxpixset.o:   $(GRX_H)

swbitblt.o:   $(GRX_H)
swchar.o:     $(GRX_H)
swfillp.o:    $(GRX_H)
swline.o:     $(GRX_H)
swpixblk.o:   $(GRX_H)
swpixcol.o:   $(GRX_H)
swpixrd.o:    $(GRX_H)
swpixrow.o:   $(GRX_H)
swpixset.o:   $(GRX_H)
voiddrv.o:    $(GRX_H)

phinit.o:     $(P16_H)
phbitblt.o:   $(P16_H) memcopy.h gmalloc.h
phchar.o:     $(P16_H) worddraw.h
phfillp.o:    $(P16_H) memcopy.h worddraw.h
phline.o:     $(P16_H) worddraw.h
phpixblk.o:   $(P16_H) memfill.h
phpixcol.o:   $(P16_H) memfill.h
phpixrd.o:    $(P16_H)
phpixrow.o:   $(P16_H) memfill.h
phpixset.o:   $(P16_H)

