build-binary.mk revision 544ecbef57ecf42fbe8a99a1a6cd6816a347f587
148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Copyright (C) 2008 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
168700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# Check that LOCAL_MODULE is defined, then restore its LOCAL_XXXX values
178700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(call assert-defined,LOCAL_MODULE)
188700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(call module-restore-locals,$(LOCAL_MODULE))
198700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
20d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# For now, only support target (device-specific modules).
21d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# We may want to introduce support for host modules in the future
22d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner# but that is too experimental for now.
2348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
24d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnermy := TARGET_
2548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
2648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# LOCAL_MAKEFILE must also exist and name the Android.mk that
2748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# included the module build script.
2848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
29d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(call assert-defined,LOCAL_MAKEFILE LOCAL_BUILD_SCRIPT LOCAL_BUILT_MODULE)
3048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
31a5501b02c2f2a9e1bf9fce42a3faf601adc070e9David 'Digit' Turnerinclude $(BUILD_SYSTEM)/import-locals.mk
32d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner
33d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner#
34d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner# Ensure that 'make <module>' and 'make clean-<module>' work
35d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner#
36d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner.PHONY: $(LOCAL_MODULE)
37d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(LOCAL_MODULE): $(LOCAL_BUILT_MODULE)
38d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner
39d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turnercleantarget := clean-$(LOCAL_MODULE)-$(TARGET_ARCH_ABI)
40d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner.PHONY: $(cleantarget)
41d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turnerclean: $(cleantarget)
42d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner
43d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(cleantarget): PRIVATE_MODULE      := $(LOCAL_MODULE)
44d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(cleantarget): PRIVATE_TEXT        := [$(TARGET_ARCH_ABI)]
45d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(cleantarget): PRIVATE_CLEAN_FILES := $(LOCAL_BUILT_MODULE) \
46d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner                                       $($(my)OBJS)
47d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner
48d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(cleantarget)::
49ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@$(HOST_ECHO) "Clean: $(PRIVATE_MODULE) $(PRIVATE_TEXT)"
50ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-rmdir,$(PRIVATE_CLEAN_FILES))
51d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner
52d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turnerifeq ($(NDK_APP_DEBUGGABLE),true)
53d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turner$(NDK_APP_GDBSETUP): PRIVATE_SRC_DIRS += $(LOCAL_C_INCLUDES) $(LOCAL_PATH)
54d0ac7ca653627ffe4f38973034c93bc53a66adecDavid 'Digit' Turnerendif
5548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
5648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# list of generated object files
5748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_OBJECTS :=
5848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
59ce42f422169554ab5f646b9b3491ad9d632605e1David 'Digit' Turner# always define ANDROID when building binaries
60ce42f422169554ab5f646b9b3491ad9d632605e1David 'Digit' Turner#
61ce42f422169554ab5f646b9b3491ad9d632605e1David 'Digit' TurnerLOCAL_CFLAGS := -DANDROID $(LOCAL_CFLAGS)
62ce42f422169554ab5f646b9b3491ad9d632605e1David 'Digit' Turner
6348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
6448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Add the default system shared libraries to the build
6548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
66d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
67d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner  LOCAL_SHARED_LIBRARIES += $(TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES)
68d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerelse
69d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turner  LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
7048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
7148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
7248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
7348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
7448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Check LOCAL_CPP_EXTENSION, use '.cpp' by default
7548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
76c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerbad_cpp_extensions := $(strip $(filter-out .%,$(LOCAL_CPP_EXTENSION)))
77c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerifdef bad_cpp_extensions
78c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner    $(call __ndk_info,WARNING: Invalid LOCAL_CPP_EXTENSION values: $(bad_cpp_extensions))
79c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner    LOCAL_CPP_EXTENSION := $(filter $(bad_cpp_extensions),$(LOCAL_CPP_EXTENSIONS))
80c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerendif
8148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_CPP_EXTENSION := $(strip $(LOCAL_CPP_EXTENSION))
8248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerifeq ($(LOCAL_CPP_EXTENSION),)
8348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  LOCAL_CPP_EXTENSION := .cpp
8448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
8548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
885bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# If LOCAL_ALLOW_UNDEFINED_SYMBOLS is not true, the linker will allow the generation
89494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner# of a binary that uses undefined symbols.
90494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner#
915bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifneq ($(LOCAL_ALLOW_UNDEFINED_SYMBOLS),true)
92c2cb1cc7609843440140c4e8794b76321f64cc40David 'Digit' Turner  LOCAL_LDFLAGS += $($(my)NO_UNDEFINED_LDFLAGS)
939c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turnerendif
949c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner
95ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# Toolchain by default disallows generated code running from the heap and stack.
96ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# If LOCAL_DISABLE_NO_EXECUTE is true, we allow that
979c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner#
98ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehifeq ($(LOCAL_DISABLE_NO_EXECUTE),true)
99ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_CFLAGS += $($(my)DISABLE_NO_EXECUTE_CFLAGS)
100ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_LDFLAGS += $($(my)DISABLE_NO_EXECUTE_LDFLAGS)
101ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehelse
1029c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner  LOCAL_CFLAGS += $($(my)NO_EXECUTE_CFLAGS)
1039c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner  LOCAL_LDFLAGS += $($(my)NO_EXECUTE_LDFLAGS)
104494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turnerendif
105494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner
106ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# Toolchain by default provides relro and GOT protections.
107ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# If LOCAL_DISABLE_RELRO is true, we disable the protections.
108f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich#
109ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehifeq ($(LOCAL_DISABLE_RELRO),true)
110ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_LDFLAGS += $($(my)DISABLE_RELRO_LDFLAGS)
111ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehelse
112f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich  LOCAL_LDFLAGS += $($(my)RELRO_LDFLAGS)
113f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevichendif
114f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich
115494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner#
11648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# The original Android build system allows you to use the .arm prefix
11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# to a source file name to indicate that it should be defined in either
11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 'thumb' or 'arm' mode, depending on the value of LOCAL_ARM_MODE
11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# First, check LOCAL_ARM_MODE, it should be empty, 'thumb' or 'arm'
12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# We make the default 'thumb'
12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE))
1245bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef LOCAL_ARM_MODE
12548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  ifneq ($(words $(LOCAL_ARM_MODE)),1)
126f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner      $(call __ndk_info,   LOCAL_ARM_MODE in $(LOCAL_MAKEFILE) must be one word, not '$(LOCAL_ARM_MODE)')
12748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner      $(call __ndk_error, Aborting)
12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  endif
12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  # check that LOCAL_ARM_MODE is defined to either 'arm' or 'thumb'
13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(filter-out thumb arm, $(LOCAL_ARM_MODE)),\
131f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner      $(call __ndk_info,   LOCAL_ARM_MODE must be defined to either 'arm' or 'thumb' in $(LOCAL_MAKEFILE) not '$(LOCAL_ARM_MODE)')\
13248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner      $(call __ndk_error, Aborting)\
13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )
13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# As a special case, the original Android build system
13748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# allows one to specify that certain source files can be
13848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# forced to build in ARM mode by using a '.arm' suffix
13948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# after the extension, e.g.
14048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#  LOCAL_SRC_FILES := foo.c.arm
14248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# to build source file $(LOCAL_PATH)/foo.c as ARM
14448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
146151a2c81c79166122ae88d803de36e151c39b2cfDavid 'Digit' Turner$(call clear-all-src-tags)
147151a2c81c79166122ae88d803de36e151c39b2cfDavid 'Digit' Turner
1485bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# As a special extension, the NDK also supports the .neon extension suffix
1495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# to indicate that a single file can be compiled with ARM NEON support
1505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# We must support both foo.c.neon and foo.c.arm.neon here
15148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1525bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Also, if LOCAL_ARM_NEON is set to 'true', force Neon mode for all source
1535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# files
15448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
15548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1565bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources  := $(filter %.neon,$(LOCAL_SRC_FILES))
1575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources  := $(neon_sources:%.neon=%)
1585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
1595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' TurnerLOCAL_ARM_NEON := $(strip $(LOCAL_ARM_NEON))
1605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef LOCAL_ARM_NEON
1615bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  $(if $(filter-out true false,$(LOCAL_ARM_NEON)),\
1625bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_info,LOCAL_ARM_NEON must be defined either to 'true' or 'false' in $(LOCAL_MAKEFILE), not '$(LOCAL_ARM_NEON)')\
1635bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_error,Aborting) \
1645bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  )
1655bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1665bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_NEON),true)
1677848118177898e00e54c0cbb8eb27e91997a4a9cDavid 'Digit' Turner  neon_sources += $(LOCAL_SRC_FILES:%.neon=%)
1680e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turnerendif
16948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1705bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources := $(strip $(neon_sources))
1715bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef neon_sources
1725bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  ifneq ($(TARGET_ARCH_ABI),armeabi-v7a)
1735bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_info,NEON support is only possible for armeabi-v7a ABI)
174d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(call __ndk_info,Please add checks against TARGET_ARCH_ABI in $(LOCAL_MAKEFILE))
1755bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_error,Aborting)
1765bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  endif
1775bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  $(call tag-src-files,$(neon_sources:%.arm=%),neon)
1785bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
17948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1805bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' TurnerLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.neon=%)
18148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1825bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# strip the .arm suffix from LOCAL_SRC_FILES
1835bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# and tag the relevant sources with the 'arm' tag
1845bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
1855bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerarm_sources     := $(filter %.arm,$(LOCAL_SRC_FILES))
1865bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerarm_sources     := $(arm_sources:%.arm=%)
1875bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerthumb_sources   := $(filter-out %.arm,$(LOCAL_SRC_FILES))
18893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.arm=%)
18948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1905bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_MODE),arm)
1915bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    arm_sources := $(LOCAL_SRC_FILES)
1925bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1935bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_MODE),thumb)
1945bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    arm_sources := $(empty)
1955bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1965bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(call tag-src-files,$(arm_sources),arm)
1975bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
1985bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Process all source file tags to determine toolchain-specific
1995bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# target compiler flags, and text.
2000e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner#
2015bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(call TARGET-process-src-files-tags)
2020e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner
2035bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# only call dump-src-file-tags during debugging
2045bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#$(dump-src-file-tags)
2055bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
2065171bb2f0f68965677f11da882a956c59c8b9c72David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS :=
20793acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
20893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# all_source_patterns contains the list of filename patterns that correspond
20993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# to source files recognized by our build system
21093acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerall_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION)
21193acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerall_source_patterns   := $(foreach _ext,$(all_source_extensions),%$(_ext))
212c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerall_cpp_patterns      := $(foreach _ext,$(LOCAL_CPP_EXTENSION),%$(_ext))
21393acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
21493acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerunknown_sources := $(strip $(filter-out $(all_source_patterns),$(LOCAL_SRC_FILES)))
21593acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerifdef unknown_sources
21693acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(call __ndk_info,WARNING: Unsupported source file extensions in $(LOCAL_MAKEFILE) for module $(LOCAL_MODULE))
21793acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(call __ndk_info,  $(unknown_sources))
21893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerendif
21993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
22093acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# LOCAL_OBJECTS will list all object files corresponding to the sources
22193acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# listed in LOCAL_SRC_FILES, in the *same* order.
22293acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner#
22393acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(LOCAL_SRC_FILES)
22493acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner$(foreach _ext,$(all_source_extensions),\
22593acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(eval LOCAL_OBJECTS := $$(LOCAL_OBJECTS:%$(_ext)=%.o))\
22693acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner)
22793acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(filter %.o,$(LOCAL_OBJECTS))
228c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' TurnerLOCAL_OBJECTS := $(subst ../,__/,$(LOCAL_OBJECTS))
22993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(foreach _obj,$(LOCAL_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))
2305171bb2f0f68965677f11da882a956c59c8b9c72David 'Digit' Turner
231c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# If the module has any kind of C++ features, enable them in LOCAL_CPPFLAGS
232c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner#
233c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti))
234c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    LOCAL_CPPFLAGS += -frtti
235c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
236c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),exceptions))
237c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    LOCAL_CPPFLAGS += -fexceptions
238c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
239c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner
240c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# If we're using the 'system' STL and use rtti or exceptions, then
241c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# automatically link against the GNU libsupc++ for now.
242c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner#
243f2c6c623ae6aae0b9b82a4433326a01c95da6f4cDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti exceptions))
244c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    ifeq (system,$(NDK_APP_STL))
2450136e5405c99a3fbe1be109ee8ff186475c0d99aAndrew Hsieh      LOCAL_LDLIBS := $(LOCAL_LDLIBS) $(call host-path,$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libsupc++.a)
246c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    endif
247c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
248c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner
2495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Build the sources to object files
2505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
251f2f883c9f5d1057b585f2490ffb12800d166e9f4David 'Digit' Turner
252c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter %.c,$(LOCAL_SRC_FILES)), $(call compile-c-source,$(src),$(call get-object-name,$(src))))
253c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter %.S %.s,$(LOCAL_SRC_FILES)), $(call compile-s-source,$(src),$(call get-object-name,$(src))))
2540e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner
255c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\
256c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner    $(call compile-cpp-source,$(src),$(call get-object-name,$(src)))\
257c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner)
25848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
25948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2600e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner# The compile-xxx-source calls updated LOCAL_OBJECTS and LOCAL_DEPENDENCY_DIRS
26148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
262a85825c5a2b3427e0361c5bf42e9df5c50f58b66David 'Digit' TurnerALL_DEPENDENCY_DIRS += $(sort $(LOCAL_DEPENDENCY_DIRS))
263a85825c5a2b3427e0361c5bf42e9df5c50f58b66David 'Digit' TurnerCLEAN_OBJS_DIRS     += $(LOCAL_OBJS_DIR)
264f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
265f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
266f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# Handle the static and shared libraries this module depends on
267f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
268b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_STATIC_LIBRARIES       := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
269b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_WHOLE_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_WHOLE_STATIC_LIBRARIES))
270b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_SHARED_LIBRARIES       := $(call strip-lib-prefix,$(LOCAL_SHARED_LIBRARIES))
271b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner
2721208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Transitive closure of static libraries
2731208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' TurnerLOCAL_STATIC_LIBRARIES       := $(call module-get-depends,$(LOCAL_STATIC_LIBRARIES),STATIC_LIBRARIES)
2741208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' TurnerLOCAL_WHOLE_STATIC_LIBRARIES := $(call module-get-depends,$(LOCAL_WHOLE_STATIC_LIBRARIES),WHOLE_STATIC_LIBRARIES)
2751208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner
276b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turnerstatic_libraries       := $(call map,module-get-built,$(LOCAL_STATIC_LIBRARIES))
277b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turnerwhole_static_libraries := $(call map,module-get-built,$(LOCAL_WHOLE_STATIC_LIBRARIES))
278f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
279bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnershared_libraries := $(call map,module-get-built,$(LOCAL_SHARED_LIBRARIES))\
280f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner                    $(TARGET_PREBUILT_SHARED_LIBRARIES)
281f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
282b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(static_libraries) $(whole_static_libraries) $(shared_libraries)
283f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
284f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# If LOCAL_LDLIBS contains anything like -l<library> then
285f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# prepend a -L$(SYSROOT)/usr/lib to it to ensure that the linker
286f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# looks in the right location
287f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
288f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turnerifneq ($(filter -l%,$(LOCAL_LDLIBS)),)
2891579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner    LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT)/usr/lib) $(LOCAL_LDLIBS)
290f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turnerendif
291f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
2927a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# The list of object/static/shared libraries passed to the linker when
2937a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# building shared libraries and executables. order is important.
2947a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
2957a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerlinker_objects_and_libraries := $(strip $(call TARGET-get-linker-objects-and-libraries,\
2967a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(LOCAL_OBJECTS), \
2977a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(static_libraries), \
2987a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(whole_static_libraries), \
2997a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(shared_libraries)))
3007a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3017a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# The list of object files sent to 'ar' when building static libraries
3027a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3037a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerar_objects := $(call host-path,$(LOCAL_OBJECTS))
3047a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3057a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# When LOCAL_SHORT_COMMANDS is defined to 'true' we are going to write the
3067a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# list of all object files and/or static/shared libraries that appear on the
3077a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# command line to a file, then use the @<listfile> syntax to invoke it.
3087a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3097a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# This allows us to link or archive a huge number of stuff even on Windows
3107a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# with its puny 8192 max character limit on its command-line.
3117a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3127a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' TurnerLOCAL_SHORT_COMMANDS := $(strip $(LOCAL_SHORT_COMMANDS))
3137a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerifndef LOCAL_SHORT_COMMANDS
3147a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    LOCAL_SHORT_COMMANDS := $(strip $(NDK_APP_SHORT_COMMANDS))
3157a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif
316488e22a37f47c49be48a0f2f877298dd5fd0d1c9Andrew Hsiehifeq ($(LOCAL_SHORT_COMMANDS),true)
3177a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    # For static and whole static libraries
3187a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    ifneq (,$(filter STATIC_LIBRARY WHOLE_STATIC_LIBRARY,$(call module-get-class,$(LOCAL_MODULE))))
3197a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call ndk_log,Building static library module '$(LOCAL_MODULE)' with linker list file)
3207a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        ar_options   := $(ar_objects)
3217a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        ar_list_file := $(LOCAL_OBJS_DIR)/archiver.list
322488e22a37f47c49be48a0f2f877298dd5fd0d1c9Andrew Hsieh        ar_objects   := @$(call host-path,$(ar_list_file))
3237a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call generate-list-file,$(ar_options),$(ar_list_file))
3247a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3257a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(LOCAL_BUILT_MODULE): $(ar_list_file)
3267a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    endif
3277a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3287a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    # For shared libraries and executables
3297a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    ifneq (,$(filter SHARED_LIBRARY EXECUTABLE,$(call module-get-class,$(LOCAL_MODULE))))
3307a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call ndk_log,Building ELF binary module '$(LOCAL_MODULE)' with linker list file)
3317a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_options   := $(linker_objects_and_libraries)
3327a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_list_file := $(LOCAL_OBJS_DIR)/linker.list
3337a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_objects_and_libraries := @$(call host-path,$(linker_list_file))
3347a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3357a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call generate-list-file,$(linker_options),$(linker_list_file))
3367a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3377a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(LOCAL_BUILT_MODULE): $(linker_list_file)
3387a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    endif
3397a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3407a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif
3417a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
342544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(call generate-file-dir,$(LOCAL_BUILT_MODULE))
343544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
344f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
345b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(whole_static_libraries)
346f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_SHARED_LIBRARIES := $(shared_libraries)
347f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_OBJECTS          := $(LOCAL_OBJECTS)
3487a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LINKER_OBJECTS_AND_LIBRARIES := $(linker_objects_and_libraries)
349d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LIBGCC := $(TARGET_LIBGCC)
350f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
351d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LD := $(TARGET_LD)
352f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LDFLAGS := $(TARGET_LDFLAGS) $(LOCAL_LDFLAGS)
353f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LDLIBS  := $(LOCAL_LDLIBS) $(TARGET_LDLIBS)
354f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
355f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_NAME := $(notdir $(LOCAL_BUILT_MODULE))
356d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_CXX := $(TARGET_CXX)
357d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_CC := $(TARGET_CC)
358d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_AR := $(TARGET_AR) $(TARGET_ARFLAGS)
3597a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_AR_OBJECTS := $(ar_objects)
360d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_SYSROOT := $(SYSROOT)
3618700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3628700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3638700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is a static library module
3648700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
365d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),STATIC_LIBRARY)
3668700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
367ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "StaticLibrary  : $(PRIVATE_NAME)"
368ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-rm,$@)
3698700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner	$(hide) $(cmd-build-static-library)
3708700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3718700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_STATIC_LIBRARIES += $(LOCAL_BUILT_MODULE)
3728700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3738700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3748700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3758700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is a shared library module
3768700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
377d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),SHARED_LIBRARY)
3788700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
379ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "SharedLibrary  : $(PRIVATE_NAME)"
3808700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner	$(hide) $(cmd-build-shared-library)
3818700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3828700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_SHARED_LIBRARIES += $(LOCAL_BUILT_MODULE)
3838700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3848700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3858700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3868700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is an executable module
3878700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
388d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),EXECUTABLE)
3898700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
390ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "Executable     : $(PRIVATE_NAME)"
3918700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner	$(hide) $(cmd-build-executable)
3928700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3938700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_EXECUTABLES += $(LOCAL_BUILT_MODULE)
3948700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3958700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3968700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3977a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# If this is a prebuilt module
3987a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
3997a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifeq ($(call module-is-prebuilt,$(LOCAL_MODULE)),$(true))
4007a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
401ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "Prebuilt       : $(PRIVATE_NAME) <= $(call pretty-dir,$(dir $<))"
402ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-cp,$<,$@)
4037a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
4047a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
4057a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
4068700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is an installable module
4078700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
4088700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerifeq ($(call module-is-installable,$(LOCAL_MODULE)),$(true))
4098700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): PRIVATE_NAME    := $(notdir $(LOCAL_BUILT_MODULE))
4108700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): PRIVATE_SRC     := $(LOCAL_BUILT_MODULE)
4118700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): PRIVATE_DST_DIR := $(NDK_APP_DST_DIR)
4128700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): PRIVATE_DST     := $(LOCAL_INSTALLED)
413d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_INSTALLED): PRIVATE_STRIP   := $(TARGET_STRIP)
4148700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
4158700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries
416ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@$(HOST_ECHO) "Install        : $(PRIVATE_NAME) => $(call pretty-dir,$(PRIVATE_DST))"
417ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))
4188700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner	$(hide) $(call cmd-strip, $(PRIVATE_DST))
419544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
420544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(call generate-dir,$(NDK_APP_DST_DIR))
421544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(LOCAL_INSTALLED): $(NDK_APP_DST_DIR)
422544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
4238700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
424