OSDN Git Service

Merge "The ICU data is no longer compiled directly into the shared library." into...
[android-x86/build.git] / core / binary.mk
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 ######################################
11 my_ndk_version_root :=
12 ifdef 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
31 endif
32
33 #######################################
34 include $(BUILD_SYSTEM)/base_rules.mk
35 #######################################
36
37 ####################################################
38 ## Add FDO flags if FDO is turned on and supported
39 ####################################################
40 ifeq ($(strip $(LOCAL_NO_FDO_SUPPORT)),)
41   LOCAL_CFLAGS += $(TARGET_FDO_CFLAGS)
42   LOCAL_CPPFLAGS += $(TARGET_FDO_CFLAGS)
43   LOCAL_LDFLAGS += $(TARGET_FDO_CFLAGS)
44 endif
45
46 ###########################################################
47 ## Define PRIVATE_ variables from global vars
48 ###########################################################
49 ifdef LOCAL_NDK_VERSION
50 my_target_project_includes :=
51 my_target_c_inclues := $(my_ndk_version_root)/usr/include
52 # TODO: more reliable way to remove platform stuff.
53 my_target_global_cflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CFLAGS))
54 my_target_global_cppflags := $(filter-out -include -I system/%, $(TARGET_GLOBAL_CPPFLAGS))
55 else
56 my_target_project_includes := $(TARGET_PROJECT_INCLUDES)
57 my_target_c_inclues := $(TARGET_C_INCLUDES)
58 my_target_global_cflags := $(TARGET_GLOBAL_CFLAGS)
59 my_target_global_cppflags := $(TARGET_GLOBAL_CPPFLAGS)
60 endif
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
72 ifeq ($(strip $(LOCAL_CC)),)
73   LOCAL_CC := $($(my_prefix)CC)
74 endif
75 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CC := $(LOCAL_CC)
76
77 ifeq ($(strip $(LOCAL_CXX)),)
78   LOCAL_CXX := $($(my_prefix)CXX)
79 endif
80 $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_CXX := $(LOCAL_CXX)
81
82 # TODO: support a mix of standard extensions so that this isn't necessary
83 LOCAL_CPP_EXTENSION := $(strip $(LOCAL_CPP_EXTENSION))
84 ifeq ($(LOCAL_CPP_EXTENSION),)
85   LOCAL_CPP_EXTENSION := .cpp
86 endif
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.
91 ifeq ($(strip $(LOCAL_NO_DEFAULT_COMPILER_FLAGS)),)
92 ifeq ($(strip $(LOCAL_ALLOW_UNDEFINED_SYMBOLS)),)
93   LOCAL_LDFLAGS := $(LOCAL_LDFLAGS) $($(my_prefix)NO_UNDEFINED_LDFLAGS)
94 endif
95 endif
96
97 ###########################################################
98 ## Define arm-vs-thumb-mode flags.
99 ###########################################################
100 LOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE))
101 arm_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),arm)
102 normal_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).
107 arm_objects_cflags := $($(my_prefix)$(arm_objects_mode)_CFLAGS)
108 normal_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 ###########################################################
117 ifdef DEBUG_MODULE_$(strip $(LOCAL_MODULE))
118   debug_cflags := $($(my_prefix)CUSTOM_DEBUG_CFLAGS)
119 else
120   debug_cflags :=
121 endif
122
123 ###########################################################
124 ## Stuff source generated from one-off tools
125 ###########################################################
126 $(LOCAL_GENERATED_SOURCES): PRIVATE_MODULE := $(LOCAL_MODULE)
127
128 ALL_GENERATED_SOURCES += $(LOCAL_GENERATED_SOURCES)
129
130
131 ###########################################################
132 ## YACC: Compile .y files to .cpp and the to .o.
133 ###########################################################
134
135 yacc_sources := $(filter %.y,$(LOCAL_SRC_FILES))
136 yacc_cpps := $(addprefix \
137         $(intermediates)/,$(yacc_sources:.y=$(LOCAL_CPP_EXTENSION)))
138 yacc_headers := $(yacc_cpps:$(LOCAL_CPP_EXTENSION)=.h)
139 yacc_objects := $(yacc_cpps:$(LOCAL_CPP_EXTENSION)=.o)
140
141 ifneq ($(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)
152 endif
153
154 ###########################################################
155 ## LEX: Compile .l files to .cpp and then to .o.
156 ###########################################################
157
158 lex_sources := $(filter %.l,$(LOCAL_SRC_FILES))
159 lex_cpps := $(addprefix \
160         $(intermediates)/,$(lex_sources:.l=$(LOCAL_CPP_EXTENSION)))
161 lex_objects := $(lex_cpps:$(LOCAL_CPP_EXTENSION)=.o)
162
163 ifneq ($(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)
175 endif
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.
183 cpp_arm_sources    := $(patsubst %$(LOCAL_CPP_EXTENSION).arm,%$(LOCAL_CPP_EXTENSION),$(filter %$(LOCAL_CPP_EXTENSION).arm,$(LOCAL_SRC_FILES)))
184 cpp_arm_objects    := $(addprefix $(intermediates)/,$(cpp_arm_sources:$(LOCAL_CPP_EXTENSION)=.o))
185
186 cpp_normal_sources := $(filter %$(LOCAL_CPP_EXTENSION),$(LOCAL_SRC_FILES))
187 cpp_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
194 cpp_objects        := $(cpp_arm_objects) $(cpp_normal_objects)
195
196 ifneq ($(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)
202 endif
203
204 ###########################################################
205 ## C++: Compile generated .cpp files to .o.
206 ###########################################################
207
208 gen_cpp_sources := $(filter %$(LOCAL_CPP_EXTENSION),$(LOCAL_GENERATED_SOURCES))
209 gen_cpp_objects := $(gen_cpp_sources:%$(LOCAL_CPP_EXTENSION)=%.o)
210
211 ifneq ($(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)
219 endif
220
221 ###########################################################
222 ## S: Compile generated .S and .s files to .o.
223 ###########################################################
224
225 gen_S_sources := $(filter %.S,$(LOCAL_GENERATED_SOURCES))
226 gen_S_objects := $(gen_S_sources:%.S=%.o)
227
228 ifneq ($(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)
232 endif
233
234 gen_s_sources := $(filter %.s,$(LOCAL_GENERATED_SOURCES))
235 gen_s_objects := $(gen_s_sources:%.s=%.o)
236
237 ifneq ($(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)
241 endif
242
243 gen_asm_objects := $(gen_S_objects) $(gen_s_objects)
244
245 ###########################################################
246 ## C: Compile .c files to .o.
247 ###########################################################
248
249 c_arm_sources    := $(patsubst %.c.arm,%.c,$(filter %.c.arm,$(LOCAL_SRC_FILES)))
250 c_arm_objects    := $(addprefix $(intermediates)/,$(c_arm_sources:.c=.o))
251
252 c_normal_sources := $(filter %.c,$(LOCAL_SRC_FILES))
253 c_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
260 c_objects        := $(c_arm_objects) $(c_normal_objects)
261
262 ifneq ($(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)
266 endif
267
268 ###########################################################
269 ## C: Compile generated .c files to .o.
270 ###########################################################
271
272 gen_c_sources := $(filter %.c,$(LOCAL_GENERATED_SOURCES))
273 gen_c_objects := $(gen_c_sources:%.c=%.o)
274
275 ifneq ($(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)
283 endif
284
285 ###########################################################
286 ## ObjC: Compile .m files to .o
287 ###########################################################
288
289 objc_sources := $(filter %.m,$(LOCAL_SRC_FILES))
290 objc_objects := $(addprefix $(intermediates)/,$(objc_sources:.m=.o))
291
292 ifneq ($(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)
296 endif
297
298 ###########################################################
299 ## AS: Compile .S files to .o.
300 ###########################################################
301
302 asm_sources_S := $(filter %.S,$(LOCAL_SRC_FILES))
303 asm_objects_S := $(addprefix $(intermediates)/,$(asm_sources_S:.S=.o))
304
305 ifneq ($(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)
309 endif
310
311 asm_sources_s := $(filter %.s,$(LOCAL_SRC_FILES))
312 asm_objects_s := $(addprefix $(intermediates)/,$(asm_sources_s:.s=.o))
313
314 ifneq ($(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)
318 endif
319
320 asm_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
329 all_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
340 LOCAL_C_INCLUDES += $(TOPDIR)$(LOCAL_PATH) $(intermediates) $(base_intermediates)
341
342 $(all_objects) : | $(LOCAL_GENERATED_SOURCES)
343 ALL_C_CPP_ETC_OBJECTS += $(all_objects)
344
345 ###########################################################
346 ## Copy headers to the install tree
347 ###########################################################
348 include $(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 ###########################################################
358 ifdef LOCAL_IS_HOST_MODULE
359   ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
360     LOCAL_SYSTEM_SHARED_LIBRARIES :=
361   endif
362 else
363   ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
364     LOCAL_SYSTEM_SHARED_LIBRARIES := $($(my_prefix)DEFAULT_SYSTEM_SHARED_LIBRARIES)
365   endif
366 endif
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.
375 define 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    )
383 endef
384 ifneq (,$(filter libcutils libutils,$(LOCAL_SHARED_LIBRARIES)))
385   LOCAL_SHARED_LIBRARIES := $(call insert-liblog,$(LOCAL_SHARED_LIBRARIES))
386 endif
387 ifneq (,$(filter libcutils libutils,$(LOCAL_STATIC_LIBRARIES)))
388   LOCAL_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_STATIC_LIBRARIES))
389 endif
390 ifneq (,$(filter libcutils libutils,$(LOCAL_WHOLE_STATIC_LIBRARIES)))
391   LOCAL_WHOLE_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_WHOLE_STATIC_LIBRARIES))
392 endif
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.
420 so_suffix := $($(my_prefix)SHLIB_SUFFIX)
421 a_suffix := $($(my_prefix)STATIC_LIB_SUFFIX)
422
423 ifdef LOCAL_NDK_VERSION
424 built_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.
431 installed_shared_libraries := \
432     $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \
433       $(notdir $(built_shared_libraries)))
434
435 my_system_shared_libraries_fullpath := $(addprefix $(my_ndk_version_root)/usr/lib/, \
436     $(addsuffix $(so_suffix), $(LOCAL_SYSTEM_SHARED_LIBRARIES)))
437
438 built_shared_libraries += $(my_system_shared_libraries_fullpath)
439 LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
440 else
441 LOCAL_SHARED_LIBRARIES += $(LOCAL_SYSTEM_SHARED_LIBRARIES)
442 built_shared_libraries := \
443     $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \
444       $(addsuffix $(so_suffix), \
445         $(LOCAL_SHARED_LIBRARIES)))
446
447 installed_shared_libraries := \
448     $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \
449       $(notdir $(built_shared_libraries)))
450 endif
451
452 built_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
457 built_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
467 installed_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.
494 all_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)