#
# GNU makefile, for 'gp-music' application.
#
# "make" or "make all" to build executable.
# "make clean" to delete object code.
#
INCLUDEPATH=-I. 
XMLIBPATH=.

TARGET = gp-music
KERNELDIR = ./kernel
CC = gcc
CFLAGS = -O2 -mieee-fp -DUSEVFORK -I. -I$(KERNELDIR)
LFLAGS=-O -s
XCFLAGS=-O2 -fpic
XMCFLAGS= -O2 -m486 -Wall -I. ${INCLUDEPATH} ${LIBPATH}
LIBS=-lforms -L/usr/X11R6/lib -lX11 -lm

#
# Object/Header Specification
#

uobjects = function.o app.o xm_lib.o main.o populate.o crossovr.o

uheaders = appdef.h app.h function.h xm_lib.h gp-form.h protoapp.h

kobjects = gp.o eval.o tree.o change.o reproduc.o \
	mutate.o select.o tournmnt.o bstworst.o fitness.o genspace.o \
	exch.o ephem.o ckpoint.o event.o pretty.o individ.o \
	params.o random.o memory.o output.o

kheaders = event.h defines.h types.h protos.h 

fheaders = gp-form.h forms.h

fobjects = gp-form.o gp-form_cb.o

#
# Target Rules
#

.PHONY : all clean

all : xm-parse xm-pattern-generate xm-rand-pattern $(TARGET)

lilgp.h = $(addprefix $(KERNELDIR)/,$(kheaders)) $(uheaders)

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

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

$(kobjects) $(uobjects) : $(lilgp.h)

$(fobjects) : %.o : %.c $(fheaders)
	-$(CC) -c $(XCFLAGS) $< -o $@

$(TARGET) : $(kobjects) $(uobjects) $(fobjects)
	$(CC) $(LFLAGS) -o $@ $^ $(LIBS) 

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

xm-parse: xm-parse.o xm_lib.o $(XMLIBPATH)/xm_lib.h
	$(CC) $(XMCFLAGS) -o xm-parse xm-parse.o xm_lib.o

xm-pattern-generate: xm-pattern-generate.o xm_lib.o $(XMLIBPATH)/xm_lib.h
	$(CC) $(XMCFLAGS) -o xm-pattern-generate xm-pattern-generate.o \
	xm_lib.o -lm

xm-rand-pattern: xm-rand-pattern.o xm_lib.o $(XMLIBPATH)/xm_lib.h
	$(CC) $(XMCFLAGS) -o xm-rand-pattern xm-rand-pattern.o \
	xm_lib.o -lm

clean :
	\rm -f *.o $(kobjects) $(uobjects) *~ core





