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