1# Makefile that wraps the Gyp and build steps for Unix and Mac (but not Windows) 2# Uses "ninja" to build the code. 3# 4# Some usage examples (tested on both Linux and Mac): 5# 6# # Clean everything 7# make clean 8# 9# # Build and run tests (in Debug mode) 10# make dm 11# out/Debug/dm 12# 13# # Build and run tests (in Release mode) 14# make dm BUILDTYPE=Release 15# out/Release/dm 16# 17# # Build bench and SampleApp (both in Release mode), and then run them 18# make SampleApp bench BUILDTYPE=Release 19# out/Release/bench -repeat 2 20# out/Release/SampleApp 21# 22# # Build all targets (in Debug mode) 23# make 24# 25# If you want more fine-grained control, you can run gyp and then build the 26# gyp-generated projects yourself. 27# 28# See https://skia.org for complete documentation. 29 30SKIA_OUT ?= out 31BUILDTYPE ?= Debug 32CWD := $(shell pwd) 33 34# Soon we should be able to get rid of VALID_TARGETS, and just pass control 35# to the gyp-generated Makefile for *any* target name. 36# But that will be a bit complicated, so let's keep it for a future CL. 37# Tracked as https://code.google.com/p/skia/issues/detail?id=947 ('eliminate 38# need for VALID_TARGETS in toplevel Makefile') 39# 40# TODO(epoger): I'm not sure if the above comment is still valid in a ninja 41# world. 42VALID_TARGETS := \ 43 nanobench \ 44 debugger \ 45 dm \ 46 everything \ 47 most \ 48 pathops_unittest \ 49 pdfviewer \ 50 SampleApp \ 51 SampleApp_APK \ 52 skhello \ 53 skia_lib \ 54 skpskgr_test \ 55 tools \ 56 skpdiff 57 58# Default target. This must be listed before all other targets. 59.PHONY: default 60default: most 61 62# As noted in http://code.google.com/p/skia/issues/detail?id=330 , building 63# multiple targets in parallel was failing. The special .NOTPARALLEL target 64# tells gnu make not to run targets within this Makefile in parallel. 65# Targets that ninja builds at this Makefile's behest should not be affected. 66.NOTPARALLEL: 67 68uname := $(shell uname) 69ifneq (,$(findstring CYGWIN, $(uname))) 70 $(error Cannot build using Make on Windows. See https://skia.org/user/quick/windows) 71endif 72 73# If user requests "make all", chain to our explicitly-declared "everything" 74# target. See https://code.google.com/p/skia/issues/detail?id=932 ("gyp 75# automatically creates "all" target on some build flavors but not others") 76.PHONY: all 77all: everything 78 79.PHONY: clean 80clean: 81 rm -rf out xcodebuild 82ifneq (out, $(SKIA_OUT)) 83 rm -rf $(SKIA_OUT) 84endif 85 86# Run gyp no matter what. 87.PHONY: gyp 88gyp: 89 $(CWD)/gyp_skia --no-parallel -G config=$(BUILDTYPE) 90 91# For all specific targets: run gyp if necessary, and then pass control to 92# the gyp-generated buildfiles. 93.PHONY: $(VALID_TARGETS) 94$(VALID_TARGETS):: gyp 95 ninja -C $(SKIA_OUT)/$(BUILDTYPE) $@ 96