| # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # |
| # GNU Make based build file. For details on GNU Make see: |
| # http://www.gnu.org/software/make/manual/make.html |
| # |
| |
| # Always use cmd.exe as the shell on Windows. Otherwise Make may try to search |
| # the path for sh.exe. If it is found in a path with a space, the command will |
| # fail. |
| ifeq ($(OS),Windows_NT) |
| SHELL := cmd.exe |
| endif |
| |
| PROJECTS := \ |
| [[for project in projects:]] |
| {{project}} \ |
| [[]] |
| |
| [[for dep,vals in deps.iteritems():]] |
| {{dep}}_DEPS:={{'_ALL_TARGET '.join(vals) + '_ALL_TARGET'}} |
| [[]] |
| |
| HTTPD_PY := python {{rel_sdk}}/tools/httpd.py |
| |
| ifeq ($(TOOLCHAIN),all) |
| TOOLCHAIN_ARG:=TOOLCHAIN=all |
| endif |
| |
| # Define the default target |
| all: |
| |
| # |
| # Target Macro |
| # |
| # Macro defines a phony target for each example, and adds it to a list of |
| # targets. |
| # |
| # Note: We use targets for each project (instead of an explicit recipe) so |
| # each project can be built in parallel. |
| # |
| define TARGET |
| ALL_TARGET_LIST+=$(1)_ALL_TARGET |
| .PHONY: $(1)_ALL_TARGET |
| $(1)_ALL_TARGET: $$($(1)_DEPS) |
| +$(MAKE) -C $(1) $(TOOLCHAIN_ARG) all |
| |
| CLEAN_TARGET_LIST+=$(1)_CLEAN_TARGET |
| .PHONY: $(1)_CLEAN_TARGET |
| $(1)_CLEAN_TARGET: |
| +$(MAKE) -C $(1) $(TOOLCHAIN_ARG) clean |
| endef |
| |
| |
| # Define the various targets via the Macro |
| $(foreach proj,$(PROJECTS),$(eval $(call TARGET,$(proj)))) |
| |
| .PHONY: all |
| all: $(ALL_TARGET_LIST) |
| @echo Done building targets. |
| |
| .PHONY: clean |
| clean: $(CLEAN_TARGET_LIST) |
| @echo Done cleaning targets. |
| |
| .PHONY: serve |
| serve: all |
| @echo Starting up python webserver. |
| @$(HTTPD_PY) |
| |
| # Phony aliases for backward compatibility |
| RUN: run |
| run: serve |
| |
| all_versions: |
| +$(MAKE) TOOLCHAIN=all |
| |
| .PHONY: RUN all_versions |