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