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 48bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turnerspace4 := $(space)$(space)$(space)$(space) 49bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner 5048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 5148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last2 5248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list 5348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : the penultimate (next-to-last) element of a list 5448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call last2, <LIST>) 5548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 5648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast2 = $(word $(words $1), x $1) 5748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 5848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 5948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last3 6048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list 6148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : the antepenultimate (second-next-to-last) element of a list 6248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call last3, <LIST>) 6348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 6448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast3 = $(word $(words $1), x x $1) 6548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 6648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 67bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Function : remove-duplicates 68bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Arguments: a list 69bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Returns : the list with duplicate items removed, order is preserved. 70bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Usage : $(call remove-duplicates, <LIST>) 71bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# Note : This is equivalent to the 'uniq' function provided by GMSL, 72bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# however this implementation is non-recursive and *much* 73bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# faster. It will also not explode the stack with a lot of 74bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# items like 'uniq' does. 75bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# ----------------------------------------------------------------------------- 76bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turnerremove-duplicates = $(strip \ 77bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner $(eval __uniq_ret :=) \ 78bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner $(foreach __uniq_item,$1,\ 79bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner $(if $(findstring $(__uniq_item),$(__uniq_ret)),,\ 80bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner $(eval __uniq_ret += $(__uniq_item))\ 81bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner )\ 82bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner )\ 83bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner $(__uniq_ret)) 84bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner 85bafbfe8866f1016cc9c651d9e9ead21a0b7eb16eDavid 'Digit' Turner# ----------------------------------------------------------------------------- 8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro : this-makefile 8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : the name of the current Makefile in the inclusion stack 8848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(this-makefile) 8948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 9048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerthis-makefile = $(lastword $(MAKEFILE_LIST)) 9148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 9248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 9348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro : local-makefile 9448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : the name of the last parsed Android.mk file 9548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(local-makefile) 9648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 9748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlocal-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST))) 9848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 9948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 10048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : assert-defined 10148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names 10248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 10348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call assert-defined, VAR1 VAR2 VAR3...) 10448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all variables listed in $1 are defined, or abort the 10548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# build 10648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 10748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerassert-defined = $(foreach __varname,$(strip $1),\ 10848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(if $(strip $($(__varname))),,\ 10948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_error, Assertion failure: $(__varname) is not defined)\ 11048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner )\ 11148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner) 11248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 11348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 11448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : clear-vars 11548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names 11648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 2: file where the variable should be defined 11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call clear-vars, VAR1 VAR2 VAR3...) 11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Clears/undefines all variables in argument list 12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerclear-vars = $(foreach __varname,$1,$(eval $(__varname) := $(empty))) 12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 12448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-required-vars 12548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names 12648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 2: file where the variable(s) should be defined 12748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call check-required-vars, VAR1 VAR2 VAR3..., <file>) 12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all required vars listed in $1 were defined by $2 13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# or abort the build with an error 13148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 13248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-required-vars = $(foreach __varname,$1,\ 13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(if $(strip $($(__varname))),,\ 13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_info, Required variable $(__varname) is not defined by $2)\ 13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_error,Aborting)\ 13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner )\ 13748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner) 13848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 1391579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# ----------------------------------------------------------------------------- 1401579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Function : host-path 1411579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Arguments: 1: file path 1421579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Returns : file path, as understood by the host file system 1431579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Usage : $(call host-path,<path>) 1441579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Rationale: This function is used to translate Cygwin paths into 145462c63197acacd294d9835dd5afb6913058ea57aDavid 'Digit' Turner# Cygwin-specific ones. On other platforms, it will just 1461579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# return its argument. 1471579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# ----------------------------------------------------------------------------- 148462c63197acacd294d9835dd5afb6913058ea57aDavid 'Digit' Turnerifeq ($(HOST_OS),cygwin) 1491022d8d9fa56b2a82982e3ab56dc2b7576c0fb03David 'Digit' Turnerhost-path = $(if $(strip $1),$(call cygwin-to-host-path,$1)) 1501579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerelse 1511579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-path = $1 1521579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif 1531579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner 1541579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# ----------------------------------------------------------------------------- 155ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Function : host-rm 156ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Arguments: 1: list of files 157ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Usage : $(call host-rm,<files>) 158ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Rationale: This function expands to the host-specific shell command used 159ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# to remove some files. 160ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 161ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerifeq ($(HOST_OS),windows) 1625f4cab0bea0af60cf3fcb37fbd8bbd64461b575fDavid 'Digit' Turnerhost-rm = \ 1634f2c24bb8f6aaadc376151ceb39975763a53e3ebAndrew Hsieh $(eval __host_rm_files := $(foreach __host_rm_file,$1,$(subst /,\,$(wildcard $(__host_rm_file)))))\ 1645f4cab0bea0af60cf3fcb37fbd8bbd64461b575fDavid 'Digit' Turner $(if $(__host_rm_files),del /f/q $(__host_rm_files) >NUL 2>NUL) 165ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerelse 166ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerhost-rm = rm -f $1 167ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerendif 168ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 169ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 170ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Function : host-rmdir 171ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Arguments: 1: list of files or directories 172ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Usage : $(call host-rm,<files>) 173ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Rationale: This function expands to the host-specific shell command used 174ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# to remove some files _and_ directories. 175ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 176ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerifeq ($(HOST_OS),windows) 1774f2c24bb8f6aaadc376151ceb39975763a53e3ebAndrew Hsiehhost-rmdir = \ 1784f2c24bb8f6aaadc376151ceb39975763a53e3ebAndrew Hsieh $(eval __host_rmdir_files := $(foreach __host_rmdir_file,$1,$(subst /,\,$(wildcard $(__host_rmdir_file)))))\ 1795f4cab0bea0af60cf3fcb37fbd8bbd64461b575fDavid 'Digit' Turner $(if $(__host_rmdir_files),del /f/s/q $(__host_rmdir_files) >NUL 2>NUL) 180ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerelse 18172ab69d4859feabb36868b17cd614cf7a4be6149David 'Digit' Turnerhost-rmdir = rm -rf $1 182ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerendif 183ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 184ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 185ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Function : host-mkdir 186ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Arguments: 1: directory path 187ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Usage : $(call host-mkdir,<path> 188ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Rationale: This function expands to the host-specific shell command used 189ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# to create a path if it doesn't exist. 190ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 191ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerifeq ($(HOST_OS),windows) 192544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerhost-mkdir = md $(subst /,\,"$1") >NUL 2>NUL || rem 193ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerelse 194ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerhost-mkdir = mkdir -p $1 195ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerendif 196ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 197ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 198ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Function : host-cp 199ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Arguments: 1: source file 200ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# 2: target file 201ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Usage : $(call host-cp,<src-file>,<dst-file>) 202ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Rationale: This function expands to the host-specific shell command used 203ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# to copy a single file 204ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 205ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerifeq ($(HOST_OS),windows) 2065f4cab0bea0af60cf3fcb37fbd8bbd64461b575fDavid 'Digit' Turnerhost-cp = copy /b/y $(subst /,\,"$1" "$2") > NUL 207ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerelse 208ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerhost-cp = cp -f $1 $2 209ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerendif 210ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 211ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 212ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Function : host-install 213ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Arguments: 1: source file 214ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# 2: target file 215ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Usage : $(call host-install,<src-file>,<dst-file>) 216ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# Rationale: This function expands to the host-specific shell command used 217ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# to install a file or directory, while preserving its timestamps 218ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# (if possible). 219ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 220ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerifeq ($(HOST_OS),windows) 2215f4cab0bea0af60cf3fcb37fbd8bbd64461b575fDavid 'Digit' Turnerhost-install = copy /b/y $(subst /,\,"$1" "$2") > NUL 222ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerelse 223ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerhost-install = install -p $1 $2 224ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turnerendif 225ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 226ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner# ----------------------------------------------------------------------------- 2271579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Function : host-c-includes 2281579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Arguments: 1: list of file paths (e.g. "foo bar") 2291579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Returns : list of include compiler options (e.g. "-Ifoo -Ibar") 2301579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Usage : $(call host-c-includes,<paths>) 2311579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# Rationale: This function is used to translate Cygwin paths into 232462c63197acacd294d9835dd5afb6913058ea57aDavid 'Digit' Turner# Cygwin-specific ones. On other platforms, it will just 2331579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# return its argument. 2341579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# ----------------------------------------------------------------------------- 235462c63197acacd294d9835dd5afb6913058ea57aDavid 'Digit' Turnerifeq ($(HOST_OS),cygwin) 2361579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-c-includes = $(patsubst %,-I%,$(call host-path,$1)) 2371579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerelse 2381579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerhost-c-includes = $(1:%=-I%) 2391579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif 2401579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner 2411253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# ----------------------------------------------------------------------------- 2421253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# Function : copy-if-differ 2431253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# Arguments: 1: source file 2441253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# 2: destination file 2451253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# Usage : $(call copy-if-differ,<src-file>,<dst-file>) 2461253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# Rationale: This function copy source file to destination file if contents are 2471253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# different. 2481253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh# ----------------------------------------------------------------------------- 2491253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsiehifeq ($(HOST_OS),windows) 2501253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsiehcopy-if-differ = $(HOST_CMP) -s $1 $2 > NUL || copy /b/y $(subst /,\,"$1" "$2") > NUL 2511253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsiehelse 2521253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsiehcopy-if-differ = $(HOST_CMP) -s $1 $2 > /dev/null 2>&1 || cp -f $1 $2 2531253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsiehendif 254fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner 255fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# ----------------------------------------------------------------------------- 256544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Function : generate-dir 257544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Arguments: 1: directory path 258544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Returns : Generate a rule, but not dependency, to create a directory with 259544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# host-mkdir. 260544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Usage : $(call generate-dir,<path>) 261544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# ----------------------------------------------------------------------------- 262544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerdefine ev-generate-dir 263544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner__ndk_dir := $1 264544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerifeq (,$$(__ndk_dir_flag__$1)) 265544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner__ndk_dir_flag__$1 := true 266544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$1: 267544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner @$$(call host-mkdir,$$@) 268544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerendif 269544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerendef 270544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 271544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnergenerate-dir = $(eval $(call ev-generate-dir,$1)) 272544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 273544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# ----------------------------------------------------------------------------- 274544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Function : generate-file-dir 275544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Arguments: 1: file path 276544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Returns : Generate a dependency and a rule to ensure that the parent 277544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# directory of the input file path will be created before it. 278544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# This is used to enforce a call to host-mkdir. 279544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Usage : $(call generate-file-dir,<file>) 280544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Rationale: Many object files will be stored in the same output directory. 281544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# Introducing a dependency on the latter avoids calling mkdir -p 282544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# for every one of them. 283544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# 284544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# ----------------------------------------------------------------------------- 285544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 286544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerdefine ev-generate-file-dir 287544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner__ndk_file_dir := $(call parent-dir,$1) 288544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$$(call generate-dir,$$(__ndk_file_dir)) 289544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$1: $$(__ndk_file_dir) 290544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnerendef 291544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 292544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turnergenerate-file-dir = $(eval $(call ev-generate-file-dir,$1)) 293544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 294544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner# ----------------------------------------------------------------------------- 2957a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# Function : generate-list-file 2967a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# Arguments: 1: list of strings (possibly very long) 2977a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# 2: file name 2987a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# Returns : write the content of a possibly very long string list to a file. 2997a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# this shall be used in commands and will work around limitations 3007a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# of host command-line lengths. 3017a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# Usage : $(call host-echo-to-file,<string-list>,<file>) 3027a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# Rationale: When there is a very large number of objects and/or libraries at 3037a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# link time, the size of the command becomes too large for the 3047a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# host system's maximum. Various tools however support the 3057a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# @<listfile> syntax, where <listfile> is the path of a file 3067a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# which content will be parsed as if they were options. 3077a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# 3087a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# This function is used to generate such a list file from a long 3097a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# list of strings in input. 3107a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# 3117a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# ----------------------------------------------------------------------------- 3127a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 313616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# Helper functions because the GNU Make $(word ...) function does 314616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# not accept a 0 index, so we need to bump any of these to 1 when 315616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# we find them. 316616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# 317616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerindex-is-zero = $(filter 0 00 000 0000 00000 000000 0000000,$1) 318616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerbump-0-to-1 = $(if $(call index-is-zero,$1),1,$1) 319616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 320616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# Same as $(wordlist ...) except the start index, if 0, is bumped to 1 321616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerindex-word-list = $(wordlist $(call bump-0-to-1,$1),$2,$3) 322616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 323616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# NOTE: With GNU Make $1 and $(1) are equivalent, which means 324616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# that $10 is equivalent to $(1)0, and *not* $(10). 325616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 326616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# Used to generate a slice of up to 10 items starting from index $1, 327616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# If $1 is 0, it will be bumped to 1 (and only 9 items will be printed) 328616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# $1: start (tenth) index. Can be 0 329616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# $2: word list 330616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# 331616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-start-gen-10 33222c5065bae39793e5c3b0c5654c7e4f76f2de5f4David 'Digit' Turner $$(hide) $$(HOST_ECHO_N) "$(call index-word-list,$10,$19,$2) " >> $$@ 333616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 334616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 335616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# Used to generate a slice of always 10 items starting from index $1 336616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# $1: start (tenth) index. CANNOT BE 0 337616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# $2: word list 338616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-always-gen-10 33922c5065bae39793e5c3b0c5654c7e4f76f2de5f4David 'Digit' Turner $$(hide) $$(HOST_ECHO_N) "$(wordlist $10,$19,$2) " >> $$@ 340616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 341616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 342616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# Same as list-file-always-gen-10, except that the word list might be 343616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner# empty at position $10 (i.e. $(1)0) 344616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-maybe-gen-10 345616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $10,$2),) 34622c5065bae39793e5c3b0c5654c7e4f76f2de5f4David 'Digit' Turner $$(hide) $$(HOST_ECHO_N) "$(wordlist $10,$19,$2) " >> $$@ 3477a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif 3487a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendef 3497a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 350616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-start-gen-100 351616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-10,$10,$2) 352616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$11,$2) 353616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$12,$2) 354616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$13,$2) 355616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$14,$2) 356616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$15,$2) 357616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$16,$2) 358616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$17,$2) 359616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$18,$2) 360616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$19,$2) 361616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 362616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 363616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-always-gen-100 364616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$10,$2) 365616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$11,$2) 366616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$12,$2) 367616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$13,$2) 368616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$14,$2) 369616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$15,$2) 370616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$16,$2) 371616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$17,$2) 372616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$18,$2) 373616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$19,$2) 374616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 375616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 376616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-maybe-gen-100 377616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $(call bump-0-to-1,$100),$2),) 378616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $199,$2),) 379616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-10,$10,$2) 380616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$11,$2) 381616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$12,$2) 382616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$13,$2) 383616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$14,$2) 384616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$15,$2) 385616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$16,$2) 386616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$17,$2) 387616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$18,$2) 388616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$19,$2) 389616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerelse 390616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $150,$2),) 391616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-10,$10,$2) 392616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$11,$2) 393616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$12,$2) 394616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$13,$2) 395616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-10,$14,$2) 396616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$15,$2) 397616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$16,$2) 398616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$17,$2) 399616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$18,$2) 400616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$19,$2) 401616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerelse 402616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-10,$10,$2) 403616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$11,$2) 404616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$12,$2) 405616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$13,$2) 406616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-10,$14,$2) 407616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 408616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 409616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 410616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 411616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 412616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerdefine list-file-maybe-gen-1000 413616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $(call bump-0-to-1,$1000),$2),) 414616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $1999,$2),) 415616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-100,$10,$2) 416616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$11,$2) 417616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$12,$2) 418616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$13,$2) 419616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$14,$2) 420616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$15,$2) 421616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$16,$2) 422616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$17,$2) 423616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$18,$2) 424616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$19,$2) 425616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerelse 426616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerifneq ($(word $1500,$2),) 427616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-100,$10,$2) 428616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$11,$2) 429616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$12,$2) 430616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$13,$2) 431616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-always-gen-100,$14,$2) 432616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$15,$2) 433616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$16,$2) 434616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$17,$2) 435616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$18,$2) 436616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$19,$2) 437616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerelse 438616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-start-gen-100,$10,$2) 439616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$11,$2) 440616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$12,$2) 441616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$13,$2) 442616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-100,$14,$2) 443616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 444616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 445616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendif 446616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turnerendef 447616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 448616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner 4497a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerdefine generate-list-file-ev 4507a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner__list_file := $2 4517a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 4521253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh.PHONY: $$(__list_file).tmp 4537a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 454544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$$(call generate-file-dir,$$(__list_file).tmp) 455544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 4561253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh$$(__list_file).tmp: 45722c5065bae39793e5c3b0c5654c7e4f76f2de5f4David 'Digit' Turner $$(hide) $$(HOST_ECHO_N) "" > $$@ 458616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,0,$1) 459616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,1,$1) 460616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,2,$1) 461616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,3,$1) 462616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,4,$1) 463616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner$(call list-file-maybe-gen-1000,5,$1) 4641253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh 4651253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh$$(__list_file): $$(__list_file).tmp 4661253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh $$(hide) $$(call copy-if-differ,$$@.tmp,$$@) 4671253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh $$(hide) $$(call host-rm,$$@.tmp) 4681253fb9584ff236b9fb2886cfc0986416751822dAndrew Hsieh 4697a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendef 4707a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 4717a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnergenerate-list-file = $(eval $(call generate-list-file-ev,$1,$2)) 4727a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 4737a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# ----------------------------------------------------------------------------- 474fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Function : link-whole-archives 475fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Arguments: 1: list of whole static libraries 476fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Returns : linker flags to use the whole static libraries 477fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Usage : $(call link-whole-archives,<libraries>) 478fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# Rationale: This function is used to put the list of whole static libraries 479fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# inside a -Wl,--whole-archive ... -Wl,--no-whole-archive block. 480fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# If the list is empty, it returns an empty string. 481fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# This function also calls host-path to translate the library 482fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# paths. 483fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner# ----------------------------------------------------------------------------- 484fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turnerlink-whole-archives = $(if $(strip $1),$(call link-whole-archive-flags,$1)) 485fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turnerlink-whole-archive-flags = -Wl,--whole-archive $(call host-path,$1) -Wl,--no-whole-archive 486fc53a9dd8c214b498c00b3028c86de7085c2cab6David 'Digit' Turner 487419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ============================================================================= 488419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 489419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Modules database 490419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 491419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# The following declarations are used to manage the list of modules 492419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# defined in application's Android.mk files. 493419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 494419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Technical note: 495419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# We use __ndk_modules to hold the list of all modules corresponding 496419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# to a given application. 497419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 498419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# For each module 'foo', __ndk_modules.foo.<field> is used 499419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# to store module-specific information. 500419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 501419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# type -> type of module (e.g. 'static', 'shared', ...) 502419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# depends -> list of other modules this module depends on 503419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 5048700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Also, LOCAL_XXXX values defined for a module are recorded in XXXX, e.g.: 5058700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 5068700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# PATH -> recorded LOCAL_PATH for the module 5078700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# CFLAGS -> recorded LOCAL_CFLAGS for the module 5088700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# ... 5098700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 5108700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Some of these are created by build scripts like BUILD_STATIC_LIBRARY: 5118700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 5128700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# MAKEFILE -> The Android.mk where the module is defined. 5138700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# LDFLAGS -> Final linker flags 5148700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# OBJECTS -> List of module objects 5158700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# BUILT_MODULE -> location of module built file (e.g. obj/<app>/<abi>/libfoo.so) 5168700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 517419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Note that some modules are never installed (e.g. static libraries). 518419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 519419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ============================================================================= 520419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 5218700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# The list of LOCAL_XXXX variables that are recorded for each module definition 5228700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# These are documented by docs/ANDROID-MK.TXT. Exception is LOCAL_MODULE 5238700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 5248700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodules-LOCALS := \ 5258700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner MODULE \ 526bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner MODULE_FILENAME \ 5278700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner PATH \ 5288700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner SRC_FILES \ 5298700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner CPP_EXTENSION \ 5308700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner C_INCLUDES \ 5318700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner CFLAGS \ 5328700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner CXXFLAGS \ 5338700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner CPPFLAGS \ 5348700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner STATIC_LIBRARIES \ 535b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner WHOLE_STATIC_LIBRARIES \ 5368700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner SHARED_LIBRARIES \ 5378700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner LDLIBS \ 5388700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner ALLOW_UNDEFINED_SYMBOLS \ 5398700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner ARM_MODE \ 5408700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner ARM_NEON \ 5418700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner DISABLE_NO_EXECUTE \ 542f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich DISABLE_RELRO \ 5438700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner EXPORT_CFLAGS \ 5448700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner EXPORT_CPPFLAGS \ 5458700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner EXPORT_LDLIBS \ 546a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner EXPORT_C_INCLUDES \ 5477daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner FILTER_ASM \ 548c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner CPP_FEATURES \ 5497a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner SHORT_COMMANDS \ 5508700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 5518700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# The following are generated by the build scripts themselves 552d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 553d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_MAKEFILE will contain the path to the Android.mk defining the module 554d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += MAKEFILE 555d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 556d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_LDFLAGS will contain the set of final linker flags for the module 557d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += LDFLAGS 558d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 559d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_OBJECTS will contain the list of object files generated from the 560d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# module's sources, if any. 561d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += OBJECTS 562d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 563d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_BUILT_MODULE will contain the location of the symbolic version of 564d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# the generated module (i.e. the one containing all symbols used during 565d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# native debugging). It is generally under $PROJECT/obj/local/ 566d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += BUILT_MODULE 567d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 568d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_OBJS_DIR will contain the location where the object files for 569d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# this module will be stored. Usually $PROJECT/obj/local/<module>/obj 570d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += OBJS_DIR 571d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 572d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_INSTALLED will contain the location of the installed version 573d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# of the module. Usually $PROJECT/libs/<abi>/<prefix><module><suffix> 574d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# where <prefix> and <suffix> depend on the module class. 575d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += INSTALLED 576d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 577d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# LOCAL_MODULE_CLASS will contain the type of the module 578d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# (e.g. STATIC_LIBRARY, SHARED_LIBRARY, etc...) 579d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-LOCALS += MODULE_CLASS 5808700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 581419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# the list of managed fields per module 582d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodules-fields = depends \ 5838700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(modules-LOCALS) 584419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 58548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 58648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : modules-clear 58748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: None 58848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 58948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call modules-clear) 59048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: clears the list of defined modules known by the build system 59148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 592419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-clear = \ 593419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(foreach __mod,$(__ndk_modules),\ 594419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(foreach __field,$(modules-fields),\ 595419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __ndk_modules.$(__mod).$(__field) := $(empty))\ 596419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner )\ 597419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner )\ 598d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner $(eval __ndk_modules := $(empty_set)) \ 599d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner $(eval __ndk_top_modules := $(empty)) \ 600499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(eval __ndk_import_list := $(empty)) \ 601d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner $(eval __ndk_import_depth := $(empty)) 60248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 60348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 6046724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Function : modules-get-list 6056724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Arguments: None 6066724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Returns : The list of all recorded modules 6076724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Usage : $(call modules-get-list) 6086724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ----------------------------------------------------------------------------- 6096724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnermodules-get-list = $(__ndk_modules) 6106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 6116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ----------------------------------------------------------------------------- 612d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Function : modules-get-top-list 613d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Arguments: None 614d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Returns : The list of all recorded non-imported modules 615d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# Usage : $(call modules-get-top-list) 616d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# ----------------------------------------------------------------------------- 617d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turnermodules-get-top-list = $(__ndk_top_modules) 618d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner 619d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner# ----------------------------------------------------------------------------- 620d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Function : module-add 62148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name 62248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 623d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Usage : $(call module-add,<modulename>) 62448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: add a new module. If it is already defined, print an error message 6258700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# and abort. This will record all LOCAL_XXX variables for the module. 62648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 627419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add = \ 628d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(call assert-defined,LOCAL_MAKEFILE LOCAL_BUILT_MODULE LOCAL_OBJS_DIR LOCAL_MODULE_CLASS)\ 62948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(if $(call set_is_member,$(__ndk_modules),$1),\ 630d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(call __ndk_info,Trying to define local module '$1' in $(LOCAL_MAKEFILE).)\ 631d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(call __ndk_info,But this module was already defined by $(__ndk_modules.$1.MAKEFILE).)\ 632d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(call __ndk_error,Aborting.)\ 63348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner )\ 63448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(eval __ndk_modules := $(call set_insert,$(__ndk_modules),$1))\ 635d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner $(if $(strip $(__ndk_import_depth)),,\ 636d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner $(eval __ndk_top_modules := $(call set_insert,$(__ndk_top_modules),$1))\ 637d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner )\ 638d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(if $(call module-class-is-installable,$(LOCAL_MODULE_CLASS)),\ 639d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval LOCAL_INSTALLED := $(NDK_APP_DST_DIR)/$(notdir $(LOCAL_BUILT_MODULE)))\ 640d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner )\ 6418700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(foreach __local,$(modules-LOCALS),\ 6428700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(eval __ndk_modules.$1.$(__local) := $(LOCAL_$(__local)))\ 643c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )\ 644c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(call module-handle-c++-features,$1) 6458700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 6468700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 647d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Retrieve the class of module $1 648d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-get-class = $(__ndk_modules.$1.MODULE_CLASS) 649e7943289cc2df73a99668615639c97ffe6240fceDavid 'Digit' Turner 650419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Retrieve built location of module $1 6518700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-get-built = $(__ndk_modules.$1.BUILT_MODULE) 652419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 653d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) is module $1 is installable 654d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# An installable module is one that will be copied to $PROJECT/libs/<abi>/ 655d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# (e.g. shared libraries). 656d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 6577a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-is-installable = $(call module-class-is-installable,$(call module-get-class,$1)) 6587a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 6597a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns $(true) if module $1 is prebuilt 6607a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# A prebuilt module is one declared with BUILD_PREBUILT_SHARED_LIBRARY or 6617a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# BUILD_PREBUILT_STATIC_LIBRARY 6627a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 6637a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-is-prebuilt = $(call module-class-is-prebuilt,$(call module-get-class,$1)) 6648700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 6658700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# ----------------------------------------------------------------------------- 666a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Function : module-get-export 667a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Arguments: 1: module name 668a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# 2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS') 669a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Returns : Exported value 670a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Usage : $(call module-get-export,<modulename>,<varname>) 671a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for module $1 672a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# ----------------------------------------------------------------------------- 673a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-get-export = $(__ndk_modules.$1.EXPORT_$2) 674a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner 675a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# ----------------------------------------------------------------------------- 676a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Function : module-get-listed-export 677a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Arguments: 1: list of module names 678a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# 2: export variable name without LOCAL_EXPORT_ prefix (e.g. 'CFLAGS') 679a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Returns : Exported values 680a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Usage : $(call module-get-listed-export,<module-list>,<varname>) 681a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# Rationale: Return the recorded value of LOCAL_EXPORT_$2, if any, for modules 682a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# listed in $1. 683a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# ----------------------------------------------------------------------------- 684a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-get-listed-export = $(strip \ 685a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner $(foreach __listed_module,$1,\ 686a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner $(call module-get-export,$(__listed_module),$2)\ 687a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner )) 688a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner 689a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner# ----------------------------------------------------------------------------- 6908700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Function : modules-restore-locals 6918700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Arguments: 1: module name 6928700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Returns : None 6938700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Usage : $(call module-restore-locals,<modulename>) 6948700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Rationale: Restore the recorded LOCAL_XXX definitions for a given module. 6958700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# ----------------------------------------------------------------------------- 6968700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-restore-locals = \ 6978700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(foreach __local,$(modules-LOCALS),\ 6988700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(eval LOCAL_$(__local) := $(__ndk_modules.$1.$(__local)))\ 6998700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner ) 700419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 701419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Dump all module information. Only use this for debugging 702419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-dump-database = \ 703419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(info Modules: $(__ndk_modules)) \ 704419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(foreach __mod,$(__ndk_modules),\ 705bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(info $(space4)$(__mod):)\ 706419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(foreach __field,$(modules-fields),\ 707bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(eval __fieldval := $(strip $(__ndk_modules.$(__mod).$(__field))))\ 708bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(if $(__fieldval),\ 709bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(if $(filter 1,$(words $(__fieldval))),\ 710bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(info $(space4)$(space4)$(__field): $(__fieldval)),\ 711bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(info $(space4)$(space4)$(__field): )\ 712bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(foreach __fielditem,$(__fieldval),\ 713bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner $(info $(space4)$(space4)$(space4)$(__fielditem))\ 714bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner )\ 715bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner )\ 716bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner )\ 717419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner )\ 718419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner )\ 719d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(info --- end of modules list) 720419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 721419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 722419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 723419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : module-add-static-depends 724419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: module name 725419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 2: list/set of static library modules this module depends on. 726419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns : None 727419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage : $(call module-add-static-depends,<modulename>,<list of module names>) 728419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: Record that a module depends on a set of static libraries. 729419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Use module-get-static-dependencies to retrieve final list. 730419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 731419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add-static-depends = \ 732a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner $(call module-add-depends-any,$1,$2,depends) \ 733419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 734419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 735419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : module-add-shared-depends 736419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: module name 737419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 2: list/set of shared library modules this module depends on. 738419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns : None 739419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage : $(call module-add-shared-depends,<modulename>,<list of module names>) 740419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: Record that a module depends on a set of shared libraries. 741419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Use modulge-get-shared-dependencies to retrieve final list. 742419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 743419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodule-add-shared-depends = \ 744a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turner $(call module-add-depends-any,$1,$2,depends) \ 745419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 746419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Used internally by module-add-static-depends and module-add-shared-depends 747419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# NOTE: this function must not modify the existing dependency order when new depends are added. 748419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 749a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnermodule-add-depends-any = \ 750419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __ndk_modules.$1.$3 += $(filter-out $(__ndk_modules.$1.$3),$(call strip-lib-prefix,$2))) 751419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 7528700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Used to recompute all dependencies once all module information has been recorded. 7538700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# 7548700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodules-compute-dependencies = \ 7558700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(foreach __module,$(__ndk_modules),\ 7568700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner $(call module-compute-depends,$(__module))\ 7578700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner ) 758419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 7598700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-compute-depends = \ 7605b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(call module-add-static-depends,$1,$(__ndk_modules.$1.STATIC_LIBRARIES))\ 761b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner $(call module-add-static-depends,$1,$(__ndk_modules.$1.WHOLE_STATIC_LIBRARIES))\ 7624013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner $(call module-add-shared-depends,$1,$(__ndk_modules.$1.SHARED_LIBRARIES))\ 7638700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner 7648700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnermodule-get-installed = $(__ndk_modules.$1.INSTALLED) 765419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 766419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 767419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Function : modules-get-all-dependencies 768419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Arguments: 1: list of module names 769419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Returns : List of all the modules $1 depends on transitively. 770419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Usage : $(call modules-all-get-dependencies,<list of module names>) 771419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Rationale: This computes the closure of all module dependencies starting from $1 772419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ----------------------------------------------------------------------------- 7735edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turnermodule-get-all-dependencies = $(strip \ 7745edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner $(call modules-get-closure,$1,depends)) 775419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 776419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-get-closure = \ 7775edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner $(eval __closure_deps := $(strip $(call strip-lib-prefix,$1))) \ 778419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_wq := $(__closure_deps)) \ 779419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_field := $(strip $2)) \ 780419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(call modules-closure)\ 781419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(__closure_deps) 782419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 783bb16bc7001669b23fa74f678d8ddff71e062967eDavid 'Digit' Turner# Used internally by modules-get-all-dependencies 784419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Note the tricky use of conditional recursion to work around the fact that 785419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# the GNU Make language does not have any conditional looping construct 786419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# like 'while'. 787419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 788419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turnermodules-closure = \ 789419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_mod := $(call first,$(__closure_wq))) \ 790419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_wq := $(call rest,$(__closure_wq))) \ 7915edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner $(eval __closure_val := $(call strip-lib-prefix,$(__ndk_modules.$(__closure_mod).$(__closure_field)))) \ 7925edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner $(eval __closure_new := $(filter-out $(__closure_deps),$(__closure_val)))\ 793419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_deps += $(__closure_new)) \ 794419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval __closure_wq := $(strip $(__closure_wq) $(__closure_new)))\ 795419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(if $(__closure_wq),$(call modules-closure)) \ 796419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 7975edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# ----------------------------------------------------------------------------- 7981208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Function : module-get-depends 7991208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Arguments: 1: list of module names 8001208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# 2: local module type (e.g. SHARED_LIBRARIES) 8011208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Returns : List all the <local-type> modules $1 depends on transitively. 8021208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Usage : $(call module-get-depends,<list of module names>,<local-type>) 8031208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Rationale: This computes the closure of all local module dependencies starting from $1 8041208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# ----------------------------------------------------------------------------- 8051208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turnermodule-get-depends = $(strip $(call modules-get-closure,$1,$2)) 8061208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner 8071208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner 8081208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# ----------------------------------------------------------------------------- 8095edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# Function : modules-get-all-installable 8105edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# Arguments: 1: list of module names 8115edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# Returns : List of all the installable modules $1 depends on transitively. 8125edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# Usage : $(call modules-all-get-installable,<list of module names>) 8135edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# Rationale: This computes the closure of all installable module dependencies starting from $1 8145edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# ----------------------------------------------------------------------------- 8155edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner# For now, only the closure of LOCAL_SHARED_LIBRARIES is enough 8161322b9f426ef6aca8b6ce569411cdd3443c1caf4David 'Digit' Turnermodules-get-all-installable = $(strip \ 8171322b9f426ef6aca8b6ce569411cdd3443c1caf4David 'Digit' Turner $(foreach __alldep,$(call module-get-depends,$1,depends),\ 8181322b9f426ef6aca8b6ce569411cdd3443c1caf4David 'Digit' Turner $(if $(call module-is-installable,$(__alldep)),$(__alldep))\ 8191322b9f426ef6aca8b6ce569411cdd3443c1caf4David 'Digit' Turner )) 8205edfe75d8ad0f19be9d05908822ed47628ba80baDavid 'Digit' Turner 8215b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Return the C++ extension of a given module 8221208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# $1: module name 8234013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turnermodule-get-cpp-extension = $(strip \ 8245b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(if $(__ndk_modules.$1.CPP_EXTENSION),\ 8255b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(__ndk_modules.$1.CPP_EXTENSION),\ 8265b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner .cpp\ 8274013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner )) 8285b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner 8295b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Return the list of C++ sources of a given module 8305b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# 8315b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodule-get-c++-sources = \ 8325e39db8dc7dfbb05fa4c089a9fb87e8ffc0edfa8Andrew Hsieh $(eval __files := $(__ndk_modules.$1.SRC_FILES:%.neon=%)) \ 8335e39db8dc7dfbb05fa4c089a9fb87e8ffc0edfa8Andrew Hsieh $(eval __files := $(__files:%.arm=%)) \ 8345e39db8dc7dfbb05fa4c089a9fb87e8ffc0edfa8Andrew Hsieh $(filter %$(call module-get-cpp-extension,$1),$(__files)) 8355b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner 8365b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Returns true if a module has C++ sources 8375b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# 838c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-has-c++-sources = $(strip $(call module-get-c++-sources,$1)) 839c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 8405b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner 8415b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Add C++ dependencies to any module that has C++ sources. 8425b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $1: list of C++ runtime static libraries (if any) 8435b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $2: list of C++ runtime shared libraries (if any) 8445b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# 8455b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodules-add-c++-dependencies = \ 8465b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(foreach __module,$(__ndk_modules),\ 847c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(call module-has-c++-sources,$(__module)),\ 8484013467963a9051585d23d6a0b157685605d2aa6David 'Digit' Turner $(call ndk_log,Module '$(__module)' has C++ sources)\ 8495b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(call module-add-c++-deps,$(__module),$1,$2),\ 8505b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner )\ 8515b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner ) 8525b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner 853c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 854c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Return the compiler flags used to compile a C++ module 855c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Order matters and should match the one used by the build command 856c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-get-c++-flags = $(strip \ 857c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(__ndk_modules.$1.CFLAGS) \ 858c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(__ndk_modules.$1.CPPFLAGS) \ 859c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(__ndk_modules.$1.CXXFLAGS)) 860c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 861c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# This function is used to remove certain flags from a module compiler flags 862c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# $1: Module name 863c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# $2: List of flags to remove 864c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 865c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-filter-out-compiler-flags = \ 866c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __ndk_modules.$1.CFLAGS := $(filter-out $2,$(__ndk_modules.$1.CFLAGS)))\ 867c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __ndk_modules.$1.CPPFLAGS := $(filter-out $2,$(__ndk_modules.$1.CPPFLAGS)))\ 868c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __ndk_modules.$1.CXXFLAGS := $(filter-out $2,$(__ndk_modules.$1.CXXFLAGS))) 869c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 870c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Return true if a module's compiler flags enable rtti 871c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# We just look at -frtti and -fno-rtti on the command-line 872c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# and keep the last one of these flags. 873c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-flags-have-rtti = $(strip \ 874c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(filter -frtti,\ 875c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(lastword $(filter -frtti -fno-rtti,$(call module-get-c++-flags,$1)))\ 876c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )\ 877c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner ) 878c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 879c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Same with C++ exception support (i.e. -fexceptions and -fno-exceptions) 880c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 881c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-flags-have-exceptions = $(strip \ 882c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(filter -fexceptions,\ 883c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(lastword $(filter -fexceptions -fno-execeptions,$(call module-get-c++-flags,$1)))\ 884c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )\ 885c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner ) 886c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 887c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Handle the definition of LOCAL_CPP_FEATURES, i.e.: 888c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 889c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# - If it is defined, check that it only contains valid values 890c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# - If it is undefined, try to compute its value automatically by 891c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# looking at the C++ compiler flags used to build the module 892c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 893c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# After this, we remove all features flags from the module's command-line 894c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# And add only the correct ones back in LOCAL_CPP_FLAGS 895c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 896c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-handle-c++-features = \ 897c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(strip $(__ndk_modules.$1.CPP_FEATURES)),\ 898c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __cxxbad := $(filter-out rtti exceptions,$(__ndk_modules.$1.CPP_FEATURES)))\ 899c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(__cxxbad),\ 900c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(call __ndk_info,WARNING: Ignoring invalid values in LOCAL_CPP_FEATURES definition in $(__ndk_modules.$1.MAKEFILE): $(__cxxbad))\ 901c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __ndk_modules.$1.CPP_FEATURES := $(strip $(filter-out $(__cxxbad),$(__ndk_modules.$1.CPP_FEATURES))))\ 902c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )\ 903c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner ,\ 904c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __ndk_modules.$1.CPP_FEATURES := $(strip \ 905c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(call module-flags-have-rtti,$1),rtti) \ 906c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(call module-flags-have-exceptions,$1),exceptions) \ 907c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )) \ 908c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner )\ 909c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(call module-filter-out-compiler-flags,$1,-frtti -fno-rtti -fexceptions -fno-exceptions)\ 910c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 911c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# Returns true if a module or its dependencies have specific C++ features 912c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# (i.e. RTTI or Exceptions) 913c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 914c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# $1: module name 915c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# $2: list of features (e.g. 'rtti' or 'exceptions') 916c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# 917c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnermodule-has-c++-features = $(strip \ 918c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __cxxdeps := $(call module-get-all-dependencies,$1))\ 919c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(eval __cxxflags := $(foreach __cxxdep,$(__cxxdeps),$(__ndk_modules.$(__cxxdep).CPP_FEATURES)))\ 920c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner $(if $(filter $2,$(__cxxflags)),true,)\ 921c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner ) 922c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner 9235b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# Add standard C++ dependencies to a given module 9245b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# 9255b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $1: module name 9265b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $2: list of C++ runtime static libraries (if any) 9275b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# $3: list of C++ runtime shared libraries (if any) 9285b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner# 9295b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turnermodule-add-c++-deps = \ 9305b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(eval __ndk_modules.$1.STATIC_LIBRARIES += $(2))\ 9315b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner $(eval __ndk_modules.$1.SHARED_LIBRARIES += $(3)) 9325b690c13f5d908a403e2d09cfa7ac50c8767a897David 'Digit' Turner 933419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner 934419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ============================================================================= 935419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 936419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# Utility functions 937419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# 938419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner# ============================================================================= 93948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 94048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 941a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Function : parent-dir 942a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Arguments: 1: path 943a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# Returns : Parent dir or path of $1, with final separator removed. 944a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# ----------------------------------------------------------------------------- 945a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnerparent-dir = $(patsubst %/,%,$(dir $1)) 946a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner 9477a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 9487a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# ----------------------------------------------------------------------------- 9497a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Function : pretty-dir 9507a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Arguments: 1: path 9517a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns : Remove NDK_PROJECT_PATH prefix from a given path. This can be 9527a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# used to perform pretty-printing for logs. 9537a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# ----------------------------------------------------------------------------- 95425fc114e97e8e31af9c8a47f80ca4fbd134bf912David 'Digit' Turnerpretty-dir = $(patsubst $(NDK_ROOT)/%,<NDK>/%,\ 95525fc114e97e8e31af9c8a47f80ca4fbd134bf912David 'Digit' Turner $(patsubst $(NDK_PROJECT_PATH)/%,%,$1)) 9567a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 957a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner# ----------------------------------------------------------------------------- 95848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-define 95948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name of variable that must be defined by the user 96048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 2: name of Makefile where the variable should be defined 96148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 3: name/description of the Makefile where the check is done, which 96248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# must be included by $2 96348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 96448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 96548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-user-define = $(if $(strip $($1)),,\ 96648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_error,Missing $1 before including $3 in $2)) 96748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 96848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 96948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to check that LOCAL_MODULE is properly defined by an Android.mk 97048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# file before including one of the $(BUILD_SHARED_LIBRARY), etc... files. 97148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 97248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE 97348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name/description of the included build Makefile where the 97448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# check is done 97548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 97648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call check-user-LOCAL_MODULE, BUILD_SHARED_LIBRARY) 97748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 97848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-defined-LOCAL_MODULE = \ 97948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call check-user-define,LOCAL_MODULE,$(local-makefile),$(1)) \ 98048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(if $(call seq,$(words $(LOCAL_MODULE)),1),,\ 98148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_info,LOCAL_MODULE definition in $(local-makefile) must not contain space)\ 98248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner $(call __ndk_error,Please correct error. Aborting)\ 98348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner ) 98448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 98548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 986bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# This is used to check that LOCAL_MODULE_FILENAME, if defined, is correct. 987bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# 988bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function : check-user-LOCAL_MODULE_FILENAME 989bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns : None 990bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage : $(call check-user-LOCAL_MODULE_FILENAME) 991bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 992bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnercheck-LOCAL_MODULE_FILENAME = \ 993bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(if $(strip $(LOCAL_MODULE_FILENAME)),\ 994bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(if $(call seq,$(words $(LOCAL_MODULE_FILENAME)),1),,\ 995bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain spaces)\ 996bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(call __ndk_error,Plase correct error. Aborting)\ 997bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner )\ 998bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(if $(filter %.a %.so,$(LOCAL_MODULE_FILENAME)),\ 999bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(call __ndk_info,$(LOCAL_MAKEFILE):$(LOCAL_MODULE): LOCAL_MODULE_FILENAME should not include file extensions)\ 1000bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner )\ 1001bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner ) 1002bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner 1003bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 1004bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function : handle-module-filename 1005bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Arguments : 1: default file prefix 1006bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# 2: file suffix 1007bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns : None 1008bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage : $(call handle-module-filename,<prefix>,<suffix>) 1009bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Rationale : To be used to check and or set the module's filename through 1010bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# the LOCAL_MODULE_FILENAME variable. 1011bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 1012bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerhandle-module-filename = $(eval $(call ev-handle-module-filename,$1,$2)) 1013bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner 10147a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10157a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check that LOCAL_MODULE_FILENAME is properly defined 10167a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - with one single item 10177a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - without a library file extension 10187a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# - with no directory separators 10197a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10207a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerdefine ev-check-module-filename 10217a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (1,$$(words $$(LOCAL_MODULE_FILENAME))) 10227a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain any space) 10237a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_error,Aborting) 10247a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif 10257a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (,$$(filter %.a %.so,$$(LOCAL_MODULE_FILENAME))) 10267a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain a file extension) 10277a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_error,Aborting) 10287a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif 10297a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifneq (1,$$(words $$(subst /, ,$$(LOCAL_MODULE_FILENAME)))) 10307a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_info,$$(LOCAL_MAKEFILE):$$(LOCAL_MODULE): LOCAL_MODULE_FILENAME must not contain directory separators) 10317a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $$(call __ndk_error,Aborting) 10327a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif 10337a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendef 1034bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner 10357a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10367a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check the definition of LOCAL_MODULE_FILENAME. If none exists, 10377a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# infer it from the LOCAL_MODULE name. 10387a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 1039bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# $1: default file prefix 1040bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# $2: default file suffix 10417a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 1042bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerdefine ev-handle-module-filename 1043bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME)) 10447a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifndef LOCAL_MODULE_FILENAME 10457a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner LOCAL_MODULE_FILENAME := $1$$(LOCAL_MODULE) 1046bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerendif 10477a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$$(eval $$(call ev-check-module-filename)) 1048bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$2 1049bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerendef 1050bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner 10517a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerhandle-prebuilt-module-filename = $(eval $(call ev-handle-prebuilt-module-filename,$1)) 10527a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 10537a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10547a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Check the definition of LOCAL_MODULE_FILENAME for a _prebuilt_ module. 10557a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# If none exists, infer it from $(LOCAL_SRC_FILES) 10567a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10577a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# $1: default file suffix 10587a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 10597a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerdefine ev-handle-prebuilt-module-filename 10607a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(strip $$(LOCAL_MODULE_FILENAME)) 10617a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifndef LOCAL_MODULE_FILENAME 10627a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner LOCAL_MODULE_FILENAME := $$(notdir $(LOCAL_SRC_FILES)) 10637a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%.a=%) 10647a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner LOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME:%.so=%) 10657a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif 10667a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' TurnerLOCAL_MODULE_FILENAME := $$(LOCAL_MODULE_FILENAME)$1 10677a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$$(eval $$(call ev-check-module-filename)) 10687a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendef 10697a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 10707a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 1071bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 1072bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Function : handle-module-built 1073bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Returns : None 1074bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Usage : $(call handle-module-built) 1075bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# Rationale : To be used to automatically compute the location of the generated 1076bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# binary file, and the directory where to place its object files. 1077bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 1078bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnerhandle-module-built = \ 1079bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(eval LOCAL_BUILT_MODULE := $(TARGET_OUT)/$(LOCAL_MODULE_FILENAME))\ 1080bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner $(eval LOCAL_OBJS_DIR := $(TARGET_OBJS)/$(LOCAL_MODULE)) 1081bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner 1082bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turner# ----------------------------------------------------------------------------- 108348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Strip any 'lib' prefix in front of a given string. 108448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 108548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : strip-lib-prefix 108648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name 108748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : module name, without any 'lib' prefix if any 108848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call strip-lib-prefix,$(LOCAL_MODULE)) 108948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 109048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerstrip-lib-prefix = $(1:lib%=%) 109148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 109248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 109348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to strip any lib prefix from LOCAL_MODULE, then check that 109448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the corresponding module name is not already defined. 109548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 109648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE 109748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: path of Android.mk where this LOCAL_MODULE is defined 109848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 109948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE)) 110048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 110148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-LOCAL_MODULE = \ 1102419390feceb0c39fd3cad8ec6e5253fb74c946a5David 'Digit' Turner $(eval LOCAL_MODULE := $$(call strip-lib-prefix,$$(LOCAL_MODULE))) 110348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 110448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 110548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro : my-dir 110648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : the directory of the current Makefile 110748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(my-dir) 110848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 1109a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turnermy-dir = $(call parent-dir,$(lastword $(MAKEFILE_LIST))) 111048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 111148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 111248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : all-makefiles-under 111348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: directory path 111448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : a list of all makefiles immediately below some directory 111548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call all-makefiles-under, <some path>) 111648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 111748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-makefiles-under = $(wildcard $1/*/Android.mk) 111848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 111948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 112048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro : all-subdir-makefiles 112148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : list of all makefiles in subdirectories of the current Makefile's 112248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# location 112348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(all-subdir-makefiles) 112448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 112548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-subdir-makefiles = $(call all-makefiles-under,$(call my-dir)) 112648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 11275bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ============================================================================= 11285bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11295bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Source file tagging support. 11305bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11315bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Each source file listed in LOCAL_SRC_FILES can have any number of 11325bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 'tags' associated to it. A tag name must not contain space, and its 11335bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# usage can vary. 11345bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11355bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# For example, the 'debug' tag is used to sources that must be built 11365bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# in debug mode, the 'arm' tag is used for sources that must be built 11375bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# using the 32-bit instruction set on ARM platforms, and 'neon' is used 11385bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# for sources that must be built with ARM Advanced SIMD (a.k.a. NEON) 11395bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# support. 11405bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11415bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# More tags might be introduced in the future. 11425bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11435bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_TAGS contains the list of all tags used (initially empty) 11445bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_FILES contains the list of all source files. 11455bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_TAG.<tagname> contains the set of source file names tagged 11465bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# with <tagname> 11475bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_FILES_TAGS.<filename> contains the set of tags for a given 11485bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# source file name 11495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Tags are processed by a toolchain-specific function (e.g. TARGET-compute-cflags) 11515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# which will call various functions to compute source-file specific settings. 11525bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# These are currently stored as: 11535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11545bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_FILES_TARGET_CFLAGS.<filename> contains the list of 11555bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# target-specific C compiler flags used to compile a given 11565bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# source file. This is set by the function TARGET-set-cflags 11575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# defined in the toolchain's setup.mk script. 11585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# LOCAL_SRC_FILES_TEXT.<filename> contains the 'text' that will be 11605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# displayed along the label of the build output line. For example 11615bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 'thumb' or 'arm ' with ARM-based toolchains. 11625bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 11635bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ============================================================================= 11645bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 11655bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 11665bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : clear-all-src-tags 11675bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Returns : remove all source file tags and associated data. 11685bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(clear-all-src-tags) 11695bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 11705bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerclear-all-src-tags = \ 11715bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __tag,$(LOCAL_SRC_TAGS), \ 11725bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner $(eval LOCAL_SRC_TAG.$(__tag) := $(empty)) \ 11735bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner) \ 11745bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES), \ 11755bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner $(eval LOCAL_SRC_FILES_TAGS.$(__src) := $(empty)) \ 11765bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner $(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) := $(empty)) \ 11775bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner $(eval LOCAL_SRC_FILES_TEXT.$(__src) := $(empty)) \ 11785bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner) \ 11795bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAGS := $(empty_set)) 11805bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 11815bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 11825bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : tag-src-files 11835bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files to tag 11845bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 2: tag name (must not contain space) 11855bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call tag-src-files,<list-of-source-files>,<tagname>) 11865bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Add a tag to a list of source files 11875bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 11885bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnertag-src-files = \ 11895bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAGS := $(call set_insert,$2,$(LOCAL_SRC_TAGS))) \ 11905bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(eval LOCAL_SRC_TAG.$2 := $(call set_union,$1,$(LOCAL_SRC_TAG.$2))) \ 11915bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$1, \ 11925bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner $(eval LOCAL_SRC_FILES_TAGS.$(__src) += $2) \ 11935bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner) 11945bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 11955bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 11965bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : get-src-files-with-tag 11975bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: tag name 11985bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call get-src-files-with-tag,<tagname>) 11995bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Return : The list of source file names that have been tagged with <tagname> 12005bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12015bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-files-with-tag = $(LOCAL_SRC_TAG.$1) 12025bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12035bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12045bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : get-src-files-without-tag 12055bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: tag name 12065bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call get-src-files-without-tag,<tagname>) 12075bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Return : The list of source file names that have NOT been tagged with <tagname> 12085bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12095bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-files-without-tag = $(filter-out $(LOCAL_SRC_TAG.$1),$(LOCAL_SRC_FILES)) 12105bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12115bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12125bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : set-src-files-target-cflags 12135bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files 12145bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 2: list of compiler flags 12155bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call set-src-files-target-cflags,<sources>,<flags>) 12165bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Set or replace the set of compiler flags that will be applied 12175bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# when building a given set of source files. This function should 12185bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# normally be called from the toolchain-specific function that 12195bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# computes all compiler flags for all source files. 12205bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12215bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerset-src-files-target-cflags = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) := $2)) 12225bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12235bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12245bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : add-src-files-target-cflags 12255bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files 12265bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 2: list of compiler flags 12275bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call add-src-files-target-cflags,<sources>,<flags>) 12285bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: A variant of set-src-files-target-cflags that can be used 12295bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# to append, instead of replace, compiler flags for specific 12305bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# source files. 12315bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12325bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turneradd-src-files-target-cflags = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) += $2)) 12335bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12345bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12355bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : get-src-file-target-cflags 12365bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: single source file name 12375bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call get-src-file-target-cflags,<source>) 12385bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Return the set of target-specific compiler flags that must be 12395bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# applied to a given source file. These must be set prior to this 12405bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# call using set-src-files-target-cflags or add-src-files-target-cflags 12415bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12425bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-file-target-cflags = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$1) 12435bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12445bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12455bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : set-src-files-text 12465bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: list of source files 12475bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# 2: text 12485bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call set-src-files-text,<sources>,<text>) 12495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Set or replace the 'text' associated to a set of source files. 12505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# The text is a very short string that complements the build 12515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# label. For example, it will be either 'thumb' or 'arm ' for 12525bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ARM-based toolchains. This function must be called by the 12535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# toolchain-specific functions that processes all source files. 12545bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12555bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerset-src-files-text = $(foreach __src,$1,$(eval LOCAL_SRC_FILES_TEXT.$(__src) := $2)) 12565bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Macro : get-src-file-text 12595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Arguments: 1: single source file 12605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Usage : $(call get-src-file-text,<source>) 12615bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Rationale: Return the 'text' associated to a given source file when 12625bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# set-src-files-text was called. 12635bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# ----------------------------------------------------------------------------- 12645bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerget-src-file-text = $(LOCAL_SRC_FILES_TEXT.$1) 12655bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 12665bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# This should only be called for debugging the source files tagging system 12675bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerdump-src-file-tags = \ 12685bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info LOCAL_SRC_TAGS := $(LOCAL_SRC_TAGS)) \ 12695bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES)) \ 12705bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __tag,$(LOCAL_SRC_TAGS),$(info LOCAL_SRC_TAG.$(__tag) = $(LOCAL_SRC_TAG.$(__tag)))) \ 12715bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TAGS.$(__src) = $(LOCAL_SRC_FILES_TAGS.$(__src)))) \ 12725bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info WITH arm = $(call get-src-files-with-tag,arm)) \ 12735bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(info WITHOUT arm = $(call get-src-files-without-tag,arm)) \ 12745bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src) = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$(__src)))) \ 12755bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(foreach __src,$(LOCAL_SRC_FILES),$(info LOCAL_SRC_FILES_TEXT.$(__src) = $(LOCAL_SRC_FILES_TEXT.$(__src)))) \ 12765bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner 127748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 127848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 127948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 128048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Application.mk support 128148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 128248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 128348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 128448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *must* be defined in Application.mk files 1285a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerNDK_APP_VARS_REQUIRED := 128648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 128748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *may* be defined in Application.mk files 12885815d77ccd68a5f6f8f7d6f4fa5dfbd05828d33fDavid 'Digit' TurnerNDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CXXFLAGS \ 1289a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner APP_PLATFORM APP_BUILD_SCRIPT APP_ABI APP_MODULES \ 1290616aae78295c7618af87d0b3f53335c358945460David 'Digit' Turner APP_PROJECT_PATH APP_STL APP_SHORT_COMMANDS 129148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 129248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of all variables that may appear in an Application.mk file 1293dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner# or defined by the build scripts. 1294dfc478bcac20693422ee56a423377403bba46932David 'Digit' TurnerNDK_APP_VARS := $(NDK_APP_VARS_REQUIRED) \ 1295dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner $(NDK_APP_VARS_OPTIONAL) \ 1296fd204377de03a20556b38acf0dc2bdb195729343David 'Digit' Turner APP_DEBUG \ 1297dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner APP_DEBUGGABLE \ 1298dfc478bcac20693422ee56a423377403bba46932David 'Digit' Turner APP_MANIFEST 129948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 130048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 130148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 130248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Android.mk support 130348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 130448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 130548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 130648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 130748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 130848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Build commands support 130948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 131048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ============================================================================= 131148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 1312c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerget-object-name = $(strip \ 1313c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner $(subst ../,__/,\ 1314c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner $(eval __obj := $1)\ 1315c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner $(foreach __ext,.c .s .S $(LOCAL_CPP_EXTENSION),\ 1316c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner $(eval __obj := $(__obj:%$(__ext)=%.o))\ 1317c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner )\ 1318c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner $(__obj)\ 1319c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner )) 1320c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner 132148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 132248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro : hide 132348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : nothing 132448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(hide)<make commands> 132548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: To be used as a prefix for Make build commands to hide them 132648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# by default during the build. To show them, set V=1 in your 132748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# environment or command-line. 132848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 132948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# For example: 133048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 133148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# foo.o: foo.c 133248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -->|$(hide) <build-commands> 133348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 133448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Where '-->|' stands for a single tab character. 133548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 133648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 133748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifeq ($(V),1) 133848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = $(empty) 133948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse 134048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = @ 134148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif 134248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 134328246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# cmd-convert-deps 13441579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# 13458d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# On Cygwin, we need to convert the .d dependency file generated by 134662e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# the gcc toolchain by transforming any Windows paths inside it into 13478d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# Cygwin paths that GNU Make can understand (i.e. C:/Foo => /cygdrive/c/Foo) 134828246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# 13498d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# To do that, we will force the compiler to write the dependency file to 135062e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# <foo>.d.org, which will will later convert through a clever sed script 135162e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# that is auto-generated by our build system. 135228246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner# 135362e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# The script is invoked with: 13548d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# 135562e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# $(NDK_DEPENDENCIES_CONVERTER) foo.d 135662e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# 135762e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# It will look if foo.d.org exists, and if so, process it 135862e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner# to generate foo.d, then remove the original foo.d.org. 13598d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# 13608d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# On other systems, we simply tell the compiler to write to the .d file directly. 13611579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner# 13627dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner# NOTE: In certain cases, no dependency file will be generated by the 13637dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner# compiler (e.g. when compiling an assembly file as foo.s) 13647dab8adb7172b44f92315312d54f6bbfa13b59b7David 'Digit' Turner# 13658d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# convert-deps is used to compute the name of the compiler-generated dependency file 13668d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# cmd-convert-deps is a command used to convert it to a Cygwin-specific path 13678d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turner# 1368462c63197acacd294d9835dd5afb6913058ea57aDavid 'Digit' Turnerifeq ($(HOST_OS),cygwin) 13698d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turnerconvert-deps = $1.org 137062e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turnercmd-convert-deps = && $(NDK_DEPENDENCIES_CONVERTER) $1 137128246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turnerelse 13728d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turnerconvert-deps = $1 13738d06600aad07ddf7b6f80c0242269e0e44b3d99aDavid 'Digit' Turnercmd-convert-deps = 13741579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turnerendif 13751579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner 13767daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# This assumes that many variables have been pre-defined: 13777daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _SRC: source file 13787daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _OBJ: destination file 13797daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _CC: 'compiler' command 13807daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _FLAGS: 'compiler' flags 13817daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# _TEXT: Display text (e.g. "Compile++ thumb", must be EXACTLY 15 chars long) 13827daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# 13837daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerdefine ev-build-file 13847daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_SRC := $$(_SRC) 13857daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_OBJ := $$(_OBJ) 13861579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner$$(_OBJ): PRIVATE_DEPS := $$(call host-path,$$(_OBJ).d) 13877daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) 13887daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_TEXT := "$$(_TEXT)" 13897daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_CC := $$(_CC) 13907daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(_OBJ): PRIVATE_CFLAGS := $$(_FLAGS) 13917a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 13927a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerifeq ($$(LOCAL_SHORT_COMMANDS),true) 13937a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner_OPTIONS_LISTFILE := $$(_OBJ).cflags 13947a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$$(_OBJ): $$(call generate-list-file,$$(_FLAGS),$$(_OPTIONS_LISTFILE)) 13957a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$$(_OBJ): PRIVATE_CFLAGS := @$$(call host-path,$$(_OPTIONS_LISTFILE)) 13967a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$$(_OBJ): $$(_OPTIONS_LISTFILE) 13977a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif 13987a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner 1399544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$$(call generate-file-dir,$$(_OBJ)) 1400544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner 140162e94189bb3a26ea1f31e8e0cf921d9cb9b5c91eDavid 'Digit' Turner$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK) $$(NDK_DEPENDENCIES_CONVERTER) 1402ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner @$$(HOST_ECHO) "$$(PRIVATE_TEXT) : $$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))" 1403ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner $$(hide) $$(PRIVATE_CC) -MMD -MP -MF $$(call convert-deps,$$(PRIVATE_DEPS)) $$(PRIVATE_CFLAGS) $$(call host-path,$$(PRIVATE_SRC)) -o $$(call host-path,$$(PRIVATE_OBJ)) \ 140428246be1383b51ebb84596f465e2e25fbac46f5dDavid 'Digit' Turner $$(call cmd-convert-deps,$$(PRIVATE_DEPS)) 14057daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendef 14067daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14077daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# This assumes the same things than ev-build-file, but will handle 14087daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner# the definition of LOCAL_FILTER_ASM as well. 14097daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerdefine ev-build-source-file 14107daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS += $$(dir $$(_OBJ)) 14117daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerifndef LOCAL_FILTER_ASM 14127daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # Trivial case: Directly generate an object file 14137daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(eval $$(call ev-build-file)) 14147daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerelse 14157daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # This is where things get hairy, we first transform 14167daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # the source into an assembler file, send it to the 14177daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # filter, then generate a final object file from it. 14187daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14197daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14207daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # First, remember the original settings and compute 14217daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # the location of our temporary files. 14227daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14237daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _ORG_SRC := $$(_SRC) 14247daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _ORG_OBJ := $$(_OBJ) 14257daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _ORG_FLAGS := $$(_FLAGS) 14267daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _ORG_TEXT := $$(_TEXT) 14277daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14287daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _OBJ_ASM_ORIGINAL := $$(patsubst %.o,%.s,$$(_ORG_OBJ)) 14297daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _OBJ_ASM_FILTERED := $$(patsubst %.o,%.filtered.s,$$(_ORG_OBJ)) 14307daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14317daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # If the source file is a plain assembler file, we're going to 14327daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # use it directly in our filter. 14337daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner ifneq (,$$(filter %.s,$$(_SRC))) 14347daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _OBJ_ASM_ORIGINAL := $$(_SRC) 14357daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner endif 14367daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14371579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner #$$(info SRC=$$(_SRC) OBJ=$$(_OBJ) OBJ_ORIGINAL=$$(_OBJ_ASM_ORIGINAL) OBJ_FILTERED=$$(_OBJ_ASM_FILTERED)) 14387daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14397daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # We need to transform the source into an assembly file, instead of 14407daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # an object. The proper way to do that depends on the file extension. 14417daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14427daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # For C and C++ source files, simply replace the -c by an -S in the 14437daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # compilation command (this forces the compiler to generate an 14447daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # assembly file). 14457daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14467daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # For assembler templates (which end in .S), replace the -c with -E 14477daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # to send it to the preprocessor instead. 14487daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14497daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # Don't do anything for plain assembly files (which end in .s) 14507daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # 14517daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner ifeq (,$$(filter %.s,$$(_SRC))) 14527daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _OBJ := $$(_OBJ_ASM_ORIGINAL) 14537daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner ifneq (,$$(filter %.S,$$(_SRC))) 14547daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _FLAGS := $$(patsubst -c,-E,$$(_ORG_FLAGS)) 14557daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner else 14567daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _FLAGS := $$(patsubst -c,-S,$$(_ORG_FLAGS)) 14577daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner endif 14587daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(eval $$(call ev-build-file)) 14597daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner endif 14607daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14617daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # Next, process the assembly file with the filter 14627daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(_OBJ_ASM_FILTERED): PRIVATE_SRC := $$(_OBJ_ASM_ORIGINAL) 14637daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(_OBJ_ASM_FILTERED): PRIVATE_DST := $$(_OBJ_ASM_FILTERED) 14647daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(_OBJ_ASM_FILTERED): PRIVATE_FILTER := $$(LOCAL_FILTER_ASM) 14657daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(_OBJ_ASM_FILTERED): PRIVATE_MODULE := $$(LOCAL_MODULE) 14667daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(_OBJ_ASM_FILTERED): $$(_OBJ_ASM_ORIGINAL) 1467ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner @$$(HOST_ECHO) "AsmFilter : $$(PRIVATE_MODULE) <= $$(notdir $$(PRIVATE_SRC))" 1468ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner $$(hide) $$(PRIVATE_FILTER) $$(PRIVATE_SRC) $$(PRIVATE_DST) 14697daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 14707daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # Then, generate the final object, we need to keep assembler-specific 14717daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner # flags which look like -Wa,<option>: 14727daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _SRC := $$(_OBJ_ASM_FILTERED) 14737daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _OBJ := $$(_ORG_OBJ) 14747daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _FLAGS := $$(filter -Wa%,$$(_ORG_FLAGS)) -c 14757daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner _TEXT := "Assembly " 14767daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(eval $$(call ev-build-file)) 14777daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendif 14787daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turnerendef 14797daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 148048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 148148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template : ev-compile-c-source 148248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH) 148348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 2: target object file (without path) 148448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 148548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(eval $(call ev-compile-c-source,<srcfile>,<objfile>) 148648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-c-source and 148748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# compile-s-source 148848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 148948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine ev-compile-c-source 149048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1) 149148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2) 149248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 14937daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_FLAGS := $$($$(my)CFLAGS) \ 14947daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(call get-src-file-target-cflags,$(1)) \ 14951579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \ 14967daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(LOCAL_CFLAGS) \ 14977daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(NDK_APP_CFLAGS) \ 14981579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner $$(call host-c-includes,$$($(my)C_INCLUDES)) \ 14991579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner -c \ 150048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 15017daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_TEXT := "Compile $$(call get-src-file-text,$1)" 150297f5b9de8f353ad15d5edd7cc77974d6fefe2caaDavid 'Digit' Turner_CC := $$(NDK_CCACHE) $$(TARGET_CC) 150348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 15047daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(eval $$(call ev-build-source-file)) 150548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef 150648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 150748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 150848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : compile-c-source 150948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH) 1510c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner# 2: object file 151148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 1512c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner# Usage : $(call compile-c-source,<srcfile>,<objfile>) 151348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C source file 151448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 1515c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnercompile-c-source = $(eval $(call ev-compile-c-source,$1,$2)) 151648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 151748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 151848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : compile-s-source 151948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single Assembly source file name (relative to LOCAL_PATH) 1520c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner# 2: object file 152148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 1522c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner# Usage : $(call compile-s-source,<srcfile>,<objfile>) 152348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single Assembly source file 152448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 1525c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnercompile-s-source = $(eval $(call ev-compile-c-source,$1,$2)) 152648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 152748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 152848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 152948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template : ev-compile-cpp-source 153048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH) 153148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 2: target object file (without path) 153248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 153348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(eval $(call ev-compile-cpp-source,<srcfile>,<objfile>) 153448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-cpp-source 153548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 153648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 153748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine ev-compile-cpp-source 153848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1) 153948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2) 15407daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_FLAGS := $$($$(my)CXXFLAGS) \ 15417daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(call get-src-file-target-cflags,$(1)) \ 15421579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner $$(call host-c-includes, $$(LOCAL_C_INCLUDES) $$(LOCAL_PATH)) \ 15437daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(LOCAL_CFLAGS) \ 15447daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(LOCAL_CPPFLAGS) \ 15457daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(LOCAL_CXXFLAGS) \ 15467daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(NDK_APP_CFLAGS) \ 15477daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(NDK_APP_CPPFLAGS) \ 15487daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner $$(NDK_APP_CXXFLAGS) \ 15491579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner $$(call host-c-includes,$$($(my)C_INCLUDES)) \ 15501579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner -c \ 15517daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 155297f5b9de8f353ad15d5edd7cc77974d6fefe2caaDavid 'Digit' Turner_CC := $$(NDK_CCACHE) $$($$(my)CXX) 15537daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner_TEXT := "Compile++ $$(call get-src-file-text,$1)" 15547daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner 15557daefc38f01900f8a903d9955f7f8d6262d88f32David 'Digit' Turner$$(eval $$(call ev-build-source-file)) 155648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef 155748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 155848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 155948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : compile-cpp-source 156048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH) 1561c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner# : 2: object file name 156248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns : None 156348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage : $(call compile-c-source,<srcfile>) 156448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C++ source file 156548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ----------------------------------------------------------------------------- 1566c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnercompile-cpp-source = $(eval $(call ev-compile-cpp-source,$1,$2)) 156748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner 15686a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 15696a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Module imports 15706a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 15716a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 15726a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Initialize import list 15736a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-init = $(eval __ndk_import_dirs :=) 15746a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 15756a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Add an optional single directory to the list of import paths 15766a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 15776a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-add-path-optional = \ 15786a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(if $(strip $(wildcard $1)),\ 15796a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(call ndk_log,Adding import directory: $1)\ 15806a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(eval __ndk_import_dirs += $1)\ 15816a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 15826a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 15836a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Add a directory to the list of import paths 15846a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# This will warn if the directory does not exist 15856a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 15866a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-add-path = \ 15876a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(if $(strip $(wildcard $1)),\ 15886a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(call ndk_log,Adding import directory: $1)\ 15896a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(eval __ndk_import_dirs += $1)\ 15906a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner ,\ 15916a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(call __ndk_info,WARNING: Ignoring unknown import directory: $1)\ 15926a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 15936a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 15946a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-find-module = $(strip \ 15956a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(eval __imported_module :=)\ 15966a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(foreach __import_dir,$(__ndk_import_dirs),\ 15976a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(if $(__imported_module),,\ 15986a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(call ndk_log, Probing $(__import_dir)/$1/Android.mk)\ 15996a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(if $(strip $(wildcard $(__import_dir)/$1/Android.mk)),\ 16006a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(eval __imported_module := $(__import_dir)/$1)\ 16016a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 16026a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 16036a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 16046a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(__imported_module)\ 16056a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner ) 16066a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 16076a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# described in docs/IMPORT-MODULE.TXT 16086a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# $1: tag name for the lookup 16096a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 1610b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# Small technical note on __ndk_import_depth: we use this variable to 1611b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# record the depth of recursive import-module calls. The variable is 1612b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# initially empty, and we append a "x" to it each time import-module is 1613b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# called. I.e. for three recursive calls to import-module, we would get 1614b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# the values: 1615b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# 1616b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# first call: x 1617b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# second call: xx 1618b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# third call: xxx 1619b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# 1620b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# This is used in module-add to add the top-level modules (i.e. those 1621b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# that are not added with import-module) to __ndk_top_modules, corresponding 1622b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# to the default list of wanted modules (see setup-toolchain.mk). 1623b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner# 16246a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-module = \ 1625499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(eval __import_tag := $(strip $1))\ 1626499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(if $(call seq,$(words $(__import_tag)),1),,\ 1627499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call __ndk_info,$(call local-makefile): Cannot import module with spaces in tag: '$(__import_tag)')\ 1628499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner )\ 1629499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(if $(call set_is_member,$(__ndk_import_list),$(__import_tag)),\ 1630499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call ndk_log,Skipping duplicate import for module with tag '$(__import_tag)')\ 16316a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner ,\ 1632499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call ndk_log,Looking for imported module with tag '$(__import_tag)')\ 1633499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(eval __imported_path := $(call import-find-module,$(__import_tag)))\ 1634499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(if $(__imported_path),\ 1635b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(call ndk_log, Found in $(__imported_path))\ 1636b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(eval __ndk_import_depth := $(__ndk_import_depth)x) \ 1637b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(eval __ndk_import_list := $(call set_insert,$(__ndk_import_list),$(__import_tag)))\ 1638499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(eval include $(__imported_path)/Android.mk)\ 1639b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(eval __ndk_import_depth := $(__ndk_import_depth:%x=%))\ 1640499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner ,\ 1641499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call __ndk_info,$(call local-makefile): Cannot find module with tag '$(__import_tag)' in import path)\ 1642499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call __ndk_info,Are you sure your NDK_MODULE_PATH variable is properly defined ?)\ 1643b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(call __ndk_info,The following directories were searched:)\ 1644b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(for __import_dir,$(__ndk_import_dirs),\ 1645b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner $(call __ndk_info, $(__import_dir))\ 1646b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner )\ 1647499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner $(call __ndk_error,Aborting.)\ 1648499fa5d674e2e85437c69e1ee32a8b8aec3965adDavid 'Digit' Turner )\ 1649b81b0563abbeedd1f1c135359b1a8ee1fb8069edDavid 'Digit' Turner ) 16506a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner 16516a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# Only used for debugging 16526a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner# 16536a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turnerimport-debug = \ 16546a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(info IMPORT DIRECTORIES:)\ 16556a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(foreach __dir,$(__ndk_import_dirs),\ 16566a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner $(info -- $(__dir))\ 16576a8948dccbcde263f30c9d83ba09de47a2e19395David 'Digit' Turner )\ 1658d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1659d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1660d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Module classes 1661d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1662d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' TurnerNDK_MODULE_CLASSES := 1663d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1664d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Register a new module class 1665d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $1: class name (e.g. STATIC_LIBRARY) 1666d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $2: optional file prefix (e.g. 'lib') 1667d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $3: optional file suffix (e.g. '.so') 1668d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1669d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-register = \ 1670d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval NDK_MODULE_CLASSES += $1) \ 1671d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval NDK_MODULE_CLASS.$1.FILE_PREFIX := $2) \ 1672d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval NDK_MODULE_CLASS.$1.FILE_SUFFIX := $3) \ 1673d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(false)) \ 1674d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1675d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Same a module-class-register, for installable modules 1676d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1677d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# An installable module is one that will be copied to $PROJECT/libs/<abi>/ 1678d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# during the NDK build. 1679d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1680d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $1: class name 1681d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $2: optional file prefix 1682d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# $3: optional file suffix 1683d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1684d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-register-installable = \ 1685d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(call module-class-register,$1,$2,$3) \ 1686d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner $(eval NDK_MODULE_CLASS.$1.INSTALLABLE := $(true)) 1687d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 16887a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-class-set-prebuilt = \ 16897a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner $(eval NDK_MODULE_CLASS.$1.PREBUILT := $(true)) 16907a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 1691d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) if $1 is a valid/registered LOCAL_MODULE_CLASS value 1692d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1693d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-check = $(call set_is_member,$(NDK_MODULE_CLASSES),$1) 1694d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1695d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Returns $(true) if $1 corresponds to an installable module class 1696d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1697d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermodule-class-is-installable = $(if $(NDK_MODULE_CLASS.$1.INSTALLABLE),$(true),$(false)) 1698d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 16997a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# Returns $(true) if $1 corresponds to an installable module class 17007a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# 17017a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnermodule-class-is-prebuilt = $(if $(NDK_MODULE_CLASS.$1.PREBUILT),$(true),$(false)) 1702d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1703d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1704d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# Register valid module classes 1705d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# 1706d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1707d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# static libraries: 1708d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> lib<foo>.a by default 1709d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register,STATIC_LIBRARY,lib,.a) 1710d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1711d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# shared libraries: 1712d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> lib<foo>.so 1713d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# a shared library is installable. 1714d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,SHARED_LIBRARY,lib,.so) 1715d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 1716d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# executable 1717d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> <foo> 1718d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# an executable is installable. 1719d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,EXECUTABLE,,) 1720d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner 17217a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# prebuilt shared library 1722d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# <foo> -> <foo> (we assume it is already well-named) 1723d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# it is installable 1724d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner$(call module-class-register-installable,PREBUILT_SHARED_LIBRARY,,) 17257a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-set-prebuilt,PREBUILT_SHARED_LIBRARY) 17267a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner 17277a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# prebuilt static library 17287a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# <foo> -> <foo> (we assume it is already well-named) 17297a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-register,PREBUILT_STATIC_LIBRARY,,) 17307a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(call module-class-set-prebuilt,PREBUILT_STATIC_LIBRARY) 17311579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner 173226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 173326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# C++ STL support 173426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 173526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 173626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# The list of registered STL implementations we support 173726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' TurnerNDK_STL_LIST := 173826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 173926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Used internally to register a given STL implementation, see below. 174026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 174126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system) 174226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $2: STL module name (e.g. cxx-stl/system) 174326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $3: list of static libraries all modules will depend on 174426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $4: list of shared libraries all modules will depend on 174526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 174626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-register = \ 174726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(eval __ndk_stl := $(strip $1)) \ 174826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(eval NDK_STL_LIST += $(__ndk_stl)) \ 174926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(eval NDK_STL.$(__ndk_stl).IMPORT_MODULE := $(strip $2)) \ 175026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(eval NDK_STL.$(__ndk_stl).STATIC_LIBS := $(strip $3)) \ 175126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(eval NDK_STL.$(__ndk_stl).SHARED_LIBS := $(strip $4)) 175226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 175326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called to check that the value of APP_STL is a valid one. 175426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it apperas in APP_STL (e.g. 'system') 175526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 175626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-check = \ 175726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(if $(call set_is_member,$(NDK_STL_LIST),$1),,\ 175826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(call __ndk_info,Invalid APP_STL value: $1)\ 175926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(call __ndk_info,Please use one of the following instead: $(NDK_STL_LIST))\ 176026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(call __ndk_error,Aborting)) 176126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 176226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called before the top-level Android.mk is parsed to 176326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# select the STL implementation. 176426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system) 176526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 176626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-select = \ 176726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(call import-module,$(NDK_STL.$1.IMPORT_MODULE)) 176826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 176926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Called after all Android.mk files are parsed to add 177026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# proper STL dependencies to every C++ module. 177126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# $1: STL name as it appears in APP_STL (e.g. system) 177226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 177326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turnerndk-stl-add-dependencies = \ 177426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(call modules-add-c++-dependencies,\ 177526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(NDK_STL.$1.STATIC_LIBS),\ 177626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner $(NDK_STL.$1.SHARED_LIBS)) 177726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 177826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 177926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 178026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 178126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'system' STL implementation 178226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 178326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\ 178426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner system,\ 178526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner cxx-stl/system,\ 178626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner libstdc++,\ 178726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner ) 178826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 178926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'stlport_static' STL implementation 179026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 179126f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\ 179226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner stlport_static,\ 17932ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner cxx-stl/stlport,\ 179426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner stlport_static,\ 179526f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner ) 179626f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner 179726f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# Register the 'stlport_shared' STL implementation 179826f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner# 179926f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner$(call ndk-stl-register,\ 180026f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner stlport_shared,\ 18012ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner cxx-stl/stlport,\ 180226f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner ,\ 180326f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner stlport_shared\ 180426f23925041dfcbfde15e5c98d9e7c80fd2a7408David 'Digit' Turner ) 18052ca50e007226d9d571c94aec476ef5fdf8c4d3fdDavid 'Digit' Turner 180681dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner# Register the 'gnustl_static' STL implementation 180781dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner# 180881dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner$(call ndk-stl-register,\ 180981dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner gnustl_static,\ 181081dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner cxx-stl/gnu-libstdc++,\ 181181dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner gnustl_static,\ 181281dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner \ 181381dd1b4207dac8328a0ef33b676fcc773f4ca9a1David 'Digit' Turner ) 1814c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner 18150059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner$(call ndk-stl-register,\ 18160059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner gnustl_shared,\ 18170059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner cxx-stl/gnu-libstdc++,\ 18180059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner ,\ 18190059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner gnustl_shared\ 18200059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner ) 18210059fb2aa9c710cfe7dfd3d67a1cdc7b5e3e284aDavid 'Digit' Turner 1822c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# Register the static version of the GAbi++ C++ runtime 1823c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# 1824c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner$(call ndk-stl-register,\ 1825c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner gabi++_static,\ 1826c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner cxx-stl/gabi++,\ 1827c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner gabi++_static,\ 1828c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner ) 1829c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner 1830c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# Register the shared version of the GAbi++ C++ runtime 1831c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# 1832c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner$(call ndk-stl-register,\ 1833c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner gabi++_shared,\ 1834c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner cxx-stl/gabi++,\ 1835c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner gabi++_shared,\ 1836c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner ) 1837c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner 1838c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# The 'none' APP_STL value corresponds to no C++ support at 1839c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# all. Used by some of the STLport and GAbi++ test projects. 1840c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner# 1841c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner$(call ndk-stl-register,\ 1842c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner none,\ 1843c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner cxx-stl/system,\ 1844c38f5f527a59f1d849371d662f8882d325edc3bfDavid 'Digit' Turner ) 1845