definitions.mk revision 2ab9c51a581188f1986d9ab578c513665a84460a
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
192ab9c51a581188f1986d9ab578c513665a84460aDavid 'Digit' Turnerinclude $(BUILD_SYSTEM)/../gmsl/gmsl
2048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
2148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is the Android NDK version number as a list of three items:
2248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# major, minor, revision
2348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerndk_version := 1 0 0
2548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
2648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Used to output warnings and error from the library, it's possible to
2748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# disable any warnings or errors by overriding these definitions
2848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# manually or by setting GMSL_NO_WARNINGS or GMSL_NO_ERRORS
2948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_name    := Android NDK
3148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_info     = $(info $(__ndk_name): $1 $2 $3 $4 $5)
3248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_warning  = $(warning $(__ndk_name): $1 $2 $3 $4 $5)
3348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_error    = $(error $(__ndk_name): $1 $2 $3 $4 $5)
3448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifdef NDK_NO_WARNINGS
3648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_warning :=
3748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
3848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifdef NDK_NO_ERRORS
3948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_error :=
4048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
4148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
4248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# If NDK_TRACE is enabled then calls to the library functions are
4348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# traced to stdout using warning messages with their arguments
4448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
4548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifdef NDK_TRACE
4648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr1 = $(warning $0('$1'))
4748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr2 = $(warning $0('$1','$2'))
4848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr3 = $(warning $0('$1','$2','$3'))
4948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
5048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr1 :=
5148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr2 :=
5248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner__ndk_tr3 :=
5348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
5448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
5548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
5648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : ndk_log
5748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: text to print when NDK_LOG is defined
5848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
5948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call ndk_log,<some text>)
6048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
6148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifdef NDK_LOG
6248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerndk_log = $(info $(__ndk_name): $1)
6348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
6448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerndk_log :=
6548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
6648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
6748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
6848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
6948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : empty
7048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : an empty macro
7148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(empty)
7248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
7348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerempty :=
7448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
7548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
7648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : space
7748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : a single space
7848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(space)
7948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
8048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerspace  := $(empty) $(empty)
8148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
8248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
8348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last2
8448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list
8548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the penultimate (next-to-last) element of a list
8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call last2, <LIST>)
8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
8848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast2 = $(word $(words $1), x $1)
8948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
9048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : last3
9248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: a list
9348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the antepenultimate (second-next-to-last) element of a list
9448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call last3, <LIST>)
9548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlast3 = $(word $(words $1), x x $1)
9748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
9848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
9948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : this-makefile
10048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the name of the current Makefile in the inclusion stack
10148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(this-makefile)
10248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
10348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerthis-makefile = $(lastword $(MAKEFILE_LIST))
10448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
10548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
10648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : local-makefile
10748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the name of the last parsed Android.mk file
10848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(local-makefile)
10948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
11048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerlocal-makefile = $(lastword $(filter %Android.mk,$(MAKEFILE_LIST)))
11148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
11248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
11348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : assert-defined
11448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
11548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
11648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call assert-defined, VAR1 VAR2 VAR3...)
11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all variables listed in $1 are defined, or abort the
11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            build
11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerassert-defined = $(foreach __varname,$(strip $1),\
12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(strip $($(__varname))),,\
12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error, Assertion failure: $(__varname) is not defined)\
12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
12448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner)
12548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
12648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
12748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : clear-vars
12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: file where the variable should be defined
13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
13148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call clear-vars, VAR1 VAR2 VAR3...)
13248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Clears/undefines all variables in argument list
13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerclear-vars = $(foreach __varname,$1,$(eval $(__varname) := $(empty)))
13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
13748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-required-vars
13848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: list of variable names
13948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: file where the variable(s) should be defined
14048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
14148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-required-vars, VAR1 VAR2 VAR3..., <file>)
14248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: Checks that all required vars listed in $1 were defined by $2
14348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            or abort the build with an error
14448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
14548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-required-vars = $(foreach __varname,$1,\
14648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(strip $($(__varname))),,\
14748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_info, Required variable $(__varname) is not defined by $2)\
14848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error,Aborting)\
14948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
15048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner)
15148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
15248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
15348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : modules-clear
15448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: None
15548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
15648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call modules-clear)
15748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: clears the list of defined modules known by the build system
15848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
15948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermodules-clear = $(eval __ndk_modules := $(empty_set))
16048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
16148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
16248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : modules-add
16348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name
16448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: path to Android.mk where the module is defined
16548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
16648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call modules-add,<modulename>,<Android.mk path>)
16748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: add a new module. If it is already defined, print an error message
16848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            and abort.
16948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
17048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermodules-add = \
17148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(call set_is_member,$(__ndk_modules),$1),\
17248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner       $(call __ndk_info,Trying to define local module '$1' in $2.)\
17348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner       $(call __ndk_info,But this module was already defined by $(__ndk_modules.$1).)\
17448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner       $(call __ndk_error,Aborting.)\
17548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )\
17648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(eval __ndk_modules := $(call set_insert,$(__ndk_modules),$1))\
17748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(eval __ndk_modules.$1 := $2)\
17848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
17948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
18048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-define
18148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name of variable that must be defined by the user
18248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            2: name of Makefile where the variable should be defined
18348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            3: name/description of the Makefile where the check is done, which
18448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#               must be included by $2
18548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
18648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
18748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-user-define = $(if $(strip $($1)),,\
18848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(call __ndk_error,Missing $1 before including $3 in $2))
18948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
19048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
19148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to check that LOCAL_MODULE is properly defined by an Android.mk
19248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# file before including one of the $(BUILD_SHARED_LIBRARY), etc... files.
19348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
19448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE
19548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: name/description of the included build Makefile where the
19648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#               check is done
19748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
19848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-user-LOCAL_MODULE, BUILD_SHARED_LIBRARY)
19948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
20048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-defined-LOCAL_MODULE = \
20148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(call check-user-define,LOCAL_MODULE,$(local-makefile),$(1)) \
20248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(call seq,$(words $(LOCAL_MODULE)),1),,\
20348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_info,LOCAL_MODULE definition in $(local-makefile) must not contain space)\
20448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    $(call __ndk_error,Please correct error. Aborting)\
20548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )
20648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
20748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
20848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Strip any 'lib' prefix in front of a given string.
20948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
21048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : strip-lib-prefix
21148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: module name
21248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : module name, without any 'lib' prefix if any
21348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call strip-lib-prefix,$(LOCAL_MODULE))
21448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
21548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerstrip-lib-prefix = $(1:lib%=%)
21648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
21748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
21848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# This is used to strip any lib prefix from LOCAL_MODULE, then check that
21948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the corresponding module name is not already defined.
22048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
22148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : check-user-LOCAL_MODULE
22248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: path of Android.mk where this LOCAL_MODULE is defined
22348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : None
22448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE))
22548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
22648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercheck-LOCAL_MODULE = \
22748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(eval LOCAL_MODULE := $$(call strip-lib-prefix,$$(LOCAL_MODULE)))\
22848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(call modules-add,$(LOCAL_MODULE),$1)
22948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
23048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
23148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : my-dir
23248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : the directory of the current Makefile
23348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(my-dir)
23448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
23548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermy-dir = $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
23648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
23748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
23848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function : all-makefiles-under
23948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments: 1: directory path
24048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : a list of all makefiles immediately below some directory
24148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(call all-makefiles-under, <some path>)
24248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
24348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-makefiles-under = $(wildcard $1/*/Android.mk)
24448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
24548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
24648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : all-subdir-makefiles
24748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : list of all makefiles in subdirectories of the current Makefile's
24848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            location
24948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(all-subdir-makefiles)
25048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
25148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerall-subdir-makefiles = $(call all-makefiles-under,$(call my-dir))
25248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
25348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
25448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
25548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
25648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Application.mk support
25748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
25848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
25948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *must* be defined in Application.mk files
26148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerNDK_APP_VARS_REQUIRED := APP_MODULES APP_PROJECT_PATH
26248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of variables that *may* be defined in Application.mk files
26448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerNDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CXXFLAGS
26548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the list of all variables that may appear in an Application.mk file
26731d9dac441e28836a4fe6b2c052da6e35780c25dDavid 'Digit' TurnerNDK_APP_VARS := $(NDK_APP_VARS_REQUIRED) $(NDK_APP_VARS_OPTIONAL)
26848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
27048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
27148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Android.mk support
27248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
27348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
27448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
27548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
27648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
27748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
27848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Generated files support
27948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
28048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
28148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
28248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
28348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
28448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : host-static-library-path
28548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: library module name (e.g. 'foo')
28648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : location of generated host library name (e.g. '..../libfoo.a)
28748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call host-static-library-path,<modulename>)
28848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
28948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhost-static-library-path = $(HOST_OUT)/lib$1.a
29048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
29148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
29248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : host-executable-path
29348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: executable module name (e.g. 'foo')
29448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : location of generated host executable name (e.g. '..../foo)
29548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call host-executable-path,<modulename>)
29648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
29748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhost-executable-path = $(HOST_OUT)/$1$(HOST_EXE)
29848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
29948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
30048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : static-library-path
30148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: library module name (e.g. 'foo')
30248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : location of generated static library name (e.g. '..../libfoo.a)
30348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call static-library-path,<modulename>)
30448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
30548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerstatic-library-path = $(TARGET_OUT)/lib$1.a
30648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
30748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
30848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : shared-library-path
30948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: library module name (e.g. 'foo')
31048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : location of generated shared library name (e.g. '..../libfoo.so)
31148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call shared-library-path,<modulename>)
31248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
31348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnershared-library-path = $(TARGET_OUT)/lib$1.so
31448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
31548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
31648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : executable-path
31748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: executable module name (e.g. 'foo')
31848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : location of generated exectuable name (e.g. '..../foo)
31948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call executable-path,<modulename>)
32048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
32148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerexecutable-path = $(TARGET_OUT)/$1
32248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
32348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
32448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
32548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Build commands support
32648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
32748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# =============================================================================
32848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
32948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
33048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Macro    : hide
33148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns  : nothing
33248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage    : $(hide)<make commands>
33348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale: To be used as a prefix for Make build commands to hide them
33448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            by default during the build. To show them, set V=1 in your
33548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            environment or command-line.
33648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
33748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            For example:
33848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
33948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#                foo.o: foo.c
34048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#                -->|$(hide) <build-commands>
34148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
34248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#            Where '-->|' stands for a single tab character.
34348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
34448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
34548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifeq ($(V),1)
34648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = $(empty)
34748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
34848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerhide = @
34948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
35048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
35148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
35248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template  : ev-compile-c-source
35348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH)
35448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: target object file (without path)
35548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
35648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(eval $(call ev-compile-c-source,<srcfile>,<objfile>)
35748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-c-source and
35848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             compile-s-source
35948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
36048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine  ev-compile-c-source
36148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1)
36248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)
36348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
36448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_SRC      := $$(_SRC)
36548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_OBJ      := $$(_OBJ)
36648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_MODULE   := $$(LOCAL_MODULE)
36748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_ARM_MODE := $$(LOCAL_ARM_MODE)
36848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_ARM_TEXT := $$(LOCAL_ARM_TEXT)
36948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_CC       := $$($$(my)CC)
37048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_CFLAGS   := $$($$(my)CFLAGS) \
371f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner                              $$($$(my)$(LOCAL_ARM_MODE)_$(LOCAL_BUILD_MODE)_CFLAGS) \
372f4532bc743fbfd4c5c60ebdd0f435006a100fc19David 'Digit' Turner                              $$(LOCAL_C_INCLUDES:%=-I%) \
37348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              -I$$(LOCAL_PATH) \
3742ab9c51a581188f1986d9ab578c513665a84460aDavid 'Digit' Turner                              $$(LOCAL_CPPFLAGS) \
37548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              $$(LOCAL_CFLAGS) \
37648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              $$(NDK_APP_CPPFLAGS) \
377f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner                              $$(NDK_APP_CFLAGS)
37848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
37948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK)
38048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	@mkdir -p $$(dir $$(PRIVATE_OBJ))
38148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	@echo "Compile $$(PRIVATE_ARM_TEXT)  : $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC)"
38248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c \
38348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	-MMD -MP -MF $$(PRIVATE_OBJ).d.tmp \
38448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$$(PRIVATE_SRC) \
38548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	-o $$(PRIVATE_OBJ)
38648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$$(call cmd-process-deps,$$(PRIVATE_OBJ))
38748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
38848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_OBJECTS         += $$(_OBJ)
38948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS += $$(dir $$(_OBJ))
39048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
39148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
39248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
39348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-c-source
39448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C source file name (relative to LOCAL_PATH)
39548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
39648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-c-source,<srcfile>)
39748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C source file
39848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
39948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercompile-c-source = $(eval $(call ev-compile-c-source,$1,$(1:%.c=%.o)))
40048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
40148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
40248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-s-source
40348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single Assembly source file name (relative to LOCAL_PATH)
40448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
40548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-s-source,<srcfile>)
40648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single Assembly source file
40748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
4084bfbac10e5411efca892417e6b6b30842c215dc0David 'Digit' Turnercompile-s-source = $(eval $(call ev-compile-c-source,$1,$(1:%.S=%.o)))
40948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
41048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
41148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
41248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Template  : ev-compile-cpp-source
41348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)
41448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: target object file (without path)
41548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
41648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(eval $(call ev-compile-cpp-source,<srcfile>,<objfile>)
41748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Internal template evaluated by compile-cpp-source
41848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
41948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
42048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine  ev-compile-cpp-source
42148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_SRC:=$$(LOCAL_PATH)/$(1)
42248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner_OBJ:=$$(LOCAL_OBJS_DIR)/$(2)
42348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
42448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_SRC      := $$(_SRC)
42548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_OBJ      := $$(_OBJ)
42648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_MODULE   := $$(LOCAL_MODULE)
42748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_ARM_MODE := $$(LOCAL_ARM_MODE)
42848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_ARM_TEXT := $$(LOCAL_ARM_TEXT)
42948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_CXX      := $$($$(my)CXX)
43048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): PRIVATE_CXXFLAGS := $$($$(my)CXXFLAGS) \
431f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner                              $$($$(my)$(LOCAL_ARM_MODE)_$(LOCAL_BUILD_MODE)_CFLAGS) \
432f4532bc743fbfd4c5c60ebdd0f435006a100fc19David 'Digit' Turner                              $$(LOCAL_C_INCLUDES:%=-I%) \
43348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              -I$$(LOCAL_PATH) \
4342ab9c51a581188f1986d9ab578c513665a84460aDavid 'Digit' Turner                              $$(LOCAL_CPPFLAGS) \
4352ab9c51a581188f1986d9ab578c513665a84460aDavid 'Digit' Turner                              $$(LOCAL_CXXFLAGS) \
43648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              $$(NDK_APP_CPPFLAGS) \
43748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner                              $$(NDK_APP_CXXFLAGS) \
43848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
43948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$$(_OBJ): $$(_SRC) $$(LOCAL_MAKEFILE) $$(NDK_APP_APPLICATION_MK)
44048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	@mkdir -p $$(dir $$(PRIVATE_OBJ))
44148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	@echo "Compile++ $$(PRIVATE_ARM_TEXT): $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC)"
44248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$(hide) $$(PRIVATE_CXX) $$(PRIVATE_CXXFLAGS) -c \
44348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	-MMD -MP -MF $$(PRIVATE_OBJ).d.tmp \
44448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$$(PRIVATE_SRC) \
44548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	-o $$(PRIVATE_OBJ)
44648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner	$$(call cmd-process-deps,$$(PRIVATE_OBJ))
44748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
44848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_OBJECTS         += $$(_OBJ)
44948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS += $$(dir $$(_OBJ))
45048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
45148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
45248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
45348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Function  : compile-cpp-source
45448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: single C++ source file name (relative to LOCAL_PATH)
45548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
45648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call compile-c-source,<srcfile>)
45748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : Setup everything required to build a single C++ source file
45848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
45948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercompile-cpp-source = $(eval $(call ev-compile-cpp-source,$1,$(1:%$(LOCAL_CPP_EXTENSION)=%.o)))
46048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
46148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
46248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Command   : cmd-process-deps
46348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: object file path
46448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
46548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call cmd-process-deps,<objectfile>)
46648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : To be used as a Make build command to process the dependencies
46748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             generated by the compiler (in <obj>.d.tmp) into ones suited
46848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             for our build system. See the comments in build/core/mkdeps.sh
46948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             for more details.
47048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
47148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercmd-process-deps = $(hide) $(BUILD_SYSTEM)/mkdeps.sh $(1) $(1).d.tmp $(1).d
47248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
47348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
47448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Command   : cmd-install-file
47548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Arguments : 1: source file
47648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             2: destination file
47748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Returns   : None
47848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Usage     : $(call cmd-install-file,<srcfile>,<dstfile>)
47948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Rationale : To be used as a Make build command to copy/install a file to
48048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#             a given location.
48148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# -----------------------------------------------------------------------------
48248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdefine cmd-install-file
48348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner@mkdir -p $(dir $2)
48448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$(hide) cp -fp $1 $2
48548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendef
486