1#************************************************************************** 2#* * 3#* OCaml * 4#* * 5#* Xavier Clerc, SED, INRIA Rocquencourt * 6#* * 7#* Copyright 2010 Institut National de Recherche en Informatique et * 8#* en Automatique. * 9#* * 10#* All rights reserved. This file is distributed under the terms of * 11#* the GNU Lesser General Public License version 2.1, with the * 12#* special exception on linking described in the file LICENSE. * 13#* * 14#************************************************************************** 15 16BASEDIR=../.. 17EXECNAME=program$(EXE) 18 19ABCDFILES=backtrace.ml 20OTHERFILES=backtrace2.ml backtrace3.ml raw_backtrace.ml \ 21 backtrace_deprecated.ml backtrace_slots.ml 22INLININGFILES=inline_test.ml inline_traversal_test.ml 23OTHERFILESNOINLINING=pr6920_why_at.ml pr6920_why_swallow.ml 24OTHERFILESNOINLINING_NATIVE=backtraces_and_finalizers.ml 25 26# Keep only filenames, lines and character ranges 27LOCATIONFILTER=grep -oE \ 28 '[a-zA-Z_]+\.ml(:[0-9]+)?|(line|characters) [0-9-]+' 29 30default: 31 @$(MAKE) byte 32 @if $(BYTECODE_ONLY); then $(MAKE) skip ; else $(MAKE) native; fi 33 34.PHONY: byte 35byte: 36 @for file in $(ABCDFILES); do \ 37 rm -f program program.exe; \ 38 $(OCAMLC) -g -o $(EXECNAME) $$file; \ 39 for arg in a b c d ''; do \ 40 printf " ... testing '$$file' with ocamlc and argument '$$arg':"; \ 41 F="`basename $$file .ml`"; \ 42 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 43 $(OCAMLRUN) $(EXECNAME) $$arg || true) \ 44 >$$F.$$arg.byte.result 2>&1; \ 45 $(DIFF) $$F.$$arg.byte.reference $$F.$$arg.byte.result >/dev/null \ 46 && echo " => passed" || echo " => failed"; \ 47 done; \ 48 done 49 @for file in $(OTHERFILES) $(OTHERFILESNOINLINING); do \ 50 rm -f program program.exe; \ 51 $(OCAMLC) -g -o $(EXECNAME) $$file; \ 52 printf " ... testing '$$file' with ocamlc:"; \ 53 F="`basename $$file .ml`"; \ 54 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 55 $(OCAMLRUN) $(EXECNAME) $$arg || true) \ 56 >$$F.byte.result 2>&1; \ 57 $(DIFF) $$F.byte.reference $$F.byte.result >/dev/null \ 58 && echo " => passed" || echo " => failed"; \ 59 done; 60 @for file in $(INLININGFILES); \ 61 do \ 62 rm -f program program.exe; \ 63 $(OCAMLC) -g -o $(EXECNAME) $$file; \ 64 printf " ... testing '$$file' with ocamlc:"; \ 65 F="`basename $$file .ml`"; \ 66 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 67 $(OCAMLRUN) $(EXECNAME) $$arg 2>&1 || true) \ 68 | $(LOCATIONFILTER) >$$F.byte.result 2>&1; \ 69 $(DIFF) $$F.byte.reference $$F.byte.result >/dev/null \ 70 && echo " => passed" || echo " => failed"; \ 71 done 72 73.PHONY: skip 74skip: 75 @for file in $(ABCDFILES); do \ 76 for arg in a b c d ''; do \ 77 echo " ... testing '$$file' with ocamlopt and argument '$$arg': \ 78 => skipped"; \ 79 done; \ 80 done 81 @for file in $(OTHERFILES) $(OTHERFILESNOINLINING) \ 82 $(OTHERFILESNOINLINING_NATIVE) $(INLININGFILES); do \ 83 echo " ... testing '$$file' with ocamlopt: => skipped"; \ 84 done 85 86.PHONY: native 87native: 88 @for file in $(ABCDFILES); do \ 89 rm -f program program.exe; \ 90 $(OCAMLOPT) -g -o $(EXECNAME) $$file; \ 91 for arg in a b c d ''; do \ 92 printf " ... testing '$$file' with ocamlopt and argument '$$arg':";\ 93 F="`basename $$file .ml`"; \ 94 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 95 ./$(EXECNAME) $$arg || true) \ 96 >$$F.$$arg.native.result 2>&1; \ 97 $(DIFF) $$F.$$arg.native.reference $$F.$$arg.native.result \ 98 >/dev/null \ 99 && echo " => passed" || echo " => failed"; \ 100 done; \ 101 done 102 @for file in $(OTHERFILES); do \ 103 rm -f program program.exe; \ 104 $(OCAMLOPT) -g -o $(EXECNAME) $$file; \ 105 printf " ... testing '$$file' with ocamlopt:"; \ 106 F="`basename $$file .ml`"; \ 107 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 108 ./$(EXECNAME) $$arg || true) \ 109 >$$F.native.result 2>&1; \ 110 $(DIFF) $$F.native.reference $$F.native.result >/dev/null \ 111 && echo " => passed" || echo " => failed"; \ 112 done; 113 @for file in $(OTHERFILESNOINLINING) $(OTHERFILESNOINLINING_NATIVE); \ 114 do \ 115 rm -f program program.exe; \ 116 $(OCAMLOPT) -inline 0 -g -o $(EXECNAME) $$file; \ 117 printf " ... testing '$$file' with ocamlopt:"; \ 118 F="`basename $$file .ml`"; \ 119 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 120 ./$(EXECNAME) $$arg || true) \ 121 >$$F.native.result 2>&1; \ 122 $(DIFF) $$F.native.reference $$F.native.result >/dev/null \ 123 && echo " => passed" || echo " => failed"; \ 124 done; 125 @for file in $(INLININGFILES); \ 126 do \ 127 rm -f program program.exe; \ 128 $(OCAMLOPT) -g -o $(EXECNAME) $$file; \ 129 printf " ... testing '$$file' with ocamlopt:"; \ 130 F="`basename $$file .ml`"; \ 131 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 132 ./$(EXECNAME) $$arg 2>&1 || true) \ 133 | $(LOCATIONFILTER) >$$F.native.result; \ 134 $(DIFF) $$F.native.reference $$F.native.result >/dev/null \ 135 && echo " => passed" || echo " => failed"; \ 136 rm -f program program.exe; \ 137 $(OCAMLOPT) -g -o $(EXECNAME) -O3 $$file; \ 138 printf " ... testing '$$file' with ocamlopt -O3:"; \ 139 F="`basename $$file .ml`"; \ 140 (OCAMLRUNPARAM=$$OCAMLRUNPARAM,b=1 \ 141 ./$(EXECNAME) $$arg 2>&1 || true) \ 142 | $(LOCATIONFILTER) >$$F.O3.result; \ 143 $(DIFF) $$F.native.reference $$F.O3.result >/dev/null \ 144 && echo " => passed" || echo " => failed"; \ 145 done 146 147 148.PHONY: promote 149promote: defaultpromote 150 151.PHONY: clean 152clean: defaultclean 153 @rm -f *.result program program.exe 154 155include $(BASEDIR)/makefiles/Makefile.common 156