binary.mk revision 1a08100fa9d92c25de32ba4d13fd3958bbcab894
1########################################################### 2## Standard rules for building binary object files from 3## asm/c/cpp/yacc/lex source files. 4## 5## The list of object files is exported in $(all_objects). 6########################################################### 7 8###################################### 9## Sanity check for LOCAL_NDK_VERSION 10###################################### 11my_ndk_version_root := 12ifdef LOCAL_NDK_VERSION 13 ifdef LOCAL_IS_HOST_MODULE 14 $(error $(LOCAL_PATH): LOCAL_NDK_VERSION can not be used in host module) 15 endif 16 ifneq ($(filter-out SHARED_LIBRARIES STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)),) 17 $(error $(LOCAL_PATH): LOCAL_NDK_VERSION can only be used to build target shared/static libraries, \ 18 while your module is of class $(LOCAL_MODULE_CLASS)) 19 endif 20 ifeq ($(filter $(LOCAL_NDK_VERSION),$(TARGET_AVAILABLE_NDK_VERSIONS)),) 21 $(error $(LOCAL_PATH): Invalid LOCAL_NDK_VERSION '$(LOCAL_NDK_VERSION)' \ 22 Choices are $(TARGET_AVAILABLE_NDK_VERSIONS)) 23 endif 24 ifndef LOCAL_SDK_VERSION 25 $(error $(LOCAL_PATH): LOCAL_NDK_VERSION must be defined with LOCAL_SDK_VERSION) 26 endif 27 my_ndk_version_root := $(HISTORICAL_NDK_VERSIONS_ROOT)/android-ndk-r$(LOCAL_NDK_VERSION)/$(BUILD_OS)/platforms/android-$(LOCAL_SDK_VERSION)/arch-$(TARGET_ARCH) 28 ifeq ($(wildcard $(my_ndk_version_root)),) 29 $(error $(LOCAL_PATH): ndk version root does not exist: $(my_ndk_version_root)) 30 endif 31endif 32 33####################################### 34include $(BUILD_SYSTEM)/base_rules.mk 35####################################### 36 37#################################################### 38## Add FDO flags if FDO is turned on and supported 39#################################################### 40ifeq ($(strip $(LOCAL_NO_FDO_SUPPORT)),) 41 LOCAL_CFLAGS += $(TARGET_FDO_CFLAGS) 42 LOCAL_CPPFLAGS += $(TARGET_FDO_CFLAGS) 43 LOCAL_LDFLAGS += $(TARGET_FDO_CFLAGS) 44endif 45 46########################################################### 47## Define PRIVATE_ variables from global vars 48########################################################### 49ifdef LOCAL_NDK_VERSION 50my_target_project_includes := 51my_target_c_inclues := $(my_ndk_version_root)/usr/include 52# TODO: more reliable way to remove platform stuff. 53my_target_global_cflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CFLAGS)) 54my_target_global_cppflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CPPFLAGS)) 55else 56my_target_project_includes := $(TARGET_PROJECT_INCLUDES) 57my_target_c_inclues := $(TARGET_C_INCLUDES) 58my_target_global_cflags := $(TARGET_GLOBAL_CFLAGS) 59my_target_global_cppflags := $(TARGET_GLOBAL_CPPFLAGS) 60endif 61$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_PROJECT_INCLUDES := $(my_target_project_includes) 62$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_C_INCLUDES := $(my_target_c_inclues) 63$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(my_target_global_cflags) 64$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CPPFLAGS := $(my_target_global_cppflags) 65 66########################################################### 67## Define PRIVATE_ variables used by multiple module types 68########################################################### 69$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_NO_DEFAULT_COMPILER_FLAGS := \ 70 $(strip $(LOCAL_NO_DEFAULT_COMPILER_FLAGS)) 71 72ifeq ($(strip $(LOCAL_CC)),) 73 LOCAL_CC := $($(my_prefix)CC) 74endif 75$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CC := $(LOCAL_CC) 76 77ifeq ($(strip $(LOCAL_CXX)),) 78 LOCAL_CXX := $($(my_prefix)CXX) 79endif 80$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CXX := $(LOCAL_CXX) 81 82# TODO: support a mix of standard extensions so that this isn't necessary 83LOCAL_CPP_EXTENSION := $(strip $(LOCAL_CPP_EXTENSION)) 84ifeq ($(LOCAL_CPP_EXTENSION),) 85 LOCAL_CPP_EXTENSION := .cpp 86endif 87$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CPP_EXTENSION := $(LOCAL_CPP_EXTENSION) 88 89# Certain modules like libdl have to have symbols resolved at runtime and blow 90# up if --no-undefined is passed to the linker. 91ifeq ($(strip $(LOCAL_NO_DEFAULT_COMPILER_FLAGS)),) 92ifeq ($(strip $(LOCAL_ALLOW_UNDEFINED_SYMBOLS)),) 93 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS) $($(my_prefix)NO_UNDEFINED_LDFLAGS) 94endif 95endif 96 97########################################################### 98## Define arm-vs-thumb-mode flags. 99########################################################### 100LOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE)) 101arm_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),arm) 102normal_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),thumb) 103 104# Read the values from something like TARGET_arm_CFLAGS or 105# TARGET_thumb_CFLAGS. HOST_(arm|thumb)_CFLAGS values aren't 106# actually used (although they are usually empty). 107arm_objects_cflags := $($(my_prefix)$(arm_objects_mode)_CFLAGS) 108normal_objects_cflags := $($(my_prefix)$(normal_objects_mode)_CFLAGS) 109 110########################################################### 111## Define per-module debugging flags. Users can turn on 112## debugging for a particular module by setting DEBUG_MODULE_ModuleName 113## to a non-empty value in their environment or buildspec.mk, 114## and setting HOST_/TARGET_CUSTOM_DEBUG_CFLAGS to the 115## debug flags that they want to use. 116########################################################### 117ifdef DEBUG_MODULE_$(strip $(LOCAL_MODULE)) 118 debug_cflags := $($(my_prefix)CUSTOM_DEBUG_CFLAGS) 119else 120 debug_cflags := 121endif 122 123########################################################### 124## Stuff source generated from one-off tools 125########################################################### 126$(LOCAL_GENERATED_SOURCES): PRIVATE_MODULE := $(LOCAL_MODULE) 127 128ALL_GENERATED_SOURCES += $(LOCAL_GENERATED_SOURCES) 129 130 131########################################################### 132## YACC: Compile .y files to .cpp and the to .o. 133########################################################### 134 135yacc_sources := $(filter %.y,$(LOCAL_SRC_FILES)) 136yacc_cpps := $(addprefix \ 137 $(intermediates)/,$(yacc_sources:.y=$(LOCAL_CPP_EXTENSION))) 138yacc_headers := $(yacc_cpps:$(LOCAL_CPP_EXTENSION)=.h) 139yacc_objects := $(yacc_cpps:$(LOCAL_CPP_EXTENSION)=.o) 140 141ifneq ($(strip $(yacc_cpps)),) 142$(yacc_cpps): $(intermediates)/%$(LOCAL_CPP_EXTENSION): \ 143 $(TOPDIR)$(LOCAL_PATH)/%.y \ 144 $(lex_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES) 145 $(call transform-y-to-cpp,$(PRIVATE_CPP_EXTENSION)) 146$(yacc_headers): $(intermediates)/%.h: $(intermediates)/%$(LOCAL_CPP_EXTENSION) 147 148$(yacc_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 149$(yacc_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 150$(yacc_objects): $(intermediates)/%.o: $(intermediates)/%$(LOCAL_CPP_EXTENSION) 151 $(transform-$(PRIVATE_HOST)cpp-to-o) 152endif 153 154########################################################### 155## LEX: Compile .l files to .cpp and then to .o. 156########################################################### 157 158lex_sources := $(filter %.l,$(LOCAL_SRC_FILES)) 159lex_cpps := $(addprefix \ 160 $(intermediates)/,$(lex_sources:.l=$(LOCAL_CPP_EXTENSION))) 161lex_objects := $(lex_cpps:$(LOCAL_CPP_EXTENSION)=.o) 162 163ifneq ($(strip $(lex_cpps)),) 164$(lex_cpps): $(intermediates)/%$(LOCAL_CPP_EXTENSION): \ 165 $(TOPDIR)$(LOCAL_PATH)/%.l 166 $(transform-l-to-cpp) 167 168$(lex_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 169$(lex_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 170$(lex_objects): $(intermediates)/%.o: \ 171 $(intermediates)/%$(LOCAL_CPP_EXTENSION) \ 172 $(LOCAL_ADDITIONAL_DEPENDENCIES) \ 173 $(yacc_headers) 174 $(transform-$(PRIVATE_HOST)cpp-to-o) 175endif 176 177########################################################### 178## C++: Compile .cpp files to .o. 179########################################################### 180 181# we also do this on host modules and sim builds, even though 182# it's not really arm, because there are files that are shared. 183cpp_arm_sources := $(patsubst %$(LOCAL_CPP_EXTENSION).arm,%$(LOCAL_CPP_EXTENSION),$(filter %$(LOCAL_CPP_EXTENSION).arm,$(LOCAL_SRC_FILES))) 184cpp_arm_objects := $(addprefix $(intermediates)/,$(cpp_arm_sources:$(LOCAL_CPP_EXTENSION)=.o)) 185 186cpp_normal_sources := $(filter %$(LOCAL_CPP_EXTENSION),$(LOCAL_SRC_FILES)) 187cpp_normal_objects := $(addprefix $(intermediates)/,$(cpp_normal_sources:$(LOCAL_CPP_EXTENSION)=.o)) 188 189$(cpp_arm_objects): PRIVATE_ARM_MODE := $(arm_objects_mode) 190$(cpp_arm_objects): PRIVATE_ARM_CFLAGS := $(arm_objects_cflags) 191$(cpp_normal_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 192$(cpp_normal_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 193 194cpp_objects := $(cpp_arm_objects) $(cpp_normal_objects) 195 196ifneq ($(strip $(cpp_objects)),) 197$(cpp_objects): $(intermediates)/%.o: \ 198 $(TOPDIR)$(LOCAL_PATH)/%$(LOCAL_CPP_EXTENSION) \ 199 $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES) 200 $(transform-$(PRIVATE_HOST)cpp-to-o) 201-include $(cpp_objects:%.o=%.P) 202endif 203 204########################################################### 205## C++: Compile generated .cpp files to .o. 206########################################################### 207 208gen_cpp_sources := $(filter %$(LOCAL_CPP_EXTENSION),$(LOCAL_GENERATED_SOURCES)) 209gen_cpp_objects := $(gen_cpp_sources:%$(LOCAL_CPP_EXTENSION)=%.o) 210 211ifneq ($(strip $(gen_cpp_objects)),) 212# Compile all generated files as thumb. 213# TODO: support compiling certain generated files as arm. 214$(gen_cpp_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 215$(gen_cpp_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 216$(gen_cpp_objects): $(intermediates)/%.o: $(intermediates)/%$(LOCAL_CPP_EXTENSION) $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES) 217 $(transform-$(PRIVATE_HOST)cpp-to-o) 218-include $(gen_cpp_objects:%.o=%.P) 219endif 220 221########################################################### 222## S: Compile generated .S and .s files to .o. 223########################################################### 224 225gen_S_sources := $(filter %.S,$(LOCAL_GENERATED_SOURCES)) 226gen_S_objects := $(gen_S_sources:%.S=%.o) 227 228ifneq ($(strip $(gen_S_sources)),) 229$(gen_S_objects): $(intermediates)/%.o: $(intermediates)/%.S $(LOCAL_ADDITIONAL_DEPENDENCIES) 230 $(transform-$(PRIVATE_HOST)s-to-o) 231-include $(gen_S_objects:%.o=%.P) 232endif 233 234gen_s_sources := $(filter %.s,$(LOCAL_GENERATED_SOURCES)) 235gen_s_objects := $(gen_s_sources:%.s=%.o) 236 237ifneq ($(strip $(gen_s_objects)),) 238$(gen_s_objects): $(intermediates)/%.o: $(intermediates)/%.s $(LOCAL_ADDITIONAL_DEPENDENCIES) 239 $(transform-$(PRIVATE_HOST)s-to-o-no-deps) 240-include $(gen_s_objects:%.o=%.P) 241endif 242 243gen_asm_objects := $(gen_S_objects) $(gen_s_objects) 244 245########################################################### 246## C: Compile .c files to .o. 247########################################################### 248 249c_arm_sources := $(patsubst %.c.arm,%.c,$(filter %.c.arm,$(LOCAL_SRC_FILES))) 250c_arm_objects := $(addprefix $(intermediates)/,$(c_arm_sources:.c=.o)) 251 252c_normal_sources := $(filter %.c,$(LOCAL_SRC_FILES)) 253c_normal_objects := $(addprefix $(intermediates)/,$(c_normal_sources:.c=.o)) 254 255$(c_arm_objects): PRIVATE_ARM_MODE := $(arm_objects_mode) 256$(c_arm_objects): PRIVATE_ARM_CFLAGS := $(arm_objects_cflags) 257$(c_normal_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 258$(c_normal_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 259 260c_objects := $(c_arm_objects) $(c_normal_objects) 261 262ifneq ($(strip $(c_objects)),) 263$(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES) 264 $(transform-$(PRIVATE_HOST)c-to-o) 265-include $(c_objects:%.o=%.P) 266endif 267 268########################################################### 269## C: Compile generated .c files to .o. 270########################################################### 271 272gen_c_sources := $(filter %.c,$(LOCAL_GENERATED_SOURCES)) 273gen_c_objects := $(gen_c_sources:%.c=%.o) 274 275ifneq ($(strip $(gen_c_objects)),) 276# Compile all generated files as thumb. 277# TODO: support compiling certain generated files as arm. 278$(gen_c_objects): PRIVATE_ARM_MODE := $(normal_objects_mode) 279$(gen_c_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags) 280$(gen_c_objects): $(intermediates)/%.o: $(intermediates)/%.c $(yacc_cpps) $(LOCAL_ADDITIONAL_DEPENDENCIES) 281 $(transform-$(PRIVATE_HOST)c-to-o) 282-include $(gen_c_objects:%.o=%.P) 283endif 284 285########################################################### 286## ObjC: Compile .m files to .o 287########################################################### 288 289objc_sources := $(filter %.m,$(LOCAL_SRC_FILES)) 290objc_objects := $(addprefix $(intermediates)/,$(objc_sources:.m=.o)) 291 292ifneq ($(strip $(objc_objects)),) 293$(objc_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.m $(yacc_cpps) $(PRIVATE_ADDITIONAL_DEPENDENCIES) 294 $(transform-$(PRIVATE_HOST)m-to-o) 295-include $(objc_objects:%.o=%.P) 296endif 297 298########################################################### 299## AS: Compile .S files to .o. 300########################################################### 301 302asm_sources_S := $(filter %.S,$(LOCAL_SRC_FILES)) 303asm_objects_S := $(addprefix $(intermediates)/,$(asm_sources_S:.S=.o)) 304 305ifneq ($(strip $(asm_objects_S)),) 306$(asm_objects_S): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.S $(LOCAL_ADDITIONAL_DEPENDENCIES) 307 $(transform-$(PRIVATE_HOST)s-to-o) 308-include $(asm_objects_S:%.o=%.P) 309endif 310 311asm_sources_s := $(filter %.s,$(LOCAL_SRC_FILES)) 312asm_objects_s := $(addprefix $(intermediates)/,$(asm_sources_s:.s=.o)) 313 314ifneq ($(strip $(asm_objects_s)),) 315$(asm_objects_s): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.s $(LOCAL_ADDITIONAL_DEPENDENCIES) 316 $(transform-$(PRIVATE_HOST)s-to-o-no-deps) 317-include $(asm_objects_s:%.o=%.P) 318endif 319 320asm_objects := $(asm_objects_S) $(asm_objects_s) 321 322 323########################################################### 324## Common object handling. 325########################################################### 326 327# some rules depend on asm_objects being first. If your code depends on 328# being first, it's reasonable to require it to be assembly 329all_objects := \ 330 $(asm_objects) \ 331 $(cpp_objects) \ 332 $(gen_cpp_objects) \ 333 $(gen_asm_objects) \ 334 $(c_objects) \ 335 $(gen_c_objects) \ 336 $(yacc_objects) \ 337 $(lex_objects) \ 338 $(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES)) 339 340LOCAL_C_INCLUDES += $(TOPDIR)$(LOCAL_PATH) $(intermediates) $(base_intermediates) 341 342$(all_objects) : | $(LOCAL_GENERATED_SOURCES) 343ALL_C_CPP_ETC_OBJECTS += $(all_objects) 344 345########################################################### 346## Copy headers to the install tree 347########################################################### 348include $(BUILD_COPY_HEADERS) 349 350########################################################### 351# Standard library handling. 352# 353# On the target, we compile with -nostdlib, so we must add in the 354# default system shared libraries, unless they have requested not 355# to by supplying a LOCAL_SYSTEM_SHARED_LIBRARIES value. One would 356# supply that, for example, when building libc itself. 357########################################################### 358ifdef LOCAL_IS_HOST_MODULE 359 ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) 360 LOCAL_SYSTEM_SHARED_LIBRARIES := 361 endif 362else 363 ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) 364 LOCAL_SYSTEM_SHARED_LIBRARIES := $($(my_prefix)DEFAULT_SYSTEM_SHARED_LIBRARIES) 365 endif 366endif 367 368# Logging used to be part of libcutils (target) and libutils (sim); 369# hack modules that use those other libs to also include liblog. 370# All of this complexity is to make sure that liblog only appears 371# once, and appears just before libcutils or libutils on the link 372# line. 373# TODO: remove this hack and change all modules to use liblog 374# when necessary. 375define insert-liblog 376 $(if $(filter liblog,$(1)),$(1), \ 377 $(if $(filter libcutils,$(1)), \ 378 $(patsubst libcutils,liblog libcutils,$(1)) \ 379 , \ 380 $(patsubst libutils,liblog libutils,$(1)) \ 381 ) \ 382 ) 383endef 384ifneq (,$(filter libcutils libutils,$(LOCAL_SHARED_LIBRARIES))) 385 LOCAL_SHARED_LIBRARIES := $(call insert-liblog,$(LOCAL_SHARED_LIBRARIES)) 386endif 387ifneq (,$(filter libcutils libutils,$(LOCAL_STATIC_LIBRARIES))) 388 LOCAL_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_STATIC_LIBRARIES)) 389endif 390ifneq (,$(filter libcutils libutils,$(LOCAL_WHOLE_STATIC_LIBRARIES))) 391 LOCAL_WHOLE_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_WHOLE_STATIC_LIBRARIES)) 392endif 393 394########################################################### 395# The list of libraries that this module will link against are in 396# these variables. Each is a list of bare module names like "libc libm". 397# 398# LOCAL_SHARED_LIBRARIES 399# LOCAL_STATIC_LIBRARIES 400# LOCAL_WHOLE_STATIC_LIBRARIES 401# 402# We need to convert the bare names into the dependencies that 403# we'll use for LOCAL_BUILT_MODULE and LOCAL_INSTALLED_MODULE. 404# LOCAL_BUILT_MODULE should depend on the BUILT versions of the 405# libraries, so that simply building this module doesn't force 406# an install of a library. Similarly, LOCAL_INSTALLED_MODULE 407# should depend on the INSTALLED versions of the libraries so 408# that they get installed when this module does. 409########################################################### 410# NOTE: 411# WHOLE_STATIC_LIBRARIES are libraries that are pulled into the 412# module without leaving anything out, which is useful for turning 413# a collection of .a files into a .so file. Linking against a 414# normal STATIC_LIBRARY will only pull in code/symbols that are 415# referenced by the module. (see gcc/ld's --whole-archive option) 416########################################################### 417 418# Get the list of BUILT libraries, which are under 419# various intermediates directories. 420so_suffix := $($(my_prefix)SHLIB_SUFFIX) 421a_suffix := $($(my_prefix)STATIC_LIB_SUFFIX) 422 423ifdef LOCAL_NDK_VERSION 424built_shared_libraries := \ 425 $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ 426 $(addsuffix $(so_suffix), \ 427 $(LOCAL_SHARED_LIBRARIES))) 428 429# Get the list of INSTALLED libraries. Strip off the various 430# intermediates directories and point to the common lib dirs. 431installed_shared_libraries := \ 432 $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \ 433 $(notdir $(built_shared_libraries))) 434 435my_system_shared_libraries_fullpath := $(addprefix $(my_ndk_version_root)/usr/lib/, \ 436 $(addsuffix $(so_suffix), $(LOCAL_SYSTEM_SHARED_LIBRARIES))) 437 438built_shared_libraries += $(my_system_shared_libraries_fullpath) 439LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES) 440else 441LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES) 442built_shared_libraries := \ 443 $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ 444 $(addsuffix $(so_suffix), \ 445 $(LOCAL_SHARED_LIBRARIES))) 446 447installed_shared_libraries := \ 448 $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \ 449 $(notdir $(built_shared_libraries))) 450endif 451 452built_static_libraries := \ 453 $(foreach lib,$(LOCAL_STATIC_LIBRARIES), \ 454 $(call intermediates-dir-for, \ 455 STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/$(lib)$(a_suffix)) 456 457built_whole_libraries := \ 458 $(foreach lib,$(LOCAL_WHOLE_STATIC_LIBRARIES), \ 459 $(call intermediates-dir-for, \ 460 STATIC_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE))/$(lib)$(a_suffix)) 461 462# We don't care about installed static libraries, since the 463# libraries have already been linked into the module at that point. 464# We do, however, care about the NOTICE files for any static 465# libraries that we use. (see notice_files.make) 466 467installed_static_library_notice_file_targets := \ 468 $(foreach lib,$(LOCAL_STATIC_LIBRARIES) $(LOCAL_WHOLE_STATIC_LIBRARIES), \ 469 NOTICE-$(if $(LOCAL_IS_HOST_MODULE),HOST,TARGET)-STATIC_LIBRARIES-$(lib)) 470 471########################################################### 472# Rule-specific variable definitions 473########################################################### 474$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_YACCFLAGS := $(LOCAL_YACCFLAGS) 475$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ASFLAGS := $(LOCAL_ASFLAGS) 476$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CFLAGS := $(LOCAL_CFLAGS) 477$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CPPFLAGS := $(LOCAL_CPPFLAGS) 478$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_DEBUG_CFLAGS := $(debug_cflags) 479$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_C_INCLUDES := $(LOCAL_C_INCLUDES) 480$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDFLAGS := $(LOCAL_LDFLAGS) 481$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_LDLIBS := $(LOCAL_LDLIBS) 482 483# this is really the way to get the files onto the command line instead 484# of using $^, because then LOCAL_ADDITIONAL_DEPENDENCIES doesn't work 485$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_SHARED_LIBRARIES := $(built_shared_libraries) 486$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_STATIC_LIBRARIES := $(built_static_libraries) 487$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := $(built_whole_libraries) 488$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ALL_OBJECTS := $(all_objects) 489 490########################################################### 491# Define library dependencies. 492########################################################### 493# all_libraries is used for the dependencies on LOCAL_BUILT_MODULE. 494all_libraries := \ 495 $(built_shared_libraries) \ 496 $(built_static_libraries) \ 497 $(built_whole_libraries) 498 499# Make LOCAL_INSTALLED_MODULE depend on the installed versions of the 500# libraries so they get installed along with it. We don't need to 501# rebuild it when installing it, though, so this can be an order-only 502# dependency. 503$(LOCAL_INSTALLED_MODULE): | $(installed_shared_libraries) 504 505# Also depend on the notice files for any static libraries that 506# are linked into this module. This will force them to be installed 507# when this module is. 508$(LOCAL_INSTALLED_MODULE): | $(installed_static_library_notice_file_targets) 509