--- /dev/null
+WORKDIR=Product
+
+BUILD_ROOT=$(WORKDIR)/obj
+INSTALL_ROOT?=$(WORKDIR)/out
+
+TIMESTAMP_CONFIGURE=$(WORKDIR)/CONFIGURE
+TIMESTAMP_BUILD=$(WORKDIR)/BUILD
+TIMESTAMP_INSTALL=$(WORKDIR)/INSTALL
+
+all: build
+
+###
+### Command (public)
+###
+configure: configure_internal
+
+build: build_internal
+
+install: $(TIMESTAMP_INSTALL)
+
+clean:
+ rm -rf $(WORKDIR)
+
+###
+### Command (internal)
+###
+configure_internal:
+ mkdir -p $(BUILD_ROOT)
+ cd $(BUILD_ROOT) && cmake $(CURDIR) -DCMAKE_INSTALL_PREFIX=$(INSTALL_ROOT)
+ touch $(TIMESTAMP_CONFIGURE)
+
+build_internal:
+ cd $(BUILD_ROOT) && make all
+ touch $(TIMESTAMP_BUILD)
+
+install_internal:
+ cd $(BUILD_ROOT) && make install
+ touch $(TIMESTAMP_INSTALL)
+
+###
+### Timestamps
+###
+$(WORKDIR):
+ mkdir -p $@
+
+$(TIMESTAMP_CONFIGURE):
+ make configure_internal
+
+$(TIMESTAMP_BUILD): $(TIMESTAMP_CONFIGURE)
+ make build_internal
+
+$(TIMESTAMP_INSTALL): $(TIMESTAMP_BUILD)
+ make install_internal