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),)
83b9239fd616cee2585e32b8c7119a938f7ff1e4b3David 'Digit' Turner  # Match the default GCC C++ extensions.
84b9239fd616cee2585e32b8c7119a938f7ff1e4b3David 'Digit' Turner  LOCAL_CPP_EXTENSION := .cc .cp .cxx .cpp .CPP .c++ .C
8548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
8848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
895bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# If LOCAL_ALLOW_UNDEFINED_SYMBOLS is not true, the linker will allow the generation
90494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner# of a binary that uses undefined symbols.
91494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner#
925bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifneq ($(LOCAL_ALLOW_UNDEFINED_SYMBOLS),true)
93c2cb1cc7609843440140c4e8794b76321f64cc40David 'Digit' Turner  LOCAL_LDFLAGS += $($(my)NO_UNDEFINED_LDFLAGS)
949c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turnerendif
959c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner
96ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# Toolchain by default disallows generated code running from the heap and stack.
97ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# If LOCAL_DISABLE_NO_EXECUTE is true, we allow that
989c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner#
99ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehifeq ($(LOCAL_DISABLE_NO_EXECUTE),true)
100ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_CFLAGS += $($(my)DISABLE_NO_EXECUTE_CFLAGS)
101ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_LDFLAGS += $($(my)DISABLE_NO_EXECUTE_LDFLAGS)
102ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehelse
1039c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner  LOCAL_CFLAGS += $($(my)NO_EXECUTE_CFLAGS)
1049c3e39c876850d29a4078e2cd9ba6926f55bd69dDavid 'Digit' Turner  LOCAL_LDFLAGS += $($(my)NO_EXECUTE_LDFLAGS)
105494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turnerendif
106494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner
107ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# Toolchain by default provides relro and GOT protections.
108ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh# If LOCAL_DISABLE_RELRO is true, we disable the protections.
109f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich#
110ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehifeq ($(LOCAL_DISABLE_RELRO),true)
111ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsieh  LOCAL_LDFLAGS += $($(my)DISABLE_RELRO_LDFLAGS)
112ed5bc4dd6c325a8f2193763161b1fc84250efa39Andrew Hsiehelse
113f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich  LOCAL_LDFLAGS += $($(my)RELRO_LDFLAGS)
114f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevichendif
115f74c373729bcd1519debe03cda90ef3fd3366848Nick Kralevich
116494598ad04b57a4e1dbaf6e529c5a8df1fe01c79David 'Digit' Turner#
11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# The original Android build system allows you to use the .arm prefix
11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# to a source file name to indicate that it should be defined in either
11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# 'thumb' or 'arm' mode, depending on the value of LOCAL_ARM_MODE
12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# First, check LOCAL_ARM_MODE, it should be empty, 'thumb' or 'arm'
12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# We make the default 'thumb'
12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
12448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE))
1255bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef LOCAL_ARM_MODE
12648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  ifneq ($(words $(LOCAL_ARM_MODE)),1)
127f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner      $(call __ndk_info,   LOCAL_ARM_MODE in $(LOCAL_MAKEFILE) must be one word, not '$(LOCAL_ARM_MODE)')
12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner      $(call __ndk_error, Aborting)
12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  endif
13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  # check that LOCAL_ARM_MODE is defined to either 'arm' or 'thumb'
13148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  $(if $(filter-out thumb arm, $(LOCAL_ARM_MODE)),\
132f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner      $(call __ndk_info,   LOCAL_ARM_MODE must be defined to either 'arm' or 'thumb' in $(LOCAL_MAKEFILE) not '$(LOCAL_ARM_MODE)')\
13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner      $(call __ndk_error, Aborting)\
13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  )
13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerendif
13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
13748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# As a special case, the original Android build system
13848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# allows one to specify that certain source files can be
13948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# forced to build in ARM mode by using a '.arm' suffix
14048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# after the extension, e.g.
14148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#  LOCAL_SRC_FILES := foo.c.arm
14348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# to build source file $(LOCAL_PATH)/foo.c as ARM
14548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
14648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
147151a2c81c79166122ae88d803de36e151c39b2cfDavid 'Digit' Turner$(call clear-all-src-tags)
148151a2c81c79166122ae88d803de36e151c39b2cfDavid 'Digit' Turner
1495bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# As a special extension, the NDK also supports the .neon extension suffix
1505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# to indicate that a single file can be compiled with ARM NEON support
1515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# We must support both foo.c.neon and foo.c.arm.neon here
15248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1535bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Also, if LOCAL_ARM_NEON is set to 'true', force Neon mode for all source
1545bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# files
15548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
15648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1575bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources  := $(filter %.neon,$(LOCAL_SRC_FILES))
1585bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources  := $(neon_sources:%.neon=%)
1595bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
1605bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' TurnerLOCAL_ARM_NEON := $(strip $(LOCAL_ARM_NEON))
1615bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef LOCAL_ARM_NEON
1625bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  $(if $(filter-out true false,$(LOCAL_ARM_NEON)),\
1635bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_info,LOCAL_ARM_NEON must be defined either to 'true' or 'false' in $(LOCAL_MAKEFILE), not '$(LOCAL_ARM_NEON)')\
1645bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_error,Aborting) \
1655bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  )
1665bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1675bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_NEON),true)
1687848118177898e00e54c0cbb8eb27e91997a4a9cDavid 'Digit' Turner  neon_sources += $(LOCAL_SRC_FILES:%.neon=%)
1690e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turnerendif
17048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1715bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerneon_sources := $(strip $(neon_sources))
1725bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifdef neon_sources
1735bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  ifneq ($(TARGET_ARCH_ABI),armeabi-v7a)
1745bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_info,NEON support is only possible for armeabi-v7a ABI)
175d49e5db44f5a514683ef600db88f8be0b40c3bfdDavid 'Digit' Turner    $(call __ndk_info,Please add checks against TARGET_ARCH_ABI in $(LOCAL_MAKEFILE))
1765bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    $(call __ndk_error,Aborting)
1775bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  endif
1785bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner  $(call tag-src-files,$(neon_sources:%.arm=%),neon)
1795bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
18048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1815bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' TurnerLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.neon=%)
18248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1835bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# strip the .arm suffix from LOCAL_SRC_FILES
1845bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# and tag the relevant sources with the 'arm' tag
1855bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
1865bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerarm_sources     := $(filter %.arm,$(LOCAL_SRC_FILES))
1875bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerarm_sources     := $(arm_sources:%.arm=%)
1885bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerthumb_sources   := $(filter-out %.arm,$(LOCAL_SRC_FILES))
18993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_SRC_FILES := $(LOCAL_SRC_FILES:%.arm=%)
19048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
1915bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_MODE),arm)
1925bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    arm_sources := $(LOCAL_SRC_FILES)
1935bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1945bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerifeq ($(LOCAL_ARM_MODE),thumb)
1955bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner    arm_sources := $(empty)
1965bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turnerendif
1975bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(call tag-src-files,$(arm_sources),arm)
1985bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
1995bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Process all source file tags to determine toolchain-specific
2005bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# target compiler flags, and text.
2010e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner#
2025bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner$(call TARGET-process-src-files-tags)
2030e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner
2045bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# only call dump-src-file-tags during debugging
2055bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#$(dump-src-file-tags)
2065bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner
2075171bb2f0f68965677f11da882a956c59c8b9c72David 'Digit' TurnerLOCAL_DEPENDENCY_DIRS :=
20893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
20993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# all_source_patterns contains the list of filename patterns that correspond
21093acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# to source files recognized by our build system
21193acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerall_source_extensions := .c .s .S $(LOCAL_CPP_EXTENSION)
21293acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerall_source_patterns   := $(foreach _ext,$(all_source_extensions),%$(_ext))
213c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turnerall_cpp_patterns      := $(foreach _ext,$(LOCAL_CPP_EXTENSION),%$(_ext))
21493acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
21593acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerunknown_sources := $(strip $(filter-out $(all_source_patterns),$(LOCAL_SRC_FILES)))
21693acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerifdef unknown_sources
21793acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(call __ndk_info,WARNING: Unsupported source file extensions in $(LOCAL_MAKEFILE) for module $(LOCAL_MODULE))
21893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(call __ndk_info,  $(unknown_sources))
21993acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turnerendif
22093acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner
22193acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# LOCAL_OBJECTS will list all object files corresponding to the sources
22293acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner# listed in LOCAL_SRC_FILES, in the *same* order.
22393acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner#
22493acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(LOCAL_SRC_FILES)
22593acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner$(foreach _ext,$(all_source_extensions),\
22693acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner    $(eval LOCAL_OBJECTS := $$(LOCAL_OBJECTS:%$(_ext)=%.o))\
22793acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' Turner)
22893acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(filter %.o,$(LOCAL_OBJECTS))
229c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' TurnerLOCAL_OBJECTS := $(subst ../,__/,$(LOCAL_OBJECTS))
23093acba5133ede31bc20a2fb5e48ac68dc8b10ed5David 'Digit' TurnerLOCAL_OBJECTS := $(foreach _obj,$(LOCAL_OBJECTS),$(LOCAL_OBJS_DIR)/$(_obj))
2315171bb2f0f68965677f11da882a956c59c8b9c72David 'Digit' Turner
232c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# If the module has any kind of C++ features, enable them in LOCAL_CPPFLAGS
233c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner#
234c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti))
235c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    LOCAL_CPPFLAGS += -frtti
236c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
237c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),exceptions))
238c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    LOCAL_CPPFLAGS += -fexceptions
239c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
240c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner
241c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# If we're using the 'system' STL and use rtti or exceptions, then
242c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner# automatically link against the GNU libsupc++ for now.
243c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner#
244f2c6c623ae6aae0b9b82a4433326a01c95da6f4cDavid 'Digit' Turnerifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti exceptions))
245c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    ifeq (system,$(NDK_APP_STL))
2460136e5405c99a3fbe1be109ee8ff186475c0d99aAndrew Hsieh      LOCAL_LDLIBS := $(LOCAL_LDLIBS) $(call host-path,$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(TOOLCHAIN_VERSION)/libs/$(TARGET_ARCH_ABI)/libsupc++.a)
247c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner    endif
248c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turnerendif
249c55bfcf671107b1b678f5a66a3ec74cbeb3927cbDavid 'Digit' Turner
2505bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner# Build the sources to object files
2515bc892834ff140ef11625fdf7602d09e229f73dcDavid 'Digit' Turner#
252f2f883c9f5d1057b585f2490ffb12800d166e9f4David 'Digit' Turner
253c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter %.c,$(LOCAL_SRC_FILES)), $(call compile-c-source,$(src),$(call get-object-name,$(src))))
254c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter %.S %.s,$(LOCAL_SRC_FILES)), $(call compile-s-source,$(src),$(call get-object-name,$(src))))
2550e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner
256c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner$(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\
257c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner    $(call compile-cpp-source,$(src),$(call get-object-name,$(src)))\
258c6faf8bffb4884b59265aadcbaa22c8026c41649David 'Digit' Turner)
25948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2610e3db4dad04bba1a6aed5ad15489999078d0361dDavid 'Digit' Turner# The compile-xxx-source calls updated LOCAL_OBJECTS and LOCAL_DEPENDENCY_DIRS
26248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
263a85825c5a2b3427e0361c5bf42e9df5c50f58b66David 'Digit' TurnerALL_DEPENDENCY_DIRS += $(sort $(LOCAL_DEPENDENCY_DIRS))
264a85825c5a2b3427e0361c5bf42e9df5c50f58b66David 'Digit' TurnerCLEAN_OBJS_DIRS     += $(LOCAL_OBJS_DIR)
265f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
266f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
267f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# Handle the static and shared libraries this module depends on
268f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
269b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_STATIC_LIBRARIES       := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
270b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_WHOLE_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_WHOLE_STATIC_LIBRARIES))
271b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' TurnerLOCAL_SHARED_LIBRARIES       := $(call strip-lib-prefix,$(LOCAL_SHARED_LIBRARIES))
272b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner
2731208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner# Transitive closure of static libraries
2741208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' TurnerLOCAL_STATIC_LIBRARIES       := $(call module-get-depends,$(LOCAL_STATIC_LIBRARIES),STATIC_LIBRARIES)
2751208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' TurnerLOCAL_WHOLE_STATIC_LIBRARIES := $(call module-get-depends,$(LOCAL_WHOLE_STATIC_LIBRARIES),WHOLE_STATIC_LIBRARIES)
2761208fe621223ae853a954fd0e0aaf0b0ed46ecdaDavid 'Digit' Turner
277b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turnerstatic_libraries       := $(call map,module-get-built,$(LOCAL_STATIC_LIBRARIES))
278b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turnerwhole_static_libraries := $(call map,module-get-built,$(LOCAL_WHOLE_STATIC_LIBRARIES))
279f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
280bb9dc1a386532db74f47dd0af1930b27e8402926David 'Digit' Turnershared_libraries := $(call map,module-get-built,$(LOCAL_SHARED_LIBRARIES))\
281f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner                    $(TARGET_PREBUILT_SHARED_LIBRARIES)
282f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
283b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(static_libraries) $(whole_static_libraries) $(shared_libraries)
284f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
285f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# If LOCAL_LDLIBS contains anything like -l<library> then
286f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# prepend a -L$(SYSROOT)/usr/lib to it to ensure that the linker
287f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner# looks in the right location
288f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner#
289f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turnerifneq ($(filter -l%,$(LOCAL_LDLIBS)),)
2901579cd933a0e3a1bdd494a312fb5b9e75a03be87David 'Digit' Turner    LOCAL_LDLIBS := -L$(call host-path,$(SYSROOT)/usr/lib) $(LOCAL_LDLIBS)
291f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turnerendif
292f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
2937a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# The list of object/static/shared libraries passed to the linker when
2947a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# building shared libraries and executables. order is important.
2957a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
2967a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerlinker_objects_and_libraries := $(strip $(call TARGET-get-linker-objects-and-libraries,\
2977a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(LOCAL_OBJECTS), \
2987a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(static_libraries), \
2997a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(whole_static_libraries), \
3007a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    $(shared_libraries)))
3017a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3027a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# The list of object files sent to 'ar' when building static libraries
3037a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3047a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerar_objects := $(call host-path,$(LOCAL_OBJECTS))
3057a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3067a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# When LOCAL_SHORT_COMMANDS is defined to 'true' we are going to write the
3077a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# list of all object files and/or static/shared libraries that appear on the
3087a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# command line to a file, then use the @<listfile> syntax to invoke it.
3097a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3107a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# This allows us to link or archive a huge number of stuff even on Windows
3117a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner# with its puny 8192 max character limit on its command-line.
3127a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner#
3137a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' TurnerLOCAL_SHORT_COMMANDS := $(strip $(LOCAL_SHORT_COMMANDS))
3147a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerifndef LOCAL_SHORT_COMMANDS
3157a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    LOCAL_SHORT_COMMANDS := $(strip $(NDK_APP_SHORT_COMMANDS))
3167a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif
317488e22a37f47c49be48a0f2f877298dd5fd0d1c9Andrew Hsiehifeq ($(LOCAL_SHORT_COMMANDS),true)
3187a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    # For static and whole static libraries
3197a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    ifneq (,$(filter STATIC_LIBRARY WHOLE_STATIC_LIBRARY,$(call module-get-class,$(LOCAL_MODULE))))
3207a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call ndk_log,Building static library module '$(LOCAL_MODULE)' with linker list file)
3217a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        ar_options   := $(ar_objects)
3227a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        ar_list_file := $(LOCAL_OBJS_DIR)/archiver.list
323488e22a37f47c49be48a0f2f877298dd5fd0d1c9Andrew Hsieh        ar_objects   := @$(call host-path,$(ar_list_file))
3247a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call generate-list-file,$(ar_options),$(ar_list_file))
3257a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3267a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(LOCAL_BUILT_MODULE): $(ar_list_file)
3277a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    endif
3287a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3297a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    # For shared libraries and executables
3307a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    ifneq (,$(filter SHARED_LIBRARY EXECUTABLE,$(call module-get-class,$(LOCAL_MODULE))))
3317a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call ndk_log,Building ELF binary module '$(LOCAL_MODULE)' with linker list file)
3327a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_options   := $(linker_objects_and_libraries)
3337a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_list_file := $(LOCAL_OBJS_DIR)/linker.list
3347a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        linker_objects_and_libraries := @$(call host-path,$(linker_list_file))
3357a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3367a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(call generate-list-file,$(linker_options),$(linker_list_file))
3377a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3387a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner        $(LOCAL_BUILT_MODULE): $(linker_list_file)
3397a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner    endif
3407a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
3417a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turnerendif
3427a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner
343544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(call generate-file-dir,$(LOCAL_BUILT_MODULE))
344544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
345f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
346b1a60f32cc6b482c1209e1d53e773add926dc520David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(whole_static_libraries)
347f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_SHARED_LIBRARIES := $(shared_libraries)
348f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_OBJECTS          := $(LOCAL_OBJECTS)
3497a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LINKER_OBJECTS_AND_LIBRARIES := $(linker_objects_and_libraries)
350d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LIBGCC := $(TARGET_LIBGCC)
351f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
352d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LD := $(TARGET_LD)
353f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LDFLAGS := $(TARGET_LDFLAGS) $(LOCAL_LDFLAGS)
354f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_LDLIBS  := $(LOCAL_LDLIBS) $(TARGET_LDLIBS)
355f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner
356f5107032a58fc88cea9a2bb1211b1f7d9e9eeccbDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_NAME := $(notdir $(LOCAL_BUILT_MODULE))
357d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_CXX := $(TARGET_CXX)
358d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_CC := $(TARGET_CC)
359d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_AR := $(TARGET_AR) $(TARGET_ARFLAGS)
3607a06c124be094134d81920a8f9fe363f6f30abd1David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_AR_OBJECTS := $(ar_objects)
361d7ea04d2f4b44b72732ecadbb14ae0e866cd5465David 'Digit' Turner$(LOCAL_BUILT_MODULE): PRIVATE_SYSROOT := $(SYSROOT)
36219c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_SHARED_LIB := $(cmd-build-shared-library)
36319c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_STATIC_LIB := $(cmd-build-static-library)
36419c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_BUILT_MODULE): PRIVATE_BUILD_EXECUTABLE := $(cmd-build-executable)
3658700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3668700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3678700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is a static library module
3688700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
369d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),STATIC_LIBRARY)
3708700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
371ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "StaticLibrary  : $(PRIVATE_NAME)"
372ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-rm,$@)
37319c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin	$(hide) $(PRIVATE_BUILD_STATIC_LIB)
3748700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3758700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_STATIC_LIBRARIES += $(LOCAL_BUILT_MODULE)
3768700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3778700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3788700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3798700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is a shared library module
3808700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
381d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),SHARED_LIBRARY)
3828700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
383ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "SharedLibrary  : $(PRIVATE_NAME)"
38419c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin	$(hide) $(PRIVATE_BUILD_SHARED_LIB)
3858700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3868700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_SHARED_LIBRARIES += $(LOCAL_BUILT_MODULE)
3878700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3888700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3898700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
3908700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is an executable module
3918700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
392d9851e70410ee5b14f5e9b772dd015e44a558c89David 'Digit' Turnerifeq ($(call module-get-class,$(LOCAL_MODULE)),EXECUTABLE)
3938700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
394ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "Executable     : $(PRIVATE_NAME)"
39519c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin	$(hide) $(PRIVATE_BUILD_EXECUTABLE)
3968700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
3978700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' TurnerALL_EXECUTABLES += $(LOCAL_BUILT_MODULE)
3988700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
3998700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
4008700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
4017a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner# If this is a prebuilt module
4027a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
4037a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerifeq ($(call module-is-prebuilt,$(LOCAL_MODULE)),$(true))
4047a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner$(LOCAL_BUILT_MODULE): $(LOCAL_OBJECTS)
405ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@ $(HOST_ECHO) "Prebuilt       : $(PRIVATE_NAME) <= $(call pretty-dir,$(dir $<))"
406ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-cp,$<,$@)
4077a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turnerendif
4087a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner
4097a6b17ae18e87e522a4449eff37800421a8bb6abDavid 'Digit' Turner#
4108700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner# If this is an installable module
4118700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner#
4128700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerifeq ($(call module-is-installable,$(LOCAL_MODULE)),$(true))
41319c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_NAME      := $(notdir $(LOCAL_BUILT_MODULE))
41419c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_SRC       := $(LOCAL_BUILT_MODULE)
41519c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_DST_DIR   := $(NDK_APP_DST_DIR)
41619c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_DST       := $(LOCAL_INSTALLED)
41719c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_STRIP     := $(TARGET_STRIP)
41819c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin$(LOCAL_INSTALLED): PRIVATE_STRIP_CMD := $(call cmd-strip, $(PRIVATE_DST))
4198700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner
4208700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turner$(LOCAL_INSTALLED): $(LOCAL_BUILT_MODULE) clean-installed-binaries
421ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	@$(HOST_ECHO) "Install        : $(PRIVATE_NAME) => $(call pretty-dir,$(PRIVATE_DST))"
422ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner	$(hide) $(call host-install,$(PRIVATE_SRC),$(PRIVATE_DST))
42319c0e0ecefd43a3e24a4b13eddea8303cc75c4ecJason Lin	$(hide) $(PRIVATE_STRIP_CMD)
424544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
425544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(call generate-dir,$(NDK_APP_DST_DIR))
426544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner$(LOCAL_INSTALLED): $(NDK_APP_DST_DIR)
427544ecbef57ecf42fbe8a99a1a6cd6816a347f587David 'Digit' Turner
4288700ca93c26e2908670a9982c68f4b8a2bf7dce4David 'Digit' Turnerendif
429