definitions.mk revision bafbfe8866f1016cc9c651d9e9ead21a0b7eb16e
148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Copyright (C) 2009 The Android Open Source Project
248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# you may not use this file except in compliance with the License.
548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# You may obtain a copy of the License at
648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
1048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
1148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# See the License for the specific language governing permissions and
1348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# limitations under the License.
1448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Common definitions for the Android NDK build system
1648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# We use the GNU Make Standard Library
1935f944d26f33fff3e59ab449c991b18260a5fa0bDavid 'Digit' Turnerinclude $(NDK_ROOT)/build/gmsl/gmsl
2048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
2148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# If NDK_TRACE is enabled then calls to the library functions are
2248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# traced to stdout using warning messages with their arguments
2348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
2448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifdef NDK_TRACE
2548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr1 = $(warning $0('$1'))
2648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr2 = $(warning $0('$1','$2'))
2748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr3 = $(warning $0('$1','$2','$3'))
2848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
2948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr1 :=
3048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr2 :=
3148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr3 :=
3248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
3348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
3548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : empty
3648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : an empty macro
3748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(empty)
3848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
3948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerempty :=
4048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
4148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
4248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : space
4348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : a single space
4448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(space)
4548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
4648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerspace  := $(empty) $(empty)
4748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
4848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
4948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last2
5048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list
5148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the penultimate (next-to-last) element of a list
5248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call last2, <LIST>)
5348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
5448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast2 = $(word $(words $1), x $1)
5548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
5648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
5748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last3
5848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list
5948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the antepenultimate (second-next-to-last) element of a list
6048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call last3, <LIST>)
6148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
6248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast3 = $(word $(words $1), x x $1)
6348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
6448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
65bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Function : remove-duplicates
66bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Arguments: a list
67bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Returns  : the list with duplicate items removed, order is preserved.
68bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Usage    : $(call remove-duplicates, <LIST>)
69bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Note     : This is equivalent to the 'uniq' function provided by GMSL,
70bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner#            however this implementation is non-recursive and *much*
71bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner#            faster. It will also not explode the stack with a lot of
72bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner#            items like 'uniq' does.
73bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# -----------------------------------------------------------------------------
74bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turnerremove-duplicates = $(strip \
75bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner  $(eval __uniq_ret :=) \
76bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner  $(foreach __uniq_item,$1,\
77bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner    $(if $(findstring $(__uniq_item),$(__uniq_ret)),,\
78bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner      $(eval __uniq_ret += $(__uniq_item))\
79bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner    )\
80bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner  )\
81bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner  $(__uniq_ret))
82bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner
83bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# -----------------------------------------------------------------------------
8448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : this-makefile
8548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the name of the current Makefile in the inclusion stack
8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(this-makefile)
8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
8848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerthis-makefile = $(lastword $(MAKEFILE_LIST))
8948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
9048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : local-makefile
9248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the name of the last parsed Android.mk file
9348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(local-makefile)
9448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlocal-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))
9648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
9748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : assert-defined
9948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
10048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
10148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call assert-defined, VAR1 VAR2 VAR3...)
10248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all variables listed in $1 are defined, or abort the
10348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            build
10448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
10548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerassert-defined = $(foreach __varname,$(strip $1),\
10648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(strip $($(__varname))),,\
10748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error, Assertion failure: $(__varname) is not defined)\
10848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
10948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner)
11048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
11148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
11248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : clear-vars
11348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
11448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: file where the variable should be defined
11548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
11648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call clear-vars, VAR1 VAR2 VAR3...)
11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Clears/undefines all variables in argument list
11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerclear-vars = $(foreach __varname,$1,$(eval $(__varname) := $(empty)))
12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-required-vars
12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
12448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: file where the variable(s) should be defined
12548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
12648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-required-vars, VAR1 VAR2 VAR3..., <file>)
12748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all required vars listed in $1 were defined by $2
12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            or abort the build with an error
12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-required-vars = $(foreach __varname,$1,\
13148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(strip $($(__varname))),,\
13248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_info, Required variable $(__varname) is not defined by $2)\
13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error,Aborting)\
13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner)
13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1371579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# -----------------------------------------------------------------------------
1381579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Function : host-path
1391579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Arguments: 1: file path
1401579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Returns  : file path, as understood by the host file system
1411579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Usage    : $(call host-path,<path>)
1421579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Rationale: This function is used to translate Cygwin paths into
1431579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#            Windows-specific ones. On other platforms, it will just
1441579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#            return its argument.
1451579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# -----------------------------------------------------------------------------
1461579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerifeq ($(HOST_OS),windows)
1471022d8d9fa56b2a82982e3ab56dc2b7576c0fb03David 'Digit' Turnerhost-path = $(if $(strip $1),$(call cygwin-to-host-path,$1))
1481579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerelse
1491579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-path = $1
1501579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif
1511579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner
1521579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# -----------------------------------------------------------------------------
1531579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Function : host-c-includes
1541579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Arguments: 1: list of file paths (e.g. "foo bar")
1551579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Returns  : list of include compiler options (e.g. "-Ifoo -Ibar")
1561579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Usage    : $(call host-c-includes,<paths>)
1571579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Rationale: This function is used to translate Cygwin paths into
1581579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#            Windows-specific ones. On other platforms, it will just
1591579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#            return its argument.
1601579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# -----------------------------------------------------------------------------
1611579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerifeq ($(HOST_OS),windows)
1621579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-c-includes = $(patsubst %,-I%,$(call host-path,$1))
1631579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerelse
1641579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-c-includes = $(1:%=-I%)
1651579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif
1661579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner
167fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner
168fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# -----------------------------------------------------------------------------
169fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Function : link-whole-archives
170fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Arguments: 1: list of whole static libraries
171fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Returns  : linker flags to use the whole static libraries
172fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Usage    : $(call link-whole-archives,<libraries>)
173fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Rationale: This function is used to put the list of whole static libraries
174fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner#            inside a -Wl,--whole-archive ... -Wl,--no-whole-archive block.
175fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner#            If the list is empty, it returns an empty string.
176fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner#            This function also calls host-path to translate the library
177fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner#            paths.
178fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# -----------------------------------------------------------------------------
179fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turnerlink-whole-archives = $(if $(strip $1),$(call link-whole-archive-flags,$1))
180fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turnerlink-whole-archive-flags = -Wl,--whole-archive $(call host-path,$1) -Wl,--no-whole-archive
181fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner
182419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# =============================================================================
183419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
184419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Modules database
185419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
186419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# The following declarations are used to manage the list of modules
187419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# defined in application's Android.mk files.
188419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
189419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Technical note:
190419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#    We use __ndk_modules to hold the list of all modules corresponding
191419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#    to a given application.
192419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
193419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#    For each module 'foo', __ndk_modules.foo.<field> is used
194419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#    to store module-specific information.
195419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
196419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#        type         -> type of module (e.g. 'static', 'shared', ...)
197419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#        depends      -> list of other modules this module depends on
198419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
1998700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#    Also, LOCAL_XXXX values defined for a module are recorded in XXXX, e.g.:
2008700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
2018700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        PATH   -> recorded LOCAL_PATH for the module
2028700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        CFLAGS -> recorded LOCAL_CFLAGS for the module
2038700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        ...
2048700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
2058700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#    Some of these are created by build scripts like BUILD_STATIC_LIBRARY:
2068700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
2078700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        MAKEFILE -> The Android.mk where the module is defined.
2088700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        LDFLAGS  -> Final linker flags
2098700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        OBJECTS  -> List of module objects
2108700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#        BUILT_MODULE -> location of module built file (e.g. obj/<app>/<abi>/libfoo.so)
2118700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
212419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#    Note that some modules are never installed (e.g. static libraries).
213419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
214419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# =============================================================================
215419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
2168700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# The list of LOCAL_XXXX variables that are recorded for each module definition
2178700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# These are documented by docs/ANDROID-MK.TXT. Exception is LOCAL_MODULE
2188700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
2198700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodules-LOCALS := \
2208700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    MODULE \
221bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    MODULE_FILENAME \
2228700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    PATH \
2238700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    SRC_FILES \
2248700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    CPP_EXTENSION \
2258700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    C_INCLUDES \
2268700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    CFLAGS \
2278700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    CXXFLAGS \
2288700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    CPPFLAGS \
2298700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    STATIC_LIBRARIES \
230b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner    WHOLE_STATIC_LIBRARIES \
2318700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    SHARED_LIBRARIES \
2328700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    LDLIBS \
2338700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    ALLOW_UNDEFINED_SYMBOLS \
2348700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    ARM_MODE \
2358700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    ARM_NEON \
2368700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    DISABLE_NO_EXECUTE \
2378700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    EXPORT_CFLAGS \
2388700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    EXPORT_CPPFLAGS \
2398700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    EXPORT_LDLIBS \
240a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner    EXPORT_C_INCLUDES \
2417daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    FILTER_ASM \
2428700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
2438700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# The following are generated by the build scripts themselves
244d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
245d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_MAKEFILE will contain the path to the Android.mk defining the module
246d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += MAKEFILE
247d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
248d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_LDFLAGS will contain the set of final linker flags for the module
249d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += LDFLAGS
250d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
251d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_OBJECTS will contain the list of object files generated from the
252d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# module's sources, if any.
253d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += OBJECTS
254d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
255d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_BUILT_MODULE will contain the location of the symbolic version of
256d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# the generated module (i.e. the one containing all symbols used during
257d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# native debugging). It is generally under $PROJECT/obj/local/
258d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += BUILT_MODULE
259d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
260d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_OBJS_DIR will contain the location where the object files for
261d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# this module will be stored. Usually $PROJECT/obj/local/<module>/obj
262d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += OBJS_DIR
263d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
264d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_INSTALLED will contain the location of the installed version
265d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# of the module. Usually $PROJECT/libs/<abi>/<prefix><module><suffix>
266d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# where <prefix> and <suffix> depend on the module class.
267d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += INSTALLED
268d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
269d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_MODULE_CLASS will contain the type of the module
270d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# (e.g. STATIC_LIBRARY, SHARED_LIBRARY, etc...)
271d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += MODULE_CLASS
2728700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
273419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# the list of managed fields per module
274d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-fields = depends \
2758700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner                 $(modules-LOCALS)
276419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
27748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
27848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : modules-clear
27948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: None
28048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
28148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call modules-clear)
28248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: clears the list of defined modules known by the build system
28348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
284419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-clear = \
285419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(foreach __mod,$(__ndk_modules),\
286419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner        $(foreach __field,$(modules-fields),\
287419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner            $(eval __ndk_modules.$(__mod).$(__field) := $(empty))\
288419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner        )\
289419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    )\
290d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(eval __ndk_modules := $(empty_set)) \
291d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(eval __ndk_top_modules := $(empty)) \
292499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner    $(eval __ndk_import_list := $(empty)) \
293d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(eval __ndk_import_depth := $(empty))
29448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
29548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
2966724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Function : modules-get-list
2976724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Arguments: None
2986724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Returns  : The list of all recorded modules
2996724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Usage    : $(call modules-get-list)
3006724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# -----------------------------------------------------------------------------
3016724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnermodules-get-list = $(__ndk_modules)
3026724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner
3036724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# -----------------------------------------------------------------------------
304d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Function : modules-get-top-list
305d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Arguments: None
306d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Returns  : The list of all recorded non-imported modules
307d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Usage    : $(call modules-get-top-list)
308d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# -----------------------------------------------------------------------------
309d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turnermodules-get-top-list = $(__ndk_top_modules)
310d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner
311d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# -----------------------------------------------------------------------------
312d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Function : module-add
31348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name
31448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
315d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Usage    : $(call module-add,<modulename>)
31648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: add a new module. If it is already defined, print an error message
3178700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#            and abort. This will record all LOCAL_XXX variables for the module.
31848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
319419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add = \
320d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner  $(call assert-defined,LOCAL_MAKEFILE LOCAL_BUILT_MODULE LOCAL_OBJS_DIR LOCAL_MODULE_CLASS)\
32148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(call set_is_member,$(__ndk_modules),$1),\
322d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(call __ndk_info,Trying to define local module '$1' in $(LOCAL_MAKEFILE).)\
323d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(call __ndk_info,But this module was already defined by $(__ndk_modules.$1.MAKEFILE).)\
324d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(call __ndk_error,Aborting.)\
32548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
32648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(eval __ndk_modules := $(call set_insert,$(__ndk_modules),$1))\
327d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner  $(if $(strip $(__ndk_import_depth)),,\
328d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(eval __ndk_top_modules := $(call set_insert,$(__ndk_top_modules),$1))\
329d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner  )\
330d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner  $(if $(call module-class-is-installable,$(LOCAL_MODULE_CLASS)),\
331d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval LOCAL_INSTALLED := $(NDK_APP_DST_DIR)/$(notdir $(LOCAL_BUILT_MODULE)))\
332d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner  )\
3338700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner  $(foreach __local,$(modules-LOCALS),\
3348700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    $(eval __ndk_modules.$1.$(__local) := $(LOCAL_$(__local)))\
3358700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner  )
3368700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3378700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
338d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Retrieve the class of module $1
339d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-get-class = $(__ndk_modules.$1.MODULE_CLASS)
340e7943289cc2df73a99668615639c97ffe6240fceDavid 'Digit' Turner
341419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Retrieve built location of module $1
3428700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-get-built = $(__ndk_modules.$1.BUILT_MODULE)
343419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
344d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) is module $1 is installable
345d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# An installable module is one that will be copied to $PROJECT/libs/<abi>/
346d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# (e.g. shared libraries).
347d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
3487a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-is-installable = $(call module-class-is-installable,$(call module-get-class,$1))
3497a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
3507a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns $(true) if module $1 is prebuilt
3517a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# A prebuilt module is one declared with BUILD_PREBUILT_SHARED_LIBRARY or
3527a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# BUILD_PREBUILT_STATIC_LIBRARY
3537a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
3547a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-is-prebuilt = $(call module-class-is-prebuilt,$(call module-get-class,$1))
3558700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3568700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# -----------------------------------------------------------------------------
357a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Function : module-get-export
358a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Arguments: 1: module name
359a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner#            2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS')
360a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Returns  : Exported value
361a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Usage    : $(call module-get-export,<modulename>,<varname>)
362a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for module $1
363a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# -----------------------------------------------------------------------------
364a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-get-export = $(__ndk_modules.$1.EXPORT_$2)
365a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner
366a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# -----------------------------------------------------------------------------
367a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Function : module-get-listed-export
368a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Arguments: 1: list of module names
369a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner#            2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS')
370a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Returns  : Exported values
371a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Usage    : $(call module-get-listed-export,<module-list>,<varname>)
372a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for modules
373a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner#            listed in $1.
374a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# -----------------------------------------------------------------------------
375a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-get-listed-export = $(strip \
376a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner    $(foreach __listed_module,$1,\
377a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner        $(call module-get-export,$(__listed_module),$2)\
378a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner    ))
379a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner
380a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# -----------------------------------------------------------------------------
3818700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Function : modules-restore-locals
3828700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Arguments: 1: module name
3838700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Returns  : None
3848700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Usage    : $(call module-restore-locals,<modulename>)
3858700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Rationale: Restore the recorded LOCAL_XXX definitions for a given module.
3868700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# -----------------------------------------------------------------------------
3878700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-restore-locals = \
3888700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    $(foreach __local,$(modules-LOCALS),\
3898700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner        $(eval LOCAL_$(__local) := $(__ndk_modules.$1.$(__local)))\
3908700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    )
391419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
392419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Dump all module information. Only use this for debugging
393419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-dump-database = \
394419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(info Modules: $(__ndk_modules)) \
395419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(foreach __mod,$(__ndk_modules),\
396419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner        $(info $(space)$(space)$(__mod):)\
397419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner        $(foreach __field,$(modules-fields),\
398419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner            $(info $(space)$(space)$(space)$(space)$(__field): $(__ndk_modules.$(__mod).$(__field)))\
399419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner        )\
400419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    )\
401d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(info --- end of modules list)
402419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
403419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
404419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
405419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : module-add-static-depends
406419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: module name
407419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#            2: list/set of static library modules this module depends on.
408419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns  : None
409419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage    : $(call module-add-static-depends,<modulename>,<list of module names>)
410419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: Record that a module depends on a set of static libraries.
411419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#            Use module-get-static-dependencies to retrieve final list.
412419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
413419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add-static-depends = \
414a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner    $(call module-add-depends-any,$1,$2,depends) \
415419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
416419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
417419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : module-add-shared-depends
418419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: module name
419419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#            2: list/set of shared library modules this module depends on.
420419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns  : None
421419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage    : $(call module-add-shared-depends,<modulename>,<list of module names>)
422419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: Record that a module depends on a set of shared libraries.
423419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#            Use modulge-get-shared-dependencies to retrieve final list.
424419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
425419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add-shared-depends = \
426a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner    $(call module-add-depends-any,$1,$2,depends) \
427419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
428419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Used internally by module-add-static-depends and module-add-shared-depends
429419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# NOTE: this function must not modify the existing dependency order when new depends are added.
430419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
431a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-add-depends-any = \
432419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __ndk_modules.$1.$3 += $(filter-out $(__ndk_modules.$1.$3),$(call strip-lib-prefix,$2)))
433419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
4348700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Used to recompute all dependencies once all module information has been recorded.
4358700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
4368700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodules-compute-dependencies = \
4378700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    $(foreach __module,$(__ndk_modules),\
4388700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner        $(call module-compute-depends,$(__module))\
4398700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner    )
440419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
4418700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-compute-depends = \
4425b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(call module-add-static-depends,$1,$(__ndk_modules.$1.STATIC_LIBRARIES))\
443b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner    $(call module-add-static-depends,$1,$(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES))\
4444013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner    $(call module-add-shared-depends,$1,$(__ndk_modules.$1.SHARED_LIBRARIES))\
4458700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
4468700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-get-installed = $(__ndk_modules.$1.INSTALLED)
447419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
448419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
449419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : modules-get-all-dependencies
450419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: list of module names
451419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns  : List of all the modules $1 depends on transitively.
452419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage    : $(call modules-all-get-dependencies,<list of module names>)
453419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: This computes the closure of all module dependencies starting from $1
454419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# -----------------------------------------------------------------------------
455419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-get-all-dependencies = \
456419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(strip $(call modules-get-closure,$1,depends))
457419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
458419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-get-closure = \
459419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_deps  := $(strip $1)) \
460419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_wq    := $(__closure_deps)) \
461419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_field := $(strip $2)) \
462419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(call modules-closure)\
463419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(__closure_deps)
464419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
465419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Used internally by modules-get-dependencies
466419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Note the tricky use of conditional recursion to work around the fact that
467419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# the GNU Make language does not have any conditional looping construct
468419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# like 'while'.
469419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
470419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-closure = \
471419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_mod := $(call first,$(__closure_wq))) \
472419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_wq  := $(call rest,$(__closure_wq))) \
473419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_new := $(filter-out $(__closure_deps),$(__ndk_modules.$(__closure_mod).$(__closure_field))))\
474419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_deps += $(__closure_new)) \
475419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(eval __closure_wq   := $(strip $(__closure_wq) $(__closure_new)))\
476419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner    $(if $(__closure_wq),$(call modules-closure)) \
477419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
4785b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Return the C++ extension of a given module
4795b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
4804013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turnermodule-get-cpp-extension = $(strip \
4815b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(if $(__ndk_modules.$1.CPP_EXTENSION),\
4825b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner        $(__ndk_modules.$1.CPP_EXTENSION),\
4835b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner        .cpp\
4844013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner    ))
4855b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner
4865b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Return the list of C++ sources of a given module
4875b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
4885b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodule-get-c++-sources = \
4895b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(filter %$(call module-get-cpp-extension,$1),$(__ndk_modules.$1.SRC_FILES))
4905b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner
4915b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Returns true if a module has C++ sources
4925b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
4935b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodule-has-c++ = $(strip $(call module-get-c++-sources,$1))
4945b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner
4955b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Add C++ dependencies to any module that has C++ sources.
4965b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $1: list of C++ runtime static libraries (if any)
4975b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $2: list of C++ runtime shared libraries (if any)
4985b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
4995b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodules-add-c++-dependencies = \
5005b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(foreach __module,$(__ndk_modules),\
5015b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner        $(if $(call module-has-c++,$(__module)),\
5024013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner            $(call ndk_log,Module '$(__module)' has C++ sources)\
5035b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner            $(call module-add-c++-deps,$(__module),$1,$2),\
5045b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner        )\
5055b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    )
5065b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner
5075b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Add standard C++ dependencies to a given module
5085b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
5095b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $1: module name
5105b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $2: list of C++ runtime static libraries (if any)
5115b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $3: list of C++ runtime shared libraries (if any)
5125b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner#
5135b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodule-add-c++-deps = \
5145b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(eval __ndk_modules.$1.STATIC_LIBRARIES += $(2))\
5155b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner    $(eval __ndk_modules.$1.SHARED_LIBRARIES += $(3))
5165b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner
517419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner
518419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# =============================================================================
519419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
520419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Utility functions
521419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner#
522419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# =============================================================================
52348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
52448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
525a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Function : parent-dir
526a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Arguments: 1: path
527a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Returns  : Parent dir or path of $1, with final separator removed.
528a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# -----------------------------------------------------------------------------
529a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnerparent-dir = $(patsubst %/,%,$(dir $1))
530a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
5317a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
5327a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# -----------------------------------------------------------------------------
5337a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Function : pretty-dir
5347a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Arguments: 1: path
5357a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns  : Remove NDK_PROJECT_PATH prefix from a given path. This can be
5367a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#            used to perform pretty-printing for logs.
5377a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# -----------------------------------------------------------------------------
53825fc114e97e8e31af9c8a47f80ca4fbd134bf912David 'Digit' Turnerpretty-dir = $(patsubst $(NDK_ROOT)/%,<NDK>/%,\
53925fc114e97e8e31af9c8a47f80ca4fbd134bf912David 'Digit' Turner                 $(patsubst $(NDK_PROJECT_PATH)/%,%,$1))
5407a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
541a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# -----------------------------------------------------------------------------
54248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-define
54348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name of variable that must be defined by the user
54448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: name of Makefile where the variable should be defined
54548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            3: name/description of the Makefile where the check is done, which
54648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#               must be included by $2
54748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
54848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
54948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-user-define = $(if $(strip $($1)),,\
55048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(call __ndk_error,Missing $1 before including $3 in $2))
55148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
55248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
55348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to check that LOCAL_MODULE is properly defined by an Android.mk
55448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# file before including one of the $(BUILD_SHARED_LIBRARY), etc... files.
55548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
55648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE
55748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name/description of the included build Makefile where the
55848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#               check is done
55948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
56048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-user-LOCAL_MODULE, BUILD_SHARED_LIBRARY)
56148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
56248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-defined-LOCAL_MODULE = \
56348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(call check-user-define,LOCAL_MODULE,$(local-makefile),$(1)) \
56448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(call seq,$(words $(LOCAL_MODULE)),1),,\
56548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_info,LOCAL_MODULE definition in $(local-makefile) must not contain space)\
56648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error,Please correct error. Aborting)\
56748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )
56848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
56948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
570bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# This is used to check that LOCAL_MODULE_FILENAME, if defined, is correct.
571bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner#
572bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function : check-user-LOCAL_MODULE_FILENAME
573bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns  : None
574bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage    : $(call check-user-LOCAL_MODULE_FILENAME)
575bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
576bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnercheck-LOCAL_MODULE_FILENAME = \
577bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner  $(if $(strip $(LOCAL_MODULE_FILENAME)),\
578bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    $(if $(call seq,$(words $(LOCAL_MODULE_FILENAME)),1),,\
579bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner        $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain spaces)\
580bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner        $(call __ndk_error,Plase correct error. Aborting)\
581bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    )\
582bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    $(if $(filter %.a %.so,$(LOCAL_MODULE_FILENAME)),\
583bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner        $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME should not include file extensions)\
584bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    )\
585bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner  )
586bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner
587bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
588bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function  : handle-module-filename
589bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Arguments : 1: default file prefix
590bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner#             2: file suffix
591bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns   : None
592bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage     : $(call handle-module-filename,<prefix>,<suffix>)
593bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Rationale : To be used to check and or set the module's filename through
594bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner#             the LOCAL_MODULE_FILENAME variable.
595bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
596bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerhandle-module-filename = $(eval $(call ev-handle-module-filename,$1,$2))
597bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner
5987a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
5997a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check that LOCAL_MODULE_FILENAME is properly defined
6007a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - with one single item
6017a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - without a library file extension
6027a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - with no directory separators
6037a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
6047a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerdefine ev-check-module-filename
6057a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (1,$$(words $$(LOCAL_MODULE_FILENAME)))
6067a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain any space)
6077a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_error,Aborting)
6087a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
6097a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (,$$(filter %.a %.so,$$(LOCAL_MODULE_FILENAME)))
6107a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain a file extension)
6117a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_error,Aborting)
6127a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
6137a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (1,$$(words $$(subst /, ,$$(LOCAL_MODULE_FILENAME))))
6147a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain directory separators)
6157a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $$(call __ndk_error,Aborting)
6167a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
6177a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendef
618bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner
6197a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
6207a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check the definition of LOCAL_MODULE_FILENAME. If none exists,
6217a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# infer it from the LOCAL_MODULE name.
6227a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
623bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# $1: default file prefix
624bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# $2: default file suffix
6257a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
626bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerdefine ev-handle-module-filename
627bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME))
6287a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifndef LOCAL_MODULE_FILENAME
6297a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    LOCAL_MODULE_FILENAME := $1$$(LOCAL_MODULE)
630bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerendif
6317a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$$(eval $$(call ev-check-module-filename))
632bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$2
633bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerendef
634bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner
6357a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerhandle-prebuilt-module-filename = $(eval $(call ev-handle-prebuilt-module-filename,$1))
6367a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
6377a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
6387a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check the definition of LOCAL_MODULE_FILENAME for a _prebuilt_ module.
6397a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# If none exists, infer it from $(LOCAL_SRC_FILES)
6407a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
6417a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# $1: default file suffix
6427a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
6437a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerdefine ev-handle-prebuilt-module-filename
6447a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME))
6457a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifndef LOCAL_MODULE_FILENAME
6467a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    LOCAL_MODULE_FILENAME := $$(notdir $(LOCAL_SRC_FILES))
6477a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%.a=%)
6487a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%.so=%)
6497a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
6507a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$1
6517a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$$(eval $$(call ev-check-module-filename))
6527a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendef
6537a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
6547a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
655bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
656bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function  : handle-module-built
657bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns   : None
658bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage     : $(call handle-module-built)
659bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Rationale : To be used to automatically compute the location of the generated
660bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner#             binary file, and the directory where to place its object files.
661bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
662bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerhandle-module-built = \
663bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    $(eval LOCAL_BUILT_MODULE := $(TARGET_OUT)/$(LOCAL_MODULE_FILENAME))\
664bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner    $(eval LOCAL_OBJS_DIR     := $(TARGET_OBJS)/$(LOCAL_MODULE))
665bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner
666bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# -----------------------------------------------------------------------------
66748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Strip any 'lib' prefix in front of a given string.
66848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
66948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : strip-lib-prefix
67048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name
67148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : module name, without any 'lib' prefix if any
67248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call strip-lib-prefix,$(LOCAL_MODULE))
67348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
67448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerstrip-lib-prefix = $(1:lib%=%)
67548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
67648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
67748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to strip any lib prefix from LOCAL_MODULE, then check that
67848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the corresponding module name is not already defined.
67948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
68048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE
68148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: path of Android.mk where this LOCAL_MODULE is defined
68248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
68348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))
68448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
68548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-LOCAL_MODULE = \
686419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner  $(eval LOCAL_MODULE := $$(call strip-lib-prefix,$$(LOCAL_MODULE)))
68748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
68848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
68948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : my-dir
69048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the directory of the current Makefile
69148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(my-dir)
69248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
693a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnermy-dir = $(call parent-dir,$(lastword $(MAKEFILE_LIST)))
69448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
69548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
69648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : all-makefiles-under
69748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: directory path
69848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : a list of all makefiles immediately below some directory
69948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call all-makefiles-under, <some path>)
70048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
70148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-makefiles-under = $(wildcard $1/*/Android.mk)
70248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
70348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
70448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : all-subdir-makefiles
70548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : list of all makefiles in subdirectories of the current Makefile's
70648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            location
70748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(all-subdir-makefiles)
70848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
70948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-subdir-makefiles = $(call all-makefiles-under,$(call my-dir))
71048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
7115bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# =============================================================================
7125bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7135bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Source file tagging support.
7145bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7155bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Each source file listed in LOCAL_SRC_FILES can have any number of
7165bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 'tags' associated to it. A tag name must not contain space, and its
7175bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# usage can vary.
7185bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7195bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# For example, the 'debug' tag is used to sources that must be built
7205bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# in debug mode, the 'arm' tag is used for sources that must be built
7215bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# using the 32-bit instruction set on ARM platforms, and 'neon' is used
7225bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# for sources that must be built with ARM Advanced SIMD (a.k.a. NEON)
7235bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# support.
7245bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7255bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# More tags might be introduced in the future.
7265bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7275bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_TAGS contains the list of all tags used (initially empty)
7285bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_FILES contains the list of all source files.
7295bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_TAG.<tagname> contains the set of source file names tagged
7305bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      with <tagname>
7315bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_FILES_TAGS.<filename> contains the set of tags for a given
7325bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      source file name
7335bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7345bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Tags are processed by a toolchain-specific function (e.g. TARGET-compute-cflags)
7355bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# which will call various functions to compute source-file specific settings.
7365bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# These are currently stored as:
7375bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7385bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_FILES_TARGET_CFLAGS.<filename> contains the list of
7395bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      target-specific C compiler flags used to compile a given
7405bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      source file. This is set by the function TARGET-set-cflags
7415bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      defined in the toolchain's setup.mk script.
7425bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7435bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#  LOCAL_SRC_FILES_TEXT.<filename> contains the 'text' that will be
7445bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      displayed along the label of the build output line. For example
7455bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#      'thumb' or 'arm  ' with ARM-based toolchains.
7465bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
7475bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# =============================================================================
7485bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
7495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : clear-all-src-tags
7515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Returns  : remove all source file tags and associated data.
7525bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(clear-all-src-tags)
7535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7545bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerclear-all-src-tags = \
7555bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __tag,$(LOCAL_SRC_TAGS), \
7565bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(eval LOCAL_SRC_TAG.$(__tag) := $(empty)) \
7575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner) \
7585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES), \
7595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(eval LOCAL_SRC_FILES_TAGS.$(__src) := $(empty)) \
7605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) := $(empty)) \
7615bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(eval LOCAL_SRC_FILES_TEXT.$(__src) := $(empty)) \
7625bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner) \
7635bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAGS := $(empty_set))
7645bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
7655bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7665bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : tag-src-files
7675bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files to tag
7685bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            2: tag name (must not contain space)
7695bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call tag-src-files,<list-of-source-files>,<tagname>)
7705bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Add a tag to a list of source files
7715bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7725bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnertag-src-files = \
7735bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAGS := $(call set_insert,$2,$(LOCAL_SRC_TAGS))) \
7745bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAG.$2 := $(call set_union,$1,$(LOCAL_SRC_TAG.$2))) \
7755bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$1, \
7765bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(eval LOCAL_SRC_FILES_TAGS.$(__src) += $2) \
7775bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner)
7785bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
7795bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7805bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : get-src-files-with-tag
7815bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: tag name
7825bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call get-src-files-with-tag,<tagname>)
7835bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Return   : The list of source file names that have been tagged with <tagname>
7845bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7855bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-files-with-tag = $(LOCAL_SRC_TAG.$1)
7865bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
7875bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7885bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : get-src-files-without-tag
7895bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: tag name
7905bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call get-src-files-without-tag,<tagname>)
7915bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Return   : The list of source file names that have NOT been tagged with <tagname>
7925bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7935bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-files-without-tag = $(filter-out $(LOCAL_SRC_TAG.$1),$(LOCAL_SRC_FILES))
7945bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
7955bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
7965bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : set-src-files-target-cflags
7975bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files
7985bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            2: list of compiler flags
7995bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call set-src-files-target-cflags,<sources>,<flags>)
8005bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Set or replace the set of compiler flags that will be applied
8015bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            when building a given set of source files. This function should
8025bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            normally be called from the toolchain-specific function that
8035bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            computes all compiler flags for all source files.
8045bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8055bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerset-src-files-target-cflags = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) := $2))
8065bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
8075bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8085bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : add-src-files-target-cflags
8095bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files
8105bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            2: list of compiler flags
8115bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call add-src-files-target-cflags,<sources>,<flags>)
8125bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: A variant of set-src-files-target-cflags that can be used
8135bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            to append, instead of replace, compiler flags for specific
8145bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            source files.
8155bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8165bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turneradd-src-files-target-cflags = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) += $2))
8175bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
8185bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8195bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : get-src-file-target-cflags
8205bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: single source file name
8215bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call get-src-file-target-cflags,<source>)
8225bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Return the set of target-specific compiler flags that must be
8235bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            applied to a given source file. These must be set prior to this
8245bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            call using set-src-files-target-cflags or add-src-files-target-cflags
8255bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8265bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-file-target-cflags = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$1)
8275bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
8285bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8295bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : set-src-files-text
8305bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files
8315bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            2: text
8325bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call set-src-files-text,<sources>,<text>)
8335bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Set or replace the 'text' associated to a set of source files.
8345bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            The text is a very short string that complements the build
8355bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            label. For example, it will be either 'thumb' or 'arm  ' for
8365bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            ARM-based toolchains. This function must be called by the
8375bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            toolchain-specific functions that processes all source files.
8385bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8395bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerset-src-files-text = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TEXT.$(__src) := $2))
8405bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
8415bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8425bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro    : get-src-file-text
8435bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: single source file
8445bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage    : $(call get-src-file-text,<source>)
8455bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Return the 'text' associated to a given source file when
8465bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#            set-src-files-text was called.
8475bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# -----------------------------------------------------------------------------
8485bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-file-text = $(LOCAL_SRC_FILES_TEXT.$1)
8495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
8505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# This should only be called for debugging the source files tagging system
8515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerdump-src-file-tags = \
8525bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info LOCAL_SRC_TAGS := $(LOCAL_SRC_TAGS)) \
8535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES)) \
8545bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __tag,$(LOCAL_SRC_TAGS),$(info LOCAL_SRC_TAG.$(__tag) = $(LOCAL_SRC_TAG.$(__tag)))) \
8555bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TAGS.$(__src) = $(LOCAL_SRC_FILES_TAGS.$(__src)))) \
8565bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info WITH arm = $(call get-src-files-with-tag,arm)) \
8575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info WITHOUT arm = $(call get-src-files-without-tag,arm)) \
8585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src)))) \
8595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TEXT.$(__src) = $(LOCAL_SRC_FILES_TEXT.$(__src)))) \
8605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
86148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
86248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
86348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
86448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Application.mk support
86548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
86648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
86748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
86848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *must* be defined in Application.mk files
869a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerNDK_APP_VARS_REQUIRED :=
87048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
87148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *may* be defined in Application.mk files
8725815d77ccd68a5f6f8f7d6f4fa5dfbd05828d33fDavid 'Digit' TurnerNDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CXXFLAGS \
873a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner                         APP_PLATFORM APP_BUILD_SCRIPT APP_ABI APP_MODULES \
87426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner                         APP_PROJECT_PATH APP_STL
87548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
87648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of all variables that may appear in an Application.mk file
877dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner# or defined by the build scripts.
878dfc478bcac20693422ee56a423377403bba46932David 'Digit' TurnerNDK_APP_VARS := $(NDK_APP_VARS_REQUIRED) \
879dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner                $(NDK_APP_VARS_OPTIONAL) \
880fd204377de03a20556b38acf0dc2bdb195729343David 'Digit' Turner                APP_DEBUG \
881dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner                APP_DEBUGGABLE \
882dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner                APP_MANIFEST
88348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
88448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
88548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
88648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Android.mk support
88748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
88848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
88948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
89048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
89148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
89248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Build commands support
89348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
89448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
89548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
89648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
89748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : hide
89848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : nothing
89948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(hide)<make commands>
90048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: To be used as a prefix for Make build commands to hide them
90148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            by default during the build. To show them, set V=1 in your
90248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            environment or command-line.
90348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
90448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            For example:
90548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
90648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#                foo.o: foo.c
90748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#                -->|$(hide) <build-commands>
90848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
90948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            Where '-->|' stands for a single tab character.
91048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
91148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
91248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifeq ($(V),1)
91348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = $(empty)
91448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
91548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = @
91648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
91748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
91828246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# cmd-convert-deps
9191579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#
92028246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# Commands used to copy/convert the .d.org depency file generated by the
92128246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# compiler into its final .d version.
92228246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner#
92328246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# On windows, this myst convert the Windows paths to a format that our
92428246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# Cygwin-based GNU Make can understand (i.e. C:/Foo => /cygdrive/c/Foo)
92528246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner#
92628246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# On other platforms, this simply renames the file.
9271579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner#
9287dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner# NOTE: In certain cases, no dependency file will be generated by the
9297dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner#       compiler (e.g. when compiling an assembly file as foo.s)
9307dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner#
9311579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerifeq ($(HOST_OS),windows)
93228246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turnercmd-convert-deps = \
9337dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner    ( if [ -f "$1.org" ]; then \
9347dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner          $(HOST_AWK) -f $(BUILD_AWK)/convert-deps-to-cygwin.awk $1.org > $1 && \
9357dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner          rm -f $1.org; \
9367dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner      fi )
93728246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turnerelse
93828246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turnercmd-convert-deps = \
9397dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner    ( if [ -f "$1.org" ]; then \
9407dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner          rm -f $1 && \
9417dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner          mv $1.org $1; \
9427dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner      fi )
9431579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif
9441579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner
9457daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# This assumes that many variables have been pre-defined:
9467daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _SRC: source file
9477daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _OBJ: destination file
9487daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _CC: 'compiler' command
9497daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _FLAGS: 'compiler' flags
9507daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _TEXT: Display text (e.g. "Compile++ thumb", must be EXACTLY 15 chars long)
9517daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner#
9527daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerdefine ev-build-file
9537daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_SRC      := $$(_SRC)
9547daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_OBJ      := $$(_OBJ)
9551579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner$$(_OBJ): PRIVATE_DEPS     := $$(call host-path,$$(_OBJ).d)
9567daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_MODULE   := $$(LOCAL_MODULE)
9577daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_TEXT     := "$$(_TEXT)"
9587daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_CC       := $$(_CC)
9597daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_CFLAGS   := $$(_FLAGS)
9607daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK)
9617daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner	@mkdir -p $$(dir $$(PRIVATE_OBJ))
9627daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner	@echo "$$(PRIVATE_TEXT)  : $$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))"
96328246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner	$(hide) $$(PRIVATE_CC) -MMD -MP -MF $$(PRIVATE_DEPS).org $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) && \
96428246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner	$$(call cmd-convert-deps,$$(PRIVATE_DEPS))
9657daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendef
9667daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9677daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# This assumes the same things than ev-build-file, but will handle
9687daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# the definition of LOCAL_FILTER_ASM as well.
9697daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerdefine ev-build-source-file
9707daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS += $$(dir $$(_OBJ))
9717daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerifndef LOCAL_FILTER_ASM
9727daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # Trivial case: Directly generate an object file
9737daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(eval $$(call ev-build-file))
9747daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerelse
9757daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # This is where things get hairy, we first transform
9767daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # the source into an assembler file, send it to the
9777daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # filter, then generate a final object file from it.
9787daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
9797daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9807daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # First, remember the original settings and compute
9817daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # the location of our temporary files.
9827daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
9837daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _ORG_SRC := $$(_SRC)
9847daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _ORG_OBJ := $$(_OBJ)
9857daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _ORG_FLAGS := $$(_FLAGS)
9867daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _ORG_TEXT  := $$(_TEXT)
9877daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9887daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _OBJ_ASM_ORIGINAL := $$(patsubst %.o,%.s,$$(_ORG_OBJ))
9897daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _OBJ_ASM_FILTERED := $$(patsubst %.o,%.filtered.s,$$(_ORG_OBJ))
9907daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9917daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # If the source file is a plain assembler file, we're going to
9927daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # use it directly in our filter.
9937daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  ifneq (,$$(filter %.s,$$(_SRC)))
9947daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    _OBJ_ASM_ORIGINAL := $$(_SRC)
9957daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  endif
9967daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9971579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner  #$$(info SRC=$$(_SRC) OBJ=$$(_OBJ) OBJ_ORIGINAL=$$(_OBJ_ASM_ORIGINAL) OBJ_FILTERED=$$(_OBJ_ASM_FILTERED))
9987daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
9997daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # We need to transform the source into an assembly file, instead of
10007daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # an object. The proper way to do that depends on the file extension.
10017daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
10027daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # For C and C++ source files, simply replace the -c by an -S in the
10037daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # compilation command (this forces the compiler to generate an
10047daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # assembly file).
10057daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
10067daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # For assembler templates (which end in .S), replace the -c with -E
10077daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # to send it to the preprocessor instead.
10087daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
10097daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # Don't do anything for plain assembly files (which end in .s)
10107daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  #
10117daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  ifeq (,$$(filter %.s,$$(_SRC)))
10127daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    _OBJ   := $$(_OBJ_ASM_ORIGINAL)
10137daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    ifneq (,$$(filter %.S,$$(_SRC)))
10147daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner      _FLAGS := $$(patsubst -c,-E,$$(_ORG_FLAGS))
10157daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    else
10167daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner      _FLAGS := $$(patsubst -c,-S,$$(_ORG_FLAGS))
10177daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    endif
10187daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner    $$(eval $$(call ev-build-file))
10197daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  endif
10207daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
10217daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # Next, process the assembly file with the filter
10227daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(_OBJ_ASM_FILTERED): PRIVATE_SRC    := $$(_OBJ_ASM_ORIGINAL)
10237daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(_OBJ_ASM_FILTERED): PRIVATE_DST    := $$(_OBJ_ASM_FILTERED)
10247daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(_OBJ_ASM_FILTERED): PRIVATE_FILTER := $$(LOCAL_FILTER_ASM)
10257daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(_OBJ_ASM_FILTERED): PRIVATE_MODULE := $$(LOCAL_MODULE)
10267daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(_OBJ_ASM_FILTERED): $$(_OBJ_ASM_ORIGINAL)
10277daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner	@echo "AsmFilter      : $$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))"
10287daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner	$(hide) $$(PRIVATE_FILTER) $$(PRIVATE_SRC) $$(PRIVATE_DST)
10297daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
10307daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # Then, generate the final object, we need to keep assembler-specific
10317daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  # flags which look like -Wa,<option>:
10327daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _SRC   := $$(_OBJ_ASM_FILTERED)
10337daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _OBJ   := $$(_ORG_OBJ)
10347daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _FLAGS := $$(filter -Wa%,$$(_ORG_FLAGS)) -c
10357daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  _TEXT  := "Assembly     "
10367daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner  $$(eval $$(call ev-build-file))
10377daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendif
10387daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendef
10397daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
104048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
104148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template  : ev-compile-c-source
104248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH)
104348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: target object file (without path)
104448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
104548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(eval $(call ev-compile-c-source,<srcfile>,<objfile>)
104648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-c-source and
104748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             compile-s-source
104848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
104948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine  ev-compile-c-source
105048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1)
105148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)
105248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
10537daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_FLAGS := $$($$(my)CFLAGS) \
10547daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(call get-src-file-target-cflags,$(1)) \
10551579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \
10567daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(LOCAL_CFLAGS) \
10577daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(NDK_APP_CFLAGS) \
10581579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          $$(call host-c-includes,$$($(my)C_INCLUDES)) \
10591579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          -c \
106048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
10617daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_TEXT := "Compile $$(call get-src-file-text,$1)"
10627daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_CC   := $$(TARGET_CC)
106348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
10647daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(eval $$(call ev-build-source-file))
106548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
106648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
106748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
106848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-c-source
106948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH)
107048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
107148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-c-source,<srcfile>)
107248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C source file
107348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
107448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercompile-c-source = $(eval $(call ev-compile-c-source,$1,$(1:%.c=%.o)))
107548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
107648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
107748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-s-source
107848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single Assembly source file name (relative to LOCAL_PATH)
107948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
108048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-s-source,<srcfile>)
108148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single Assembly source file
108248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
10837daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnercompile-s-source = $(eval $(call ev-compile-c-source,$1,$(patsubst %.s,%.o,$(patsubst %.S,%.o,$1))))
108448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
108548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
108648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
108748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template  : ev-compile-cpp-source
108848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)
108948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: target object file (without path)
109048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
109148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(eval $(call ev-compile-cpp-source,<srcfile>,<objfile>)
109248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-cpp-source
109348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
109448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
109548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine  ev-compile-cpp-source
109648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1)
109748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)
10987daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_FLAGS := $$($$(my)CXXFLAGS) \
10997daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(call get-src-file-target-cflags,$(1)) \
11001579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          $$(call host-c-includes, $$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \
11017daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(LOCAL_CFLAGS) \
11027daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(LOCAL_CPPFLAGS) \
11037daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(LOCAL_CXXFLAGS) \
11047daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(NDK_APP_CFLAGS) \
11057daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(NDK_APP_CPPFLAGS) \
11067daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner          $$(NDK_APP_CXXFLAGS) \
11071579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          $$(call host-c-includes,$$($(my)C_INCLUDES)) \
11081579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner          -c \
11097daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
11107daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_CC   := $$($$(my)CXX)
11117daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_TEXT := "Compile++ $$(call get-src-file-text,$1)"
11127daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner
11137daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(eval $$(call ev-build-source-file))
111448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
111548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
111648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
111748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-cpp-source
111848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)
111948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
112048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-c-source,<srcfile>)
112148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C++ source file
112248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
112348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercompile-cpp-source = $(eval $(call ev-compile-cpp-source,$1,$(1:%$(LOCAL_CPP_EXTENSION)=%.o)))
112448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
112548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
112648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Command   : cmd-install-file
112748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: source file
112848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: destination file
112948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
113048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call cmd-install-file,<srcfile>,<dstfile>)
113148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : To be used as a Make build command to copy/install a file to
113248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             a given location.
113348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
113448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine cmd-install-file
113548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner@mkdir -p $(dir $2)
113648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$(hide) cp -fp $1 $2
113748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
113835f944d26f33fff3e59ab449c991b18260a5fa0bDavid 'Digit' Turner
11396a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11406a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
11416a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#  Module imports
11426a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
11436a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11446a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Initialize import list
11456a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-init = $(eval __ndk_import_dirs :=)
11466a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11476a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Add an optional single directory to the list of import paths
11486a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
11496a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-add-path-optional = \
11506a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner  $(if $(strip $(wildcard $1)),\
11516a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(call ndk_log,Adding import directory: $1)\
11526a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(eval __ndk_import_dirs += $1)\
11536a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner  )\
11546a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11556a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Add a directory to the list of import paths
11566a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# This will warn if the directory does not exist
11576a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
11586a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-add-path = \
11596a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner  $(if $(strip $(wildcard $1)),\
11606a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(call ndk_log,Adding import directory: $1)\
11616a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(eval __ndk_import_dirs += $1)\
11626a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner  ,\
11636a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(call __ndk_info,WARNING: Ignoring unknown import directory: $1)\
11646a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner  )\
11656a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11666a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-find-module = $(strip \
11676a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner      $(eval __imported_module :=)\
11686a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner      $(foreach __import_dir,$(__ndk_import_dirs),\
11696a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner        $(if $(__imported_module),,\
11706a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner          $(call ndk_log,  Probing $(__import_dir)/$1/Android.mk)\
11716a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner          $(if $(strip $(wildcard $(__import_dir)/$1/Android.mk)),\
11726a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner            $(eval __imported_module := $(__import_dir)/$1)\
11736a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner          )\
11746a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner        )\
11756a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner      )\
11766a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner      $(__imported_module)\
11776a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    )
11786a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
11796a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# described in docs/IMPORT-MODULE.TXT
11806a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# $1: tag name for the lookup
11816a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
1182b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# Small technical note on __ndk_import_depth: we use this variable to
1183b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# record the depth of recursive import-module calls. The variable is
1184b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# initially empty, and we append a "x" to it each time import-module is
1185b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# called. I.e. for three recursive calls to import-module, we would get
1186b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# the values:
1187b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#
1188b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#   first call:   x
1189b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#   second call:  xx
1190b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#   third call:   xxx
1191b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#
1192b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# This is used in module-add to add the top-level modules (i.e. those
1193b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# that are not added with import-module) to __ndk_top_modules, corresponding
1194b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# to the default list of wanted modules (see setup-toolchain.mk).
1195b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner#
11966a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-module = \
1197499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner    $(eval __import_tag := $(strip $1))\
1198499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner    $(if $(call seq,$(words $(__import_tag)),1),,\
1199499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      $(call __ndk_info,$(call local-makefile): Cannot import module with spaces in tag: '$(__import_tag)')\
1200499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner    )\
1201499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner    $(if $(call set_is_member,$(__ndk_import_list),$(__import_tag)),\
1202499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      $(call ndk_log,Skipping duplicate import for module with tag '$(__import_tag)')\
12036a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    ,\
1204499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      $(call ndk_log,Looking for imported module with tag '$(__import_tag)')\
1205499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      $(eval __imported_path := $(call import-find-module,$(__import_tag)))\
1206499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      $(if $(__imported_path),\
1207b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(call ndk_log,    Found in $(__imported_path))\
1208b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(eval __ndk_import_depth := $(__ndk_import_depth)x) \
1209b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(eval __ndk_import_list := $(call set_insert,$(__ndk_import_list),$(__import_tag)))\
1210499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner        $(eval include $(__imported_path)/Android.mk)\
1211b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(eval __ndk_import_depth := $(__ndk_import_depth:%x=%))\
1212499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      ,\
1213499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner        $(call __ndk_info,$(call local-makefile): Cannot find module with tag '$(__import_tag)' in import path)\
1214499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner        $(call __ndk_info,Are you sure your NDK_MODULE_PATH variable is properly defined ?)\
1215b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(call __ndk_info,The following directories were searched:)\
1216b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        $(for __import_dir,$(__ndk_import_dirs),\
1217b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner          $(call __ndk_info,    $(__import_dir))\
1218b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner        )\
1219499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner        $(call __ndk_error,Aborting.)\
1220499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner      )\
1221b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner   )
12226a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner
12236a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Only used for debugging
12246a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner#
12256a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-debug = \
12266a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(info IMPORT DIRECTORIES:)\
12276a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    $(foreach __dir,$(__ndk_import_dirs),\
12286a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner      $(info -- $(__dir))\
12296a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner    )\
1230d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1231d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1232d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#  Module classes
1233d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1234d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' TurnerNDK_MODULE_CLASSES :=
1235d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1236d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Register a new module class
1237d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $1: class name (e.g. STATIC_LIBRARY)
1238d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $2: optional file prefix (e.g. 'lib')
1239d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $3: optional file suffix (e.g. '.so')
1240d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1241d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-register = \
1242d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval NDK_MODULE_CLASSES += $1) \
1243d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval NDK_MODULE_CLASS.$1.FILE_PREFIX := $2) \
1244d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval NDK_MODULE_CLASS.$1.FILE_SUFFIX := $3) \
1245d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(false)) \
1246d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1247d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Same a module-class-register, for installable modules
1248d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1249d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# An installable module is one that will be copied to $PROJECT/libs/<abi>/
1250d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# during the NDK build.
1251d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1252d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $1: class name
1253d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $2: optional file prefix
1254d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $3: optional file suffix
1255d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1256d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-register-installable = \
1257d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(call module-class-register,$1,$2,$3) \
1258d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner    $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(true))
1259d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
12607a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-class-set-prebuilt = \
12617a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner    $(eval NDK_MODULE_CLASS.$1.PREBUILT := $(true))
12627a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
1263d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) if $1 is a valid/registered LOCAL_MODULE_CLASS value
1264d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1265d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-check = $(call set_is_member,$(NDK_MODULE_CLASSES),$1)
1266d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1267d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) if $1 corresponds to an installable module class
1268d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1269d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-is-installable = $(if $(NDK_MODULE_CLASS.$1.INSTALLABLE),$(true),$(false))
1270d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
12717a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns $(true) if $1 corresponds to an installable module class
12727a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
12737a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-class-is-prebuilt = $(if $(NDK_MODULE_CLASS.$1.PREBUILT),$(true),$(false))
1274d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1275d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1276d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Register valid module classes
1277d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner#
1278d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1279d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# static libraries:
1280d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> lib<foo>.a by default
1281d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register,STATIC_LIBRARY,lib,.a)
1282d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1283d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# shared libraries:
1284d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> lib<foo>.so
1285d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# a shared library is installable.
1286d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,SHARED_LIBRARY,lib,.so)
1287d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
1288d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# executable
1289d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> <foo>
1290d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# an executable is installable.
1291d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,EXECUTABLE,,)
1292d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner
12937a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# prebuilt shared library
1294d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> <foo>  (we assume it is already well-named)
1295d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# it is installable
1296d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,PREBUILT_SHARED_LIBRARY,,)
12977a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-set-prebuilt,PREBUILT_SHARED_LIBRARY)
12987a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
12997a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# prebuilt static library
13007a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# <foo> -> <foo> (we assume it is already well-named)
13017a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-register,PREBUILT_STATIC_LIBRARY,,)
13027a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-set-prebuilt,PREBUILT_STATIC_LIBRARY)
13031579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner
130426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
130526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# C++ STL support
130626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
130726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
130826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# The list of registered STL implementations we support
130926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' TurnerNDK_STL_LIST :=
131026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
131126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Used internally to register a given STL implementation, see below.
131226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
131326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system)
131426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $2: STL module name (e.g. cxx-stl/system)
131526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $3: list of static libraries all modules will depend on
131626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $4: list of shared libraries all modules will depend on
131726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
131826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-register = \
131926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(eval __ndk_stl := $(strip $1)) \
132026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(eval NDK_STL_LIST += $(__ndk_stl)) \
132126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(eval NDK_STL.$(__ndk_stl).IMPORT_MODULE := $(strip $2)) \
132226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(eval NDK_STL.$(__ndk_stl).STATIC_LIBS := $(strip $3)) \
132326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(eval NDK_STL.$(__ndk_stl).SHARED_LIBS := $(strip $4))
132426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
132526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called to check that the value of APP_STL is a valid one.
132626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it apperas in APP_STL (e.g. 'system')
132726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
132826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-check = \
132926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(if $(call set_is_member,$(NDK_STL_LIST),$1),,\
133026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner        $(call __ndk_info,Invalid APP_STL value: $1)\
133126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner        $(call __ndk_info,Please use one of the following instead: $(NDK_STL_LIST))\
133226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner        $(call __ndk_error,Aborting))
133326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
133426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called before the top-level Android.mk is parsed to
133526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# select the STL implementation.
133626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system)
133726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
133826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-select = \
133926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(call import-module,$(NDK_STL.$1.IMPORT_MODULE))
134026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
134126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called after all Android.mk files are parsed to add
134226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# proper STL dependencies to every C++ module.
134326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system)
134426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
134526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-add-dependencies = \
134626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    $(call modules-add-c++-dependencies,\
134726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner        $(NDK_STL.$1.STATIC_LIBS),\
134826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner        $(NDK_STL.$1.SHARED_LIBS))
134926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
135026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
135126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
135226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
135326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'system' STL implementation
135426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
135526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\
135626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    system,\
135726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    cxx-stl/system,\
135826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    libstdc++,\
135926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    )
136026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
136126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'stlport_static' STL implementation
136226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
136326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\
136426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    stlport_static,\
13652ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner    cxx-stl/stlport,\
136626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    stlport_static,\
136726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    )
136826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner
136926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'stlport_shared' STL implementation
137026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner#
137126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\
137226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    stlport_shared,\
13732ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner    cxx-stl/stlport,\
137426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    ,\
137526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    stlport_shared\
137626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner    )
13772ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner
137881dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner# Register the 'gnustl_static' STL implementation
137981dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner#
138081dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner$(call ndk-stl-register,\
138181dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner    gnustl_static,\
138281dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner    cxx-stl/gnu-libstdc++,\
138381dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner    gnustl_static,\
138481dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner    \
138581dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner    )
1386