### Version

### Files

CFILES = main.c parseopts.c pcoreipc.c forker.c \
 	 system.c fileio.c socket.c \
	 runmain.c llobjects.c runloop.c threads.c schedule.c memory.c \
	 rtlink.c goose.c aout.c coff.c elf.c \
	 minisl.c words.c arch.c

HFILES = includes.h limits.h \
	 main.h parseopts.h pcoreipc.h forker.h \
 	 system.h fileio.h socket.h \
	 runmain.h llobjects.h runloop.h threads.h schedule.h memory.h \
	 rtlink.h goose.h aout.h coff.h elf.h \
	 minisl.h words.h arch.h

OFILES = main.o parseopts.o pcoreipc.o forker.o \
 	 system.o fileio.o socket.o \
	 runmain.o llobjects.o runloop.o threads.o schedule.o memory.o \
	 rtlink.o goose.o aout.o coff.o elf.o \
	 minisl.o words.o arch.o


LIBFILES = thread/libthreads.a

MFILES = Makefile build.sh minisl.mc words.mc

DFILES = README TODO


### Utilities
CC = gcc
CPP = gcc -E


### Flags
SYSFLAGS = -DLINUX_GCC
DBGFLAGS = -DDBGLVL=1000
CFLAGS := $(CFLAGS) $(DBGFLAGS) $(SYSFLAGS)
LDFLAGS := $(LDFLAGS)

TEST_PARAMS = -c '1 2 + .'


### Rules
.SUFFIXES:	.c .h .s .S .i .o .a .co1 .ho1 .co2 .ho2 .mc

%.co1:		%.mc build.sh
	./build.sh meta_c $<

%.co2:		%.mc build.sh $<
	./build.sh meta_c $<

%.ho1:		%.mc build.sh $<
	./build.sh meta_c $<

%.ho2:		%.mc build.sh $<
	./build.sh meta_c $<



### Main Targets

all: configure oslpcore


### Dependencies

ifeq (.depend,$(wildcard .depend))
include .depend
else
CONFIGURATION = depend
endif

configure: $(CONFIGURATION)

depend dep:
	for i in *.c;do $(CPP) -M $$i;done > .depend~
	mv .depend~ .depend


### Other targets

someclean:
	-$(RM) *.i core zap out err *.log /tmp/_*.[CH]O[12]

clean:		someclean
	-$(RM) *.o *.a *.s .depend *.[ch]o[12]

veryclean:	clean
	-$(RM) oslpcore
	$(MAKE) -C thread clean

thread/libthreads.a: thread/thread.o thread/debug.o thread/queue.o
	$(MAKE) -C thread

oslpcore: $(OFILES) $(LIBFILES)
	$(CC) $(LDFLAGS) -o oslpcore $(OFILES) thread/libthreads.a

test: all
	./build.sh test $(TEST_PARAMS)
