# here's where we actually run the driver, bench. .PHONY: run run: ../../bin/bench "$(CATEGORY)" "$(TEST)" "$(TITLE)" "$(MAKE)" "$(PUBLISH_URL)" "../../$(WORDS)" $(COMPILERS) # --------------------------------------- .PHONY: clean clean_objs # cleaning up a test clean: clean_objs rm -f $(TEST) Main.hbc $(EXTRA_CLEANS) *.status *~ clean_objs: rm -f *.hi *.o # --------------------------------------- # run just a particular few tests # usage: # env ONLY="ghc jhc" make just # .PHONY: just just: @if [ -z "$(ONLY)" ] ; then echo "usage: env ONLY="ghc jhc" make just" ; exit 1 ; fi ( category=`pwd | xargs dirname | xargs basename` ; ../../bin/bench $$category "$(TEST)" "$(TITLE)" "$(MAKE)" "$(PUBLISH_URL)" "../../$(WORDS)" $(ONLY) ; ) # ------------------------------------------------------------ # here's where the actual rules for building each system are defined: # we assume we're in the current test directory. # building ghc-based tests .PHONY: ghc compile-ghc run-ghc ghc: compile-ghc run-ghc compile-ghc: $(GHC) -no-recomp $(GHC_OPTS) $(GHC_EXTRA_OPTS) --make -o $(TEST) $(TEST).$(TEST_SUFFIX) > ghc.compile 2>&1 run-ghc: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(GHC_RUN_OPTS) < $(TEST_INPUT) > $(TEST).ghc.actual 2>&1" || v=$$? ; echo $$v > ghc.status ; exit $$v # ------------------------------------------------------------ # building ghc -fasm tests .PHONY: ghc-asm compile-ghc-asm run-ghc-asm ghc-asm: compile-ghc-asm run-ghc-asm compile-ghc-asm: $(GHC_ASM) -no-recomp $(GHC_ASM_OPTS) $(GHC_ASM_EXTRA_OPTS) --make -o $(TEST) $(TEST).$(TEST_SUFFIX) > ghc-asm.compile 2>&1 run-ghc-asm: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(GHC_ASM_RUN_OPTS) < $(TEST_INPUT) > $(TEST).ghc-asm.actual 2>&1" || v=$$? ; echo $$v > ghc-asm.status ; exit $$v # ------------------------------------------------------------ # building ghc-old based tests .PHONY: ghc-old compile-ghc-old run-ghc-old ghc-old: compile-ghc-old run-ghc-old compile-ghc-old: $(GHC_OLD) -no-recomp $(GHC_OLD_OPTS) $(GHC_OLD_EXTRA_OPTS) --make -o $(TEST) $(TEST).$(TEST_SUFFIX) > ghc-old.compile 2>&1 run-ghc-old: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(GHC_OLD_RUN_OPTS) < $(TEST_INPUT) > $(TEST).ghc-old.actual 2>&1" || v=$$? ; echo $$v > ghc-old.status ; exit $$v # ------------------------------------------------------------ # building hugs tests .PHONY: hugs compile-hugs run-hugs hugs: compile-hugs run-hugs compile-hugs: run-hugs: ../../bin/timeout $(TIMEOUT) "$(HUGS) $(HUGS_OPTS) $(HUGS_RUN_OPTS) $(HUGS_EXTRA_OPTS) $(TEST).$(TEST_SUFFIX) $(TEST_ARGS) < $(TEST_INPUT) > $(TEST).hugs.actual 2>&1" || v=$$? ; echo $$v > hugs.status ; exit $$v # ------------------------------------------------------------ # building ghci tests .PHONY: ghci compile-ghci run-ghci ghci: compile-ghci run-ghci compile-ghci: run-ghci: clean_objs ../../bin/timeout $(TIMEOUT) "$(GHCI) $(GHCI_OPTS) $(GHCI_EXTRA_OPTS) $(GHCI_RUN_OPTS) $(TEST).$(TEST_SUFFIX) $(TEST_ARGS) < $(TEST_INPUT) > $(TEST).ghci.actual 2>&1" || v=$$? ; echo $$v > ghci.status ; exit $$v # ------------------------------------------------------------ # building nhc98 tests .PHONY: nhc98 compile-nhc98 run-nhc98 nhc98: compile-nhc98 run-nhc98 compile-nhc98: hmake -realclean $(NHC_OPTS) $(NHC_EXTRA_OPTS) $(TEST) > nhc98.compile 2>&1 hmake -hc=$(NHC) $(NHC_OPTS) $(NHC_EXTRA_OPTS) $(TEST) >> nhc98.compile 2>&1 run-nhc98: clean_objs ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(NHC_RUN_OPTS) < $(TEST_INPUT) > $(TEST).nhc98.actual 2>&1" || v=$$? ; echo $$v > nhc98.status ; exit $$v # ------------------------------------------------------------ # building yhc tests .PHONY: yhc compile-yhc run-yhc yhc: compile-yhc run-yhc compile-yhc: $(YHC) $(YHC_OPTS) $(YHC_EXTRA_OPTS) $(TEST).$(TEST_SUFFIX) > yhc.compile 2>&1 mv $(TEST).hbc Main.hbc run-yhc: clean_objs ../../bin/timeout $(TIMEOUT) "yhi $(YHC_RUN_OPTS) Main.hbc $(TEST_ARGS) < $(TEST_INPUT) > $(TEST).yhc.actual 2>&1" || v=$$? ; echo $$v > yhc.status ; exit $$v # ------------------------------------------------------------ # building ghc-based tests .PHONY: hbc compile-hbc run-hbc hbc: compile-hbc run-hbc # doesn't spot $? == 0 when hbcmake fails compile-hbc: hmake -hc=hbc -realclean $(HBC_OPTS) $(HBC_EXTRA_OPTS) $(TEST) > hbc.compile 2>&1 $(HBC) $(HBC_OPTS) $(HBC_EXTRA_OPTS) $(TEST) >> hbc.compile 2>&1 run-hbc: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(HBC_RUN_OPTS) $(TEST_ARGS) < $(TEST_INPUT) > $(TEST).hbc.actual 2>&1" || v=$$? ; echo $$v > hbc.status ; exit $$v # ------------------------------------------------------------ # building jhc-based tests (GRIN backend) .PHONY: jhc-grin compile-jhc-grin run-jhc-grin jhc-grin: compile-jhc-grin run-jhc-grin compile-jhc-grin: ../../bin/timeout $(TIMEOUT) "$(JHC_GRIN) $(JHC_GRIN_OPTS) $(JHC_GRIN_EXTRA_OPTS) -o $(TEST) $(TEST).$(TEST_SUFFIX) > jhc-grin.compile 2>&1" run-jhc-grin: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(JHC_GRIN_RUN_OPTS) < $(TEST_INPUT) > $(TEST).jhc-grin.actual 2>&1" || v=$$? ; echo $$v > jhc-grin.status ; exit $$v # ------------------------------------------------------------ # building jhc-based tests (GHC backend) .PHONY: jhc-ghc compile-jhc-ghc run-jhc-ghc jhc-ghc: compile-jhc-ghc run-jhc-ghc compile-jhc-ghc: ../../bin/timeout $(TIMEOUT) "$(JHC_GHC) $(JHC_GHC_OPTS) $(JHC_GHC_EXTRA_OPTS) -o $(TEST) $(TEST).$(TEST_SUFFIX) > jhc-ghc.compile 2>&1" run-jhc-ghc: ../../bin/timeout $(TIMEOUT) "./$(TEST) $(TEST_ARGS) $(JHC_GHC_RUN_OPTS) < $(TEST_INPUT) > $(TEST).jhc-ghc.actual 2>&1" || v=$$? ; echo $$v > jhc-ghc.status ; exit $$v