REG =	soshf   soslc   sossr   sostr   sosstr
OPT =	soshf-o soslc-o sossr-o sostr-o sosstr-o
ALL =	$(REG) $(OPT)

HFLAGS  = -dynamic
HOFLAGS = $(HFLAGS) -O2

all: $(ALL)

run: run-ghc run-reg run-opt

soshf: soshf.hs
	ghc $(HFLAGS) -o $@ $<
	rm $@.o

soshf-o: soshf.hs
	ghc $(HOFLAGS) -o $@ $<

soslc: soslc.hs
	ghc $(HFLAGS) -o $@ $<
	rm $@.o

soslc-o: soslc.hs
	ghc $(HOFLAGS) -o $@ $<

sossr: sossr.hs
	ghc $(HFLAGS) -o $@ $<
	rm $@.o

sossr-o: sossr.hs
	ghc $(HOFLAGS) -o $@ $<

sostr: sostr.hs
	ghc $(HFLAGS) -o $@ $<
	rm $@.o

sostr-o: sostr.hs
	ghc $(HOFLAGS) -o $@ $<

sosstr: sosstr.hs
	ghc $(HFLAGS) -o $@ $<
	rm $@.o

sosstr-o: sosstr.hs
	ghc $(HOFLAGS) -o $@ $<

run-ghc: $(REG)
	@for f in $(REG); do \
	    /bin/echo -n "./$$f.hs: "; \
	    /usr/bin/time runghc ./$$f.hs; \
	done

run-reg: $(REG)
	@for f in $(REG); do \
	    /bin/echo -n "./$$f: "; \
	    /usr/bin/time ./$$f; \
	done

run-opt: $(OPT)
	@for f in $(OPT); do \
	    /bin/echo -n "./$$f: " ; \
	    /usr/bin/time ./$$f; \
	done

clean:
	rm -f $(ALL) *.o *.hi
