15d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com# Makefile that wraps the Gyp and build steps for Unix and Mac (but not Windows)
258d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com# Uses "ninja" to build the code.
35d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
45d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com# Some usage examples (tested on both Linux and Mac):
55d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
65d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   # Clean everything
75d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   make clean
85d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
95d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   # Build and run tests (in Debug mode)
10e7ce26d360a5ca36085be2bbb2cee8b62a0ed935mtklein#   make dm
11e7ce26d360a5ca36085be2bbb2cee8b62a0ed935mtklein#   out/Debug/dm
125d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
135d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   # Build and run tests (in Release mode)
14e7ce26d360a5ca36085be2bbb2cee8b62a0ed935mtklein#   make dm BUILDTYPE=Release
15e7ce26d360a5ca36085be2bbb2cee8b62a0ed935mtklein#   out/Release/dm
165d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
175d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   # Build bench and SampleApp (both in Release mode), and then run them
185d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   make SampleApp bench BUILDTYPE=Release
195d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   out/Release/bench -repeat 2
205d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   out/Release/SampleApp
215d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
225d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   # Build all targets (in Debug mode)
235d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#   make
245d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
255d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com# If you want more fine-grained control, you can run gyp and then build the
265d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com# gyp-generated projects yourself.
275d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com#
286714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# See https://sites.google.com/site/skiadocs/ for complete documentation.
295d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com
30ab5e91184b01fcfebbb7a4ae5723ede5367832dddjsollen@google.comSKIA_OUT ?= out
315d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comBUILDTYPE ?= Debug
325d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comCWD := $(shell pwd)
33c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com
346714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# Soon we should be able to get rid of VALID_TARGETS, and just pass control
356714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# to the gyp-generated Makefile for *any* target name.
366714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# But that will be a bit complicated, so let's keep it for a future CL.
376714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# Tracked as https://code.google.com/p/skia/issues/detail?id=947 ('eliminate
386714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# need for VALID_TARGETS in toplevel Makefile')
3958d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com#
4058d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com# TODO(epoger): I'm not sure if the above comment is still valid in a ninja
4158d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com# world.
426714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.comVALID_TARGETS := \
43970e106b883a7b52155b94d01437dfb8ee1eb1e3mtklein                 nanobench \
446714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com                 debugger \
457eb529fb7236e3c1a50b19741e3a266d838f1969commit-bot@chromium.org                 dm \
466714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com                 everything \
476714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com                 gm \
486714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com                 most \
493e475dc8d0a156521bd9963edb80b10398a14160caryclark@google.com                 pathops_unittest \
5001cd4d5c8ff9c6b251021ce07936c71f9c20054cedisonn@google.com                 pdfviewer \
516714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com                 SampleApp \
52cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com                 SampleApp_APK \
53bb5228888253b21ce81f0a89b605cdd7f88c0efcborenet@google.com                 skhello \
5452f0297aafc1e267fda6e612f168a9fe5bc62784djsollen@google.com                 skia_lib \
55a2bbc6e19d5332e81784e582c290cc060f40c4c7caryclark@google.com                 skpskgr_test \
56be19b9ef9a46df7d7308f273f6f7efa905cc7d72commit-bot@chromium.org                 tools \
57be19b9ef9a46df7d7308f273f6f7efa905cc7d72commit-bot@chromium.org                 skpdiff
58dd3d08ea8e3394da42e2dd9631ea5eccb3fb24b6borenet@google.com
59c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# Default target.  This must be listed before all other targets.
60c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com.PHONY: default
619c875d34ff13d82f581448ced0d9eb5b067368b9epoger@google.comdefault: most
62c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com
63c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# As noted in http://code.google.com/p/skia/issues/detail?id=330 , building
64c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# multiple targets in parallel was failing.  The special .NOTPARALLEL target
6558d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com# tells gnu make not to run targets within this Makefile in parallel.
6658d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com# Targets that ninja builds at this Makefile's behest should not be affected.
67c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com.NOTPARALLEL:
685d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com
695d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comuname := $(shell uname)
705d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comifneq (,$(findstring CYGWIN, $(uname)))
716714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com  $(error Cannot build using Make on Windows. See https://sites.google.com/site/skiadocs/user-documentation/quick-start-guides/windows)
725d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comendif
735d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com
746714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# If user requests "make all", chain to our explicitly-declared "everything"
756714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# target. See https://code.google.com/p/skia/issues/detail?id=932 ("gyp
766714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com# automatically creates "all" target on some build flavors but not others")
775d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com.PHONY: all
786714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.comall: everything
795d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com
805d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com.PHONY: clean
815d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.comclean:
825d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com	rm -rf out xcodebuild
83ab5e91184b01fcfebbb7a4ae5723ede5367832dddjsollen@google.comifneq (out, $(SKIA_OUT))
84ab5e91184b01fcfebbb7a4ae5723ede5367832dddjsollen@google.com	rm -rf $(SKIA_OUT)
85ab5e91184b01fcfebbb7a4ae5723ede5367832dddjsollen@google.comendif
865d2e4cc165ede8cc5e08bf493839c0c4ab2974e7epoger@google.com
87c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# Run gyp no matter what.
88c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com.PHONY: gyp
89c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.comgyp:
902d75cc0c163d60276f5f9e39299a4225fd0e2f8depoger@google.com	$(CWD)/gyp_skia
91c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com
92c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# For all specific targets: run gyp if necessary, and then pass control to
93c9493a4a688b22cbfcfb8381a63c58215eab54feepoger@google.com# the gyp-generated buildfiles.
946714ea4e4d96ad49c79ad51959db980141c56c38epoger@google.com.PHONY: $(VALID_TARGETS)
9558d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com$(VALID_TARGETS):: gyp
9658d69d846071ff9a84e879041f2f092006bfcd14epoger@google.com	ninja -C $(SKIA_OUT)/$(BUILDTYPE) $@
97