From 1bb943b97c0d1a35032369b39fc007e3b11be4fa Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 6 Sep 2018 16:25:22 -0700 Subject: [PATCH] Add soong_cc_prebuilt.mk Add soong_cc_prebuilt.mk for Soong modules to use so they can avoid going through all of prebuilt_internal.mk, dynamic_binary.mk and binary.mk. Also moves stripping support into Soong. Bug: 113936524 Test: m checkbuild Change-Id: I8b37dda2b449b6b5d48d5b983f43de452f494a1e --- core/base_rules.mk | 5 + core/binary.mk | 81 +++++-------- core/clear_vars.mk | 11 +- core/header_library_internal.mk | 10 -- core/prebuilt_internal.mk | 26 +--- core/soong_cc_prebuilt.mk | 207 ++++++++++++++++++++++++++++++++ 6 files changed, 251 insertions(+), 89 deletions(-) create mode 100644 core/soong_cc_prebuilt.mk diff --git a/core/base_rules.mk b/core/base_rules.mk index fce7a1f8e..58d838d23 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -328,7 +328,11 @@ LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE) # As .KATI_RESTAT is specified to .toc files and commit-change-for-toc is used, # dependent binaries of a .toc file will be rebuilt only when the content of # the .toc file is changed. +# +# Don't create .toc files for Soong shared libraries, that is handled in +# Soong and soong_cc_prebuilt.mk ########################################################### +ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE).toc $(LOCAL_BUILT_MODULE).toc: $(LOCAL_BUILT_MODULE) @@ -345,6 +349,7 @@ $(eval $(call copy-one-file,$(LOCAL_BUILT_MODULE).toc,$(OVERRIDE_BUILT_MODULE_PA $(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem).toc: $(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem) endif endif +endif ########################################################### ## logtags: Add .logtags files to global list diff --git a/core/binary.mk b/core/binary.mk index 2ccdb4131..440c32df1 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -372,10 +372,7 @@ my_static_libraries := $(LOCAL_STATIC_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_V my_whole_static_libraries := $(LOCAL_WHOLE_STATIC_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_WHOLE_STATIC_LIBRARIES_$(my_32_64_bit_suffix)) $(my_whole_static_libraries) my_header_libraries := $(LOCAL_HEADER_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_HEADER_LIBRARIES_$(my_32_64_bit_suffix)) $(my_header_libraries) -# soong defined modules already have done through this -ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) include $(BUILD_SYSTEM)/cxx_stl_setup.mk -endif # Add static HAL libraries ifdef LOCAL_HAL_STATIC_LIBRARIES @@ -392,8 +389,6 @@ else my_linker := $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)LINKER) endif -# Modules from soong do not need this since the dependencies are already handled there. -ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) include $(BUILD_SYSTEM)/config_sanitizers.mk ifneq ($(LOCAL_NO_LIBCOMPILER_RT),true) @@ -407,7 +402,6 @@ endif ifeq ($($(my_prefix)OS),windows) my_static_libraries += libwinpthread endif -endif # this module is not from soong ifneq ($(filter ../%,$(my_src_files)),) my_soong_problems += dotdot_srcs @@ -1270,29 +1264,23 @@ ifneq ($(LOCAL_USE_VNDK),) ## switch all soong libraries over to the /vendor ## variant. #################################################### - ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - # We don't do this renaming for soong-defined modules since they already have correct - # names (with .vendor suffix when necessary) in their LOCAL_*_LIBRARIES. - my_whole_static_libraries := $(foreach l,$(my_whole_static_libraries),\ - $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_static_libraries := $(foreach l,$(my_static_libraries),\ - $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_shared_libraries := $(foreach l,$(my_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_header_libraries := $(foreach l,$(my_header_libraries),\ - $(if $(SPLIT_VENDOR.HEADER_LIBRARIES.$(l)),$(l).vendor,$(l))) - endif + my_whole_static_libraries := $(foreach l,$(my_whole_static_libraries),\ + $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_static_libraries := $(foreach l,$(my_static_libraries),\ + $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_header_libraries := $(foreach l,$(my_header_libraries),\ + $(if $(SPLIT_VENDOR.HEADER_LIBRARIES.$(l)),$(l).vendor,$(l))) endif # Platform can use vendor public libraries. If a required shared lib is one of # the vendor public libraries, the lib is switched to the stub version of the lib. ifeq ($(LOCAL_USE_VNDK),) - ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - my_shared_libraries := $(foreach l,$(my_shared_libraries),\ - $(if $(filter $(l),$(VENDOR_PUBLIC_LIBRARIES)),$(l).vendorpublic,$(l))) - endif + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(filter $(l),$(VENDOR_PUBLIC_LIBRARIES)),$(l).vendorpublic,$(l))) endif ########################################################## @@ -1613,26 +1601,23 @@ ifeq ($(my_strict),true) endif # Check if -Werror or -Wno-error is used in C compiler flags. -# Modules defined in $(SOONG_ANDROID_MK) are checked in soong's cc.go. -ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - # Header libraries do not need cflags. - ifneq (HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)) - # Prebuilt modules do not need cflags. - ifeq (,$(LOCAL_PREBUILT_MODULE_FILE)) - my_all_cflags := $(my_cflags) $(my_cppflags) $(my_cflags_no_override) - # Issue warning if -Wno-error is used. - ifneq (,$(filter -Wno-error,$(my_all_cflags))) - $(eval MODULES_USING_WNO_ERROR := $(MODULES_USING_WNO_ERROR) $(LOCAL_MODULE_MAKEFILE):$(LOCAL_MODULE)) - else - # Issue warning if -Werror is not used. Add it. - ifeq (,$(filter -Werror,$(my_all_cflags))) - # Add -Wall -Werror unless the project is in the WARNING_ALLOWED project list. - ifeq (,$(strip $(call find_warning_allowed_projects,$(LOCAL_PATH)))) - my_cflags := -Wall -Werror $(my_cflags) - else - $(eval MODULES_ADDED_WALL := $(MODULES_ADDED_WALL) $(LOCAL_MODULE_MAKEFILE):$(LOCAL_MODULE)) - my_cflags := -Wall $(my_cflags) - endif +# Header libraries do not need cflags. +ifneq (HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)) + # Prebuilt modules do not need cflags. + ifeq (,$(LOCAL_PREBUILT_MODULE_FILE)) + my_all_cflags := $(my_cflags) $(my_cppflags) $(my_cflags_no_override) + # Issue warning if -Wno-error is used. + ifneq (,$(filter -Wno-error,$(my_all_cflags))) + $(eval MODULES_USING_WNO_ERROR := $(MODULES_USING_WNO_ERROR) $(LOCAL_MODULE_MAKEFILE):$(LOCAL_MODULE)) + else + # Issue warning if -Werror is not used. Add it. + ifeq (,$(filter -Werror,$(my_all_cflags))) + # Add -Wall -Werror unless the project is in the WARNING_ALLOWED project list. + ifeq (,$(strip $(call find_warning_allowed_projects,$(LOCAL_PATH)))) + my_cflags := -Wall -Werror $(my_cflags) + else + $(eval MODULES_ADDED_WALL := $(MODULES_ADDED_WALL) $(LOCAL_MODULE_MAKEFILE):$(LOCAL_MODULE)) + my_cflags := -Wall $(my_cflags) endif endif endif @@ -1764,12 +1749,6 @@ all_libraries := \ ########################################################### export_includes := $(intermediates)/export_includes export_cflags := $(foreach d,$(my_export_c_include_dirs),-I $(d)) -# Soong exports cflags instead of include dirs, so that -isystem can be included. -ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) -export_cflags += $(LOCAL_EXPORT_CFLAGS) -else ifdef LOCAL_EXPORT_CFLAGS -$(call pretty-error,LOCAL_EXPORT_CFLAGS can only be used by Soong, use LOCAL_EXPORT_C_INCLUDE_DIRS instead) -endif $(export_includes): PRIVATE_EXPORT_CFLAGS := $(export_cflags) # Headers exported by whole static libraries are also exported by this library. export_include_deps := $(strip \ @@ -1814,7 +1793,6 @@ export_cflags := # Make sure export_includes gets generated when you are running mm/mmm $(LOCAL_BUILT_MODULE) : | $(export_includes) -ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) ifneq (,$(filter-out $(LOCAL_PATH)/%,$(my_export_c_include_dirs))) my_soong_problems += non_local__export_c_include_dirs endif @@ -1830,7 +1808,6 @@ SOONG_CONV.$(LOCAL_MODULE).DEPS := \ $(my_system_shared_libraries)) SOONG_CONV.$(LOCAL_MODULE).TYPE := native SOONG_CONV := $(SOONG_CONV) $(LOCAL_MODULE) -endif ########################################################### # Coverage packaging. diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 07c7e51f7..f738ab409 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -3,6 +3,7 @@ ########################################################### # '',true +LOCAL_2ND_ARCH_VAR_PREFIX:= LOCAL_32_BIT_ONLY:= LOCAL_AAPT2_ONLY:= LOCAL_AAPT_FLAGS:= @@ -66,13 +67,16 @@ LOCAL_DONT_DELETE_JAR_META_INF:= LOCAL_DONT_MERGE_MANIFESTS:= LOCAL_DPI_FILE_STEM:= LOCAL_DPI_VARIANTS:= +LOCAL_DROIDDOC_ANNOTATIONS_ZIP := LOCAL_DROIDDOC_ASSET_DIR:= LOCAL_DROIDDOC_CUSTOM_ASSET_DIR:= LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:= +LOCAL_DROIDDOC_DOC_ZIP := LOCAL_DROIDDOC_HTML_DIR:= LOCAL_DROIDDOC_OPTIONS:= LOCAL_DROIDDOC_SOURCE_PATH:= LOCAL_DROIDDOC_STUB_OUT_DIR:= +LOCAL_DROIDDOC_STUBS_SRCJAR := LOCAL_DROIDDOC_TEMPLATE_DIR:= LOCAL_DROIDDOC_USE_STANDARD_DOCLET:= LOCAL_DX_FLAGS:= @@ -107,6 +111,7 @@ LOCAL_GROUP_STATIC_LIBRARIES:= LOCAL_GTEST:=true LOCAL_HAL_STATIC_LIBRARIES:= LOCAL_HEADER_LIBRARIES:= +LOCAL_HOST_PREFIX:= LOCAL_HOST_REQUIRED_MODULES:= LOCAL_INIT_RC:= LOCAL_INSTALLED_MODULE:= @@ -252,13 +257,13 @@ LOCAL_SOONG_DEX_JAR := LOCAL_SOONG_EXPORT_PROGUARD_FLAGS := LOCAL_SOONG_HEADER_JAR := LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR := +LOCAL_SOONG_LINK_TYPE := LOCAL_SOONG_PROGUARD_DICT := LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE := LOCAL_SOONG_RRO_DIRS := LOCAL_SOONG_STATIC_LIBRARY_EXTRA_PACKAGES := -LOCAL_DROIDDOC_STUBS_SRCJAR := -LOCAL_DROIDDOC_DOC_ZIP := -LOCAL_DROIDDOC_ANNOTATIONS_ZIP := +LOCAL_SOONG_TOC := +LOCAL_SOONG_UNSTRIPPED_BINARY := # '',true LOCAL_SOURCE_FILES_ALL_GENERATED:= LOCAL_SRC_FILES:= diff --git a/core/header_library_internal.mk b/core/header_library_internal.mk index 3e4958fb4..35ee1bc03 100644 --- a/core/header_library_internal.mk +++ b/core/header_library_internal.mk @@ -11,16 +11,6 @@ ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)),) $(error $(LOCAL_PATH): Cannot set module stem for a library) endif -ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - ifdef LOCAL_USE_VNDK - name_without_suffix := $(patsubst %.vendor,%,$(LOCAL_MODULE)) - ifneq ($(name_without_suffix),$(LOCAL_MODULE)) - SPLIT_VENDOR.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 - endif - name_without_suffix := - endif -endif - include $(BUILD_SYSTEM)/binary.mk ifneq ($(strip $(all_objects)),) diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index 78da421bd..256c59846 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -68,20 +68,6 @@ else prebuilt_module_is_a_library := endif -ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - ifeq ($(prebuilt_module_is_a_library),true) - SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) - endif - - ifdef LOCAL_USE_VNDK - name_without_suffix := $(patsubst %.vendor,%,$(LOCAL_MODULE)) - ifneq ($(name_without_suffix),$(LOCAL_MODULE) - SPLIT_VENDOR.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 - endif - name_without_suffix := - endif -endif - # Don't install static libraries by default. ifndef LOCAL_UNINSTALLABLE_MODULE ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)) @@ -156,12 +142,6 @@ else # my_strip_module not true ifdef prebuilt_module_is_a_library export_includes := $(intermediates)/export_includes export_cflags := $(foreach d,$(LOCAL_EXPORT_C_INCLUDE_DIRS),-I $(d)) -# Soong exports cflags instead of include dirs, so that -isystem can be included. -ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) -export_cflags += $(LOCAL_EXPORT_CFLAGS) -else ifdef LOCAL_EXPORT_CFLAGS -$(call pretty-error,LOCAL_EXPORT_CFLAGS can only be used by Soong, use LOCAL_EXPORT_C_INCLUDE_DIRS instead) -endif $(export_includes): PRIVATE_EXPORT_CFLAGS := $(export_cflags) $(export_includes): $(LOCAL_EXPORT_C_INCLUDE_DEPS) @echo Export includes file: $< -- $@ @@ -210,10 +190,8 @@ my_shared_libraries := $(LOCAL_SHARED_LIBRARIES) # Extra shared libraries introduced by LOCAL_CXX_STL. include $(BUILD_SYSTEM)/cxx_stl_setup.mk ifdef LOCAL_USE_VNDK - ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) - my_shared_libraries := $(foreach l,$(my_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) - endif + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) endif $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \ $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries)) diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk new file mode 100644 index 000000000..3e0048fe8 --- /dev/null +++ b/core/soong_cc_prebuilt.mk @@ -0,0 +1,207 @@ +# Native prebuilt coming from Soong. +# Extra inputs: +# LOCAL_SOONG_LINK_TYPE +# LOCAL_SOONG_TOC +# LOCAL_SOONG_UNSTRIPPED_BINARY + +ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) + $(call pretty-error,soong_cc_prebuilt.mk may only be used from Soong) +endif + +skip_module := +ifdef LOCAL_IS_HOST_MODULE + ifneq ($(HOST_OS),$(LOCAL_MODULE_HOST_OS)) + my_prefix := HOST_CROSS_ + LOCAL_HOST_PREFIX := $(my_prefix) + else + my_prefix := HOST_ + LOCAL_HOST_PREFIX := + endif +else + my_prefix := TARGET_ +endif + +ifeq ($($(my_prefix)ARCH),$(LOCAL_MODULE_$(my_prefix)ARCH)) + # primary arch + LOCAL_2ND_ARCH_VAR_PREFIX := +else ifeq ($($(my_prefix)2ND_ARCH),$(LOCAL_MODULE_$(my_prefix)ARCH)) + # secondary arch + LOCAL_2ND_ARCH_VAR_PREFIX := $($(my_prefix)2ND_ARCH_VAR_PREFIX) +else + $(call pretty-error,Unsupported LOCAL_MODULE_$(my_prefix)ARCH=$(LOCAL_MODULE_$(my_prefix)ARCH)) +endif + +ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true) + ifndef LOCAL_IS_HOST_MODULE + ifdef LOCAL_2ND_ARCH_VAR_PREFIX + # Only support shared and static libraries and tests for translated arch + ifeq ($(filter SHARED_LIBRARIES STATIC_LIBRARIES HEADER_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + skip_module := true + endif + endif + endif +endif + +ifndef skip_module + +# Don't install static libraries by default. +ifndef LOCAL_UNINSTALLABLE_MODULE + ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)) + LOCAL_UNINSTALLABLE_MODULE := true + endif +endif + +ifeq (SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)) + # LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES indicates that this prebuilt should be + # installed to the common directory of libraries. This is needed for the NDK + # shared libraries built by soong, as we build many different versions of each + # library (one for each API level). Since they all have the same basename, + # they'd clobber each other (as well as any platform libraries by the same + # name). + ifneq ($(LOCAL_COPY_TO_INTERMEDIATE_LIBRARIES),false) + # Put the built targets of all shared libraries in a common directory + # to simplify the link line. + OVERRIDE_BUILT_MODULE_PATH := \ + $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES) + endif +endif + +####################################### +include $(BUILD_SYSTEM)/base_rules.mk +####################################### + +ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES HEADER_LIBRARIES,$(LOCAL_MODULE_CLASS)),) + # Soong module is a static or shared library + export_includes := $(intermediates)/export_includes + $(export_includes): PRIVATE_EXPORT_CFLAGS := $(LOCAL_EXPORT_CFLAGS) + $(export_includes): $(LOCAL_EXPORT_C_INCLUDE_DEPS) + @echo Export includes file: $< -- $@ + $(hide) mkdir -p $(dir $@) && rm -f $@ + ifdef LOCAL_EXPORT_CFLAGS + $(hide) echo "$(PRIVATE_EXPORT_CFLAGS)" >$@ + else + $(hide) touch $@ + endif + + ifdef LOCAL_SOONG_TOC + $(eval $(call copy-one-file,$(LOCAL_SOONG_TOC),$(LOCAL_BUILT_MODULE).toc)) + $(call add-dependency,$(LOCAL_BUILT_MODULE).toc,$(LOCAL_BUILT_MODULE)) + $(my_all_targets): $(LOCAL_BUILT_MODULE).toc + + ifdef OVERRIDE_BUILT_MODULE_PATH + $(eval $(call copy-one-file,$(LOCAL_BUILT_MODULE).toc,$(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem).toc)) + $(call add-dependency,$(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem).toc,$(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem)) + $(my_all_targets): $(OVERRIDE_BUILT_MODULE_PATH)/$(my_built_module_stem).toc + endif + endif + + SOONG_ALREADY_CONV := $(SOONG_ALREADY_CONV) $(LOCAL_MODULE) + + my_link_type := $(LOCAL_SOONG_LINK_TYPE) + my_warn_types := + my_allowed_types := + my_link_deps := + my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX) + my_common := + include $(BUILD_SYSTEM)/link_type.mk +endif + +ifdef LOCAL_USE_VNDK + name_without_suffix := $(patsubst %.vendor,%,$(LOCAL_MODULE)) + ifneq ($(name_without_suffix),$(LOCAL_MODULE) + SPLIT_VENDOR.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 + endif + name_without_suffix := +endif + +# The real dependency will be added after all Android.mks are loaded and the install paths +# of the shared libraries are determined. +ifdef LOCAL_INSTALLED_MODULE + ifdef LOCAL_SHARED_LIBRARIES + my_shared_libraries := $(LOCAL_SHARED_LIBRARIES) + ifdef LOCAL_USE_VNDK + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + endif + $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \ + $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries)) + + # We also need the LOCAL_BUILT_MODULE dependency, + # since we use -rpath-link which points to the built module's path. + my_built_shared_libraries := \ + $(addprefix $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ + $(addsuffix $($(my_prefix)SHLIB_SUFFIX), \ + $(my_shared_libraries))) + $(LOCAL_BUILT_MODULE) : $(my_built_shared_libraries) + endif +endif + +$(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) + $(transform-prebuilt-to-target) +ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + $(hide) chmod +x $@ +endif + +ifdef LOCAL_SOONG_UNSTRIPPED_BINARY + # Store a copy with symbols for symbolic debugging + my_unstripped_path := $(TARGET_OUT_UNSTRIPPED)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path)) + symbolic_output := $(my_unstripped_path)/$(my_installed_module_stem) + $(eval $(call copy-one-file,$(LOCAL_SOONG_UNSTRIPPED_BINARY),$(symbolic_output))) + $(call add-dependency,$(LOCAL_BUILT_MODULE),$(symbolic_output)) + + ifeq ($(BREAKPAD_GENERATE_SYMBOLS),true) + my_breakpad_path := $(TARGET_OUT_BREAKPAD)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path)) + breakpad_output := $(my_breakpad_path)/$(my_installed_module_stem).sym + $(breakpad_output) : $(LOCAL_SOONG_UNSTRIPPED_BINARY) | $(BREAKPAD_DUMP_SYMS) $(PRIVATE_READELF) + @echo "target breakpad: $(PRIVATE_MODULE) ($@)" + @mkdir -p $(dir $@) + $(hide) if $(PRIVATE_READELF) -S $< > /dev/null 2>&1 ; then \ + $(BREAKPAD_DUMP_SYMS) -c $< > $@ ; \ + else \ + echo "skipped for non-elf file."; \ + touch $@; \ + fi + $(call add-dependency,$(LOCAL_BUILT_MODULE),$(breakpad_output)) +endif +endif + +ifeq ($(NATIVE_COVERAGE),true) + ifneq (,$(strip $(LOCAL_PREBUILT_COVERAGE_ARCHIVE))) + $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(intermediates)/$(LOCAL_MODULE).gcnodir)) + ifneq ($(LOCAL_UNINSTALLABLE_MODULE),true) + ifdef LOCAL_IS_HOST_MODULE + my_coverage_path := $($(my_prefix)OUT_COVERAGE)/$(patsubst $($(my_prefix)OUT)/%,%,$(my_module_path)) + else + my_coverage_path := $(TARGET_OUT_COVERAGE)/$(patsubst $(PRODUCT_OUT)/%,%,$(my_module_path)) + endif + my_coverage_path := $(my_coverage_path)/$(patsubst %.so,%,$(my_installed_module_stem)).gcnodir + $(eval $(call copy-one-file,$(LOCAL_PREBUILT_COVERAGE_ARCHIVE),$(my_coverage_path))) + $(LOCAL_BUILT_MODULE): $(my_coverage_path) + endif + else + # Coverage information is needed when static lib is a dependency of another + # coverage-enabled module. + ifeq (STATIC_LIBRARIES, $(LOCAL_MODULE_CLASS)) + GCNO_ARCHIVE := $(LOCAL_MODULE).gcnodir + $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_OBJECTS := + $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_ALL_WHOLE_STATIC_LIBRARIES := + $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_PREFIX := $(my_prefix) + $(intermediates)/$(GCNO_ARCHIVE) : PRIVATE_2ND_ARCH_VAR_PREFIX := $(LOCAL_2ND_ARCH_VAR_PREFIX) + $(intermediates)/$(GCNO_ARCHIVE) : + $(transform-o-to-static-lib) + endif + endif +endif + +# A product may be configured to strip everything in some build variants. +# We do the stripping as a post-install command so that LOCAL_BUILT_MODULE +# is still with the symbols and we don't need to clean it (and relink) when +# you switch build variant. +ifneq ($(filter $(STRIP_EVERYTHING_BUILD_VARIANTS),$(TARGET_BUILD_VARIANT)),) +$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := \ + $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_STRIP) --strip-all $(LOCAL_INSTALLED_MODULE) +endif + +endif # !skip_module + +skip_module :=