add toplevel Makefile that works for Mac and Unix
http://codereview.appspot.com/4633063
git-svn-id: http://skia.googlecode.com/svn/trunk@1675 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/Makefile b/Makefile
index cb6d017..f298df8 100644
--- a/Makefile
+++ b/Makefile
@@ -1 +1,82 @@
-$(error Skia now uses the "Gyp" build system. Please see http://code.google.com/p/skia/wiki/DocRoot )
+# Makefile that wraps the Gyp and build steps for Unix and Mac (but not Windows)
+# Uses "make" to build on Unix, and "xcodebuild" to build on Mac.
+#
+# Some usage examples (tested on both Linux and Mac):
+#
+# # Clean everything
+# make clean
+#
+# # Build and run tests (in Debug mode)
+# make tests
+# out/Debug/tests
+#
+# # Build and run tests (in Release mode)
+# make tests BUILDTYPE=Release
+# out/Release/tests
+#
+# # Build bench and SampleApp (both in Release mode), and then run them
+# make SampleApp bench BUILDTYPE=Release
+# out/Release/bench -repeat 2
+# out/Release/SampleApp
+#
+# # Build all targets (in Debug mode)
+# make
+#
+# If you want more fine-grained control, you can run gyp and then build the
+# gyp-generated projects yourself.
+#
+# See http://code.google.com/p/skia/wiki/DocRoot for complete documentation.
+
+BUILDTYPE ?= Debug
+CWD := $(shell pwd)
+
+uname := $(shell uname)
+ifneq (,$(findstring CYGWIN, $(uname)))
+ $(error Cannot build using Make on Windows. See http://code.google.com/p/skia/wiki/GettingStartedOnWindows)
+endif
+
+# Default target. This must be listed before all other targets.
+.PHONY: default
+default: all
+
+.PHONY: all
+all: SampleApp bench gm tests
+
+.PHONY: clean
+clean:
+ rm -rf out xcodebuild
+
+# Any targets not defined above...
+# Ask gyp to generate the buildfiles as appropriate for this platform,
+# and then pass control to those buildfiles.
+#
+# For the Mac, we create a convenience symlink to the generated binary.
+%:
+ ./gyp_skia
+ifneq (,$(findstring Linux, $(uname)))
+ make -C out $@ BUILDTYPE=$(BUILDTYPE)
+endif
+ifneq (,$(findstring Darwin, $(uname)))
+ xcodebuild -project out/gyp/$@.xcodeproj -configuration $(BUILDTYPE)
+ mkdir -p out/$(BUILDTYPE)
+ rm -f out/$(BUILDTYPE)/$@
+ ln -s $(CWD)/xcodebuild/$(BUILDTYPE)/$@.app/Contents/MacOS/$@ out/$(BUILDTYPE)/$@
+endif
+
+# This repetition is ugly, but necessary.
+# If there are any files/directories within the same directory as this Makefile
+# which share the same name as a target ("tests", for example), then make
+# will refuse to rebuild those targets because the file already exists.
+local_filenames := $(shell ls)
+.PHONY: $(local_filenames)
+$(local_filenames)::
+ ./gyp_skia
+ifneq (,$(findstring Linux, $(uname)))
+ make -C out $@ BUILDTYPE=$(BUILDTYPE)
+endif
+ifneq (,$(findstring Darwin, $(uname)))
+ xcodebuild -project out/gyp/$@.xcodeproj -configuration $(BUILDTYPE)
+ mkdir -p out/$(BUILDTYPE)
+ rm -f out/$(BUILDTYPE)/$@
+ ln -s $(CWD)/xcodebuild/$(BUILDTYPE)/$@.app/Contents/MacOS/$@ out/$(BUILDTYPE)/$@
+endif