| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This file contains definitions that are specific to the invocation |
| # and usage of Gnu Make. |
| |
| ifndef VERBOSE |
| # Be silent unless 'VERBOSE' is set on the make command line. |
| SILENT = --silent |
| endif |
| |
| ifndef HDCTOOLS_BUILD_DIR |
| export HDCTOOLS_BUILD_DIR = $(HDCTOOLS_DIR)/build |
| endif |
| |
| LIBS = \ |
| $(foreach lib,$(MY_LIBS),-l$(lib)) |
| |
| # mkdir: Creates a directory, and all its parents, if it does not exist. |
| # |
| # If '$(MKDIR)' returns an error, it's likely because the directories |
| # already exist, so ignore the error by using 'true'. If mkdir failed |
| # for some other reason, like 'out of space', then the build will fail |
| # through some other mechanism. |
| # |
| mkdir = [ ! -d $(1) ] && \ |
| $(MKDIR) -p $(1) || true |
| |
| # remake: Gnu Make function which will create the build directory, |
| # then build the first argument by recursively invoking make. |
| # The recursive make is performed in the build directory. |
| # |
| # $(call remake,<label>,<subdirectory>,<target>) |
| # |
| # The argument to this function must be the relative pathname |
| # from $(HDCTOOLS_DIR). |
| # |
| # ex: @$(call remake,Building,servo,all) |
| # $(1) $(2) $(3) |
| # |
| # REL_DIR: |
| # |
| # Directory relative from the root of the source tree. REL_DIR is |
| # built up using the previous value plus the current target |
| # directory. |
| # |
| # HDCTOOLS_SOURCE_DIR: |
| # |
| # The directory containing the sources for the target directory |
| # being built. This is used by Makefiles to access files in the |
| # source directory. It has the same value as VPATH. |
| # |
| # THIS_BUILD_DIR: |
| # |
| # The build directory which is currently being built. This is the |
| # same 'pwd', and the directory in which Make is building. |
| # |
| # The build is performed in the build directory and VPATH is used to |
| # allow Make to find the source files in the source directory. |
| # |
| remake = \ |
| +($(if $(REL_DIR), \ |
| export REL_DIR=$${REL_DIR}/$(2), \ |
| export REL_DIR=$(2)) && \ |
| $(call mkdir,$(HDCTOOLS_BUILD_DIR)/$${REL_DIR}) && \ |
| $(MESSAGE) "$(1) $${REL_DIR}"; \ |
| $(MAKE) $(SILENT) \ |
| -f $(HDCTOOLS_DIR)/$${REL_DIR}/Makefile \ |
| -C $(HDCTOOLS_BUILD_DIR)/$${REL_DIR} \ |
| VPATH=$(HDCTOOLS_DIR)/$${REL_DIR} \ |
| HDCTOOLS_SOURCE_DIR=$(HDCTOOLS_DIR)/$${REL_DIR} \ |
| THIS_BUILD_DIR=$(HDCTOOLS_BUILD_DIR)/$${REL_DIR} \ |
| $(3)) |
| |