--- /dev/null
+DIRS = ocaml hbugs gTopLevel
+
+DIRS_BYTE = $(patsubst %,%.byte,$(DIRS))
+DIRS_OPT = $(patsubst %,%.opt,$(DIRS))
+DIRS_CLEAN = $(patsubst %,%.clean,$(DIRS))
+all: byte
+byte: $(DIRS_BYTE)
+opt: $(DIRS_OPT)
+world: byte opt
+clean: $(DIRS_CLEAN)
+%.byte:
+ $(MAKE) -C $*/ all
+%.opt:
+ $(MAKE) -C $*/ opt
+%.clean:
+ $(MAKE) -C $*/ clean
+.PHONY: all byte opt world clean