diff options
author | Ying Wang <wangying@google.com> | 2011-09-15 13:50:52 -0700 |
---|---|---|
committer | Ying Wang <wangying@google.com> | 2011-09-15 14:05:49 -0700 |
commit | 704c0c9fcac5f680411666835fc6bd5d052ba8db (patch) | |
tree | e90b03de266a65da2a741408a20cfd3706ba9729 /core | |
parent | 58dcc788b95c38e3c6829d024f3e43f99391a1cf (diff) | |
download | build-704c0c9fcac5f680411666835fc6bd5d052ba8db.zip build-704c0c9fcac5f680411666835fc6bd5d052ba8db.tar.gz build-704c0c9fcac5f680411666835fc6bd5d052ba8db.tar.bz2 |
Use LOCAL_REQUIRED_MODULES to add dependency of installed shared libraries
Bug: 5200343
Before this change the build system assumes that shared libraries will
be installed to $(TARGET_SHARED_LIBRARIES). That's not true if the
module uses custom LOCAL_MODULE_PATH.
With this change we defer the evaluation of the dependency to after all
Android.mks are loaded and all modules have their installed path
determined.
Change-Id: Ib6628ed44154a90e8668d31691fbbac67125be6c
Diffstat (limited to 'core')
-rw-r--r-- | core/binary.mk | 112 |
1 files changed, 56 insertions, 56 deletions
diff --git a/core/binary.mk b/core/binary.mk index 1a5af5f..e488200 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -61,8 +61,64 @@ ifdef LOCAL_NDK_VERSION my_ndk_stl_static_lib := $(my_ndk_source_root)/cxx-stl/gnu-libstdc++/libs/$(TARGET_CPU_ABI)/libstdc++.a endif endif +endif +################################################## +# Compute the dependency of the shared libraries +################################################## +# On the target, we compile with -nostdlib, so we must add in the +# default system shared libraries, unless they have requested not +# to by supplying a LOCAL_SYSTEM_SHARED_LIBRARIES value. One would +# supply that, for example, when building libc itself. +ifdef LOCAL_IS_HOST_MODULE + ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) + LOCAL_SYSTEM_SHARED_LIBRARIES := + endif +else + ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) + LOCAL_SYSTEM_SHARED_LIBRARIES := $(TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES) + endif +endif + +# Logging used to be part of libcutils (target) and libutils (sim); +# hack modules that use those other libs to also include liblog. +# All of this complexity is to make sure that liblog only appears +# once, and appears just before libcutils or libutils on the link +# line. +# TODO: remove this hack and change all modules to use liblog +# when necessary. +define insert-liblog + $(if $(filter liblog,$(1)),$(1), \ + $(if $(filter libcutils,$(1)), \ + $(patsubst libcutils,liblog libcutils,$(1)) \ + , \ + $(patsubst libutils,liblog libutils,$(1)) \ + ) \ + ) +endef +ifneq (,$(filter libcutils libutils,$(LOCAL_SHARED_LIBRARIES))) + LOCAL_SHARED_LIBRARIES := $(call insert-liblog,$(LOCAL_SHARED_LIBRARIES)) +endif +ifneq (,$(filter libcutils libutils,$(LOCAL_STATIC_LIBRARIES))) + LOCAL_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_STATIC_LIBRARIES)) +endif +ifneq (,$(filter libcutils libutils,$(LOCAL_WHOLE_STATIC_LIBRARIES))) + LOCAL_WHOLE_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_WHOLE_STATIC_LIBRARIES)) +endif + +ifdef LOCAL_NDK_VERSION + # Get the list of INSTALLED libraries as module names. + # We can not compute the full path of the LOCAL_SHARED_LIBRARIES for + # they may cusomize their install path with LOCAL_MODULE_PATH + installed_shared_library_module_names := \ + $(LOCAL_SHARED_LIBRARIES) +else + installed_shared_library_module_names := \ + $(LOCAL_SYSTEM_SHARED_LIBRARIES) $(LOCAL_SHARED_LIBRARIES) endif +# The real dependency will be added after all Android.mks are loaded and the install paths +# of the shared libraries are determined. +LOCAL_REQUIRED_MODULES += $(installed_shared_library_module_names) ####################################### include $(BUILD_SYSTEM)/base_rules.mk @@ -446,47 +502,7 @@ include $(BUILD_COPY_HEADERS) ########################################################### # Standard library handling. -# -# On the target, we compile with -nostdlib, so we must add in the -# default system shared libraries, unless they have requested not -# to by supplying a LOCAL_SYSTEM_SHARED_LIBRARIES value. One would -# supply that, for example, when building libc itself. ########################################################### -ifdef LOCAL_IS_HOST_MODULE - ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) - LOCAL_SYSTEM_SHARED_LIBRARIES := - endif -else - ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none) - LOCAL_SYSTEM_SHARED_LIBRARIES := $($(my_prefix)DEFAULT_SYSTEM_SHARED_LIBRARIES) - endif -endif - -# Logging used to be part of libcutils (target) and libutils (sim); -# hack modules that use those other libs to also include liblog. -# All of this complexity is to make sure that liblog only appears -# once, and appears just before libcutils or libutils on the link -# line. -# TODO: remove this hack and change all modules to use liblog -# when necessary. -define insert-liblog - $(if $(filter liblog,$(1)),$(1), \ - $(if $(filter libcutils,$(1)), \ - $(patsubst libcutils,liblog libcutils,$(1)) \ - , \ - $(patsubst libutils,liblog libutils,$(1)) \ - ) \ - ) -endef -ifneq (,$(filter libcutils libutils,$(LOCAL_SHARED_LIBRARIES))) - LOCAL_SHARED_LIBRARIES := $(call insert-liblog,$(LOCAL_SHARED_LIBRARIES)) -endif -ifneq (,$(filter libcutils libutils,$(LOCAL_STATIC_LIBRARIES))) - LOCAL_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_STATIC_LIBRARIES)) -endif -ifneq (,$(filter libcutils libutils,$(LOCAL_WHOLE_STATIC_LIBRARIES))) - LOCAL_WHOLE_STATIC_LIBRARIES := $(call insert-liblog,$(LOCAL_WHOLE_STATIC_LIBRARIES)) -endif ########################################################### # The list of libraries that this module will link against are in @@ -523,12 +539,6 @@ built_shared_libraries := \ $(addsuffix $(so_suffix), \ $(LOCAL_SHARED_LIBRARIES))) -# Get the list of INSTALLED libraries. Strip off the various -# intermediates directories and point to the common lib dirs. -installed_shared_libraries := \ - $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \ - $(notdir $(built_shared_libraries))) - my_system_shared_libraries_fullpath := \ $(my_ndk_stl_shared_lib_fullpath) \ $(addprefix $(my_ndk_version_root)/usr/lib/, \ @@ -542,10 +552,6 @@ built_shared_libraries := \ $(addprefix $($(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ $(addsuffix $(so_suffix), \ $(LOCAL_SHARED_LIBRARIES))) - -installed_shared_libraries := \ - $(addprefix $($(my_prefix)OUT_SHARED_LIBRARIES)/, \ - $(notdir $(built_shared_libraries))) endif built_static_libraries := \ @@ -606,12 +612,6 @@ all_libraries := \ $(built_static_libraries) \ $(built_whole_libraries) -# Make LOCAL_INSTALLED_MODULE depend on the installed versions of the -# libraries so they get installed along with it. We don't need to -# rebuild it when installing it, though, so this can be an order-only -# dependency. -$(LOCAL_INSTALLED_MODULE): | $(installed_shared_libraries) - # Also depend on the notice files for any static libraries that # are linked into this module. This will force them to be installed # when this module is. |