KERNELBINDIR	= $(SNNSDIR)/kernel/bin/$(MACHINENAME)
KERNELDEMODIR	= $(SNNSDIR)/kernel/bin/$(MACHINENAME)
KERNELLIBDIR	= $(SNNSDIR)/kernel/bin/$(MACHINENAME)


# -- C-Compiler Configuration --

CC = $(COMPILER)
CFLAGS = $(CCFLAGS) $(FPOPTIONS)

# -- Archive Configuration --

AR              = ar
ARFLAGS 	= rc
RANLIB          = ranlib

# -- Libraries --

LIBKERNEL	= libkernel.a
LIBFUNCS	= libfunc.a

# -- Source files --

DEMOSOURCE	= netlearn.c\
		netperf.c snnsbat.c

UTILIY_SOURCE	= make_tbl.c calc_err.c

M_ART_SOURCE	= m_art.c
M_ART_MOD_SRC   = m_art1.c m_art2.c m_artmap.c
ART_SOURCE	= $(M_ART_SOURCE) $(M_ART_MOD_SRC)


SOURCES 	= func_mac.h func_tbl.c glob_typ.h init_f.c\
		kernel.c kernel.h kr_const.h kr_def.h kr_funcs.c\
		kr_funcs.h kr_io.c kr_io.h kr_mac.h kr_mem.c kr_mem.h\
		kr_typ.h kr_ui.c kr_ui.h krui_typ.h learn_f.c\
		strdup.c strdup.h kr_td.c kr_td.h\
		netperf.c version.h random.h snnsbat.c strdup.c\
		trans_f.c update_f.c tbl_func.c sigmoid.tbl\
                kr_inversion.h kr_inversion.c matrix.h matrix.c ext_typ.h\
		kr_art.h krart_df.h\
		kr_art.c art_typ.h art_ui.c art_ui.h arttr_f.c\
                kr_art1.c kr_art1.h kr_art2.c kr_art2.h kr_amap.c kr_amap.h\
		cc_learn.c cc_learn.h rcc_learn.c rcc_learn.h\
		cc_rcc.c cc_rcc.h cc_rcc_topo.c cc_rcc_topo.h\
                dlvq_learn.c dlvq_learn.h\
		$(DEMOSOURCE) $(UTILIY_SOURCE) $(ART_SOURCE)

# -- Object files --

KERNELOBJECTS	= kr_mem.o kernel.o kr_ui.o kr_io.o kr_inversion.o\
		strdup.o\
		kr_art.o art_ui.o kr_art1.o kr_art2.o kr_amap.o

USR_FUNC_OBJECTS= kr_funcs.o trans_f.o update_f.o init_f.o learn_f.o\
		kr_td.o\
		tbl_func.o func_tbl.o matrix.o arttr_f.o cc_learn.o\
		rcc_learn.o cc_rcc.o cc_rcc_topo.o\
                dlvq_learn.o

DEMOOBJECTS	= $(DEMOSOURCE:.c=.o)

ART_OBJECTS	= $(M_ART_MOD_SRC:.c=.o)
ART_MAIN_OBJ	= $(M_ART_SOURCE:.c=.o)


# -- Demo programs  --
KERNELDEMO	= $(DEMOSOURCE:.c=)

# -- ART programs  --
ART_PROGS	= $(M_ART_SOURCE:.c=)


# Rules

.KEEP_STATE:

default:  $(LIBKERNEL) $(LIBFUNCS)

$(LIBKERNEL): $(KERNELOBJECTS)
	$(AR) $(ARFLAGS) $(LIBKERNEL) $(KERNELOBJECTS)
	$(RANLIB) $(LIBKERNEL)

$(LIBFUNCS): $(USR_FUNC_OBJECTS)
	$(AR) $(ARFLAGS) $(LIBFUNCS) $(USR_FUNC_OBJECTS)
	$(RANLIB) $(LIBFUNCS)

$(KERNELDEMO): $(LIBKERNEL) $(LIBFUNCS) $(DEMOOBJECTS)
	$(CC) $@.o $(LIBKERNEL) $(LIBFUNCS) -lm -o $@

$(ART_PROGS): $(LIBKERNEL) $(LIBFUNCS) $(ART_OBJECTS) $(ART_MAIN_OBJ)
	$(CC) $@.o $(ART_OBJECTS) $(LIBKERNEL) $(LIBFUNCS) -lm -o $@

demo:	$(KERNELDEMO) $(ART_PROGS)

all:	$(KERNELDEMO) $(ART_PROGS)

install:
	strip $(KERNELDEMO) $(ART_PROGS)
	cp $(KERNELDEMO) $(KERNELBINDIR)
	cp $(LIBKERNEL) $(KERNELLIBDIR)
	cp $(LIBFUNCS) $(KERNELLIBDIR)
	cp $(KERNELDEMO) $(KERNELDEMODIR)
	cp $(ART_PROGS) $(KERNELDEMODIR)
	$(RANLIB) $(KERNELLIBDIR)/$(LIBKERNEL)
	$(RANLIB) $(KERNELLIBDIR)/$(LIBFUNCS)
# because of checking of timestamps this is neccessary !

list:
	cat $(SOURCES) > kernelsrc.all

clean:
	/bin/rm -f $(KERNELOBJECTS) $(USR_FUNC_OBJECTS) $(DEMOOBJECTS)
	/bin/rm -f $(LIBKERNEL) $(LIBFUNCS) $(KERNELDEMO)
	/bin/rm -f $(ART_OBJECTS) $(ART_PROGS)

tarfile:
	tar cvf kernel.tar $(SOURCES) Makefile*
	compress kernel.tar
