ad0d7710fe
There are some module definitions in the Makefile, which needs to be built with API imported module. This change replaces existing dependencies from the Makefile, to append suffix on the reference, so it can be linked to API imported modules. Bug: 243736650 Test: 'ALLOW_MISSING_DEPENDENCIES=true m halutil' succeeded. Change-Id: I12baa36e41c0c69228be5f0d08fb4c18eb8a22b1
219 lines
8.1 KiB
Makefile
219 lines
8.1 KiB
Makefile
#
|
|
# Copyright (C) 2019 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
############################################################
|
|
# Internal build rules for native prebuilt modules
|
|
############################################################
|
|
|
|
prebuilt_module_classes := STATIC_LIBRARIES SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS
|
|
ifeq ($(filter $(prebuilt_module_classes),$(LOCAL_MODULE_CLASS)),)
|
|
$(call pretty-error,cc_prebuilt_internal.mk is for $(prebuilt_module_classes) modules only)
|
|
endif
|
|
|
|
my_strip_module := $(firstword \
|
|
$(LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) \
|
|
$(LOCAL_STRIP_MODULE))
|
|
|
|
ifeq (SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS))
|
|
ifeq ($(LOCAL_IS_HOST_MODULE)$(my_strip_module),)
|
|
# Strip but not try to add debuglink
|
|
my_strip_module := no_debuglink
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(filter STATIC_LIBRARIES SHARED_LIBRARIES,$(LOCAL_MODULE_CLASS)),)
|
|
prebuilt_module_is_a_library := true
|
|
else
|
|
prebuilt_module_is_a_library :=
|
|
endif
|
|
|
|
# Don't install static libraries by default.
|
|
ifndef LOCAL_UNINSTALLABLE_MODULE
|
|
ifeq (STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS))
|
|
LOCAL_UNINSTALLABLE_MODULE := true
|
|
endif
|
|
endif
|
|
|
|
my_check_elf_file_shared_lib_files :=
|
|
|
|
ifneq ($(filter true keep_symbols no_debuglink mini-debug-info,$(my_strip_module)),)
|
|
ifdef LOCAL_IS_HOST_MODULE
|
|
$(call pretty-error,Cannot strip/pack host module)
|
|
endif
|
|
ifeq ($(filter SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
|
|
$(call pretty-error,Can strip/pack only shared libraries or executables)
|
|
endif
|
|
ifneq ($(LOCAL_PREBUILT_STRIP_COMMENTS),)
|
|
$(call pretty-error,Cannot strip/pack scripts)
|
|
endif
|
|
# Set the arch-specific variables to set up the strip rules
|
|
LOCAL_STRIP_MODULE_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH) := $(my_strip_module)
|
|
include $(BUILD_SYSTEM)/dynamic_binary.mk
|
|
built_module := $(linked_module)
|
|
|
|
ifneq ($(LOCAL_SDK_VERSION),)
|
|
# binary.mk filters out NDK_KNOWN_LIBS from my_shared_libs, thus those NDK libs are not added
|
|
# to DEPENDENCIES_ON_SHARED_LIBRARIES. Assign $(my_ndk_shared_libraries_fullpath) to
|
|
# my_check_elf_file_shared_lib_files so that check_elf_file.py can see those NDK stub libs.
|
|
my_check_elf_file_shared_lib_files := $(my_ndk_shared_libraries_fullpath)
|
|
endif
|
|
else # my_strip_module not true
|
|
include $(BUILD_SYSTEM)/base_rules.mk
|
|
built_module := $(LOCAL_BUILT_MODULE)
|
|
|
|
ifdef prebuilt_module_is_a_library
|
|
EXPORTS_LIST += $(intermediates)
|
|
EXPORTS.$(intermediates).FLAGS := $(foreach d,$(LOCAL_EXPORT_C_INCLUDE_DIRS),-I $(d))
|
|
EXPORTS.$(intermediates).DEPS := $(LOCAL_EXPORT_C_INCLUDE_DEPS)
|
|
|
|
include $(BUILD_SYSTEM)/allowed_ndk_types.mk
|
|
|
|
ifdef LOCAL_SDK_VERSION
|
|
my_link_type := native:ndk:$(my_ndk_stl_family):$(my_ndk_stl_link_type)
|
|
else ifdef LOCAL_USE_VNDK
|
|
_name := $(patsubst %.vendor,%,$(LOCAL_MODULE))
|
|
_name := $(patsubst %.product,%,$(LOCAL_MODULE))
|
|
ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),)
|
|
ifeq ($(filter $(_name),$(VNDK_PRIVATE_LIBRARIES)),)
|
|
my_link_type := native:vndk
|
|
else
|
|
my_link_type := native:vndk_private
|
|
endif
|
|
else
|
|
ifeq ($(LOCAL_USE_VNDK_PRODUCT),true)
|
|
my_link_type := native:product
|
|
else
|
|
my_link_type := native:vendor
|
|
endif
|
|
endif
|
|
else ifneq ($(filter $(TARGET_RECOVERY_OUT)/%,$(LOCAL_MODULE_PATH)),)
|
|
my_link_type := native:recovery
|
|
else
|
|
my_link_type := native:platform
|
|
endif
|
|
|
|
# TODO: check dependencies of prebuilt files
|
|
my_link_deps :=
|
|
|
|
my_2nd_arch_prefix := $(LOCAL_2ND_ARCH_VAR_PREFIX)
|
|
my_common :=
|
|
include $(BUILD_SYSTEM)/link_type.mk
|
|
endif # prebuilt_module_is_a_library
|
|
|
|
# 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_IS_HOST_MODULE
|
|
ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
|
|
my_system_shared_libraries :=
|
|
else
|
|
my_system_shared_libraries := $(LOCAL_SYSTEM_SHARED_LIBRARIES)
|
|
endif
|
|
else
|
|
ifeq ($(LOCAL_SYSTEM_SHARED_LIBRARIES),none)
|
|
my_system_shared_libraries := libc libm libdl
|
|
else
|
|
my_system_shared_libraries := $(LOCAL_SYSTEM_SHARED_LIBRARIES)
|
|
my_system_shared_libraries := $(patsubst libc,libc libdl,$(my_system_shared_libraries))
|
|
endif
|
|
endif
|
|
|
|
my_shared_libraries := $(strip \
|
|
$(filter-out $(my_system_shared_libraries),$(LOCAL_SHARED_LIBRARIES)) \
|
|
$(my_system_shared_libraries))
|
|
|
|
# Extra shared libraries introduced by LOCAL_CXX_STL (may append some libraries to
|
|
# my_shared_libraries).
|
|
include $(BUILD_SYSTEM)/cxx_stl_setup.mk
|
|
|
|
# When compiling against API imported module, use API import stub libraries.
|
|
apiimport_postfix := .apiimport
|
|
|
|
ifneq ($(LOCAL_USE_VNDK),)
|
|
ifeq ($(LOCAL_USE_VNDK_PRODUCT),true)
|
|
apiimport_postfix := .apiimport.product
|
|
else
|
|
apiimport_postfix := .apiimport.vendor
|
|
endif
|
|
endif
|
|
|
|
ifdef my_shared_libraries
|
|
my_shared_libraries := $(foreach l,$(my_shared_libraries), \
|
|
$(if $(filter $(l), $(API_IMPORTED_SHARED_LIBRARIES)), $(l)$(apiimport_postfix), $(l)))
|
|
endif #my_shared_libraries
|
|
|
|
ifdef my_system_shared_libraries
|
|
my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries), \
|
|
$(if $(filter $(l), $(API_IMPORTED_SHARED_LIBRARIES)), $(l)$(apiimport_postfix), $(l)))
|
|
endif #my_system_shared_libraries
|
|
|
|
ifdef my_shared_libraries
|
|
ifdef LOCAL_USE_VNDK
|
|
ifeq ($(LOCAL_USE_VNDK_PRODUCT),true)
|
|
my_shared_libraries := $(foreach l,$(my_shared_libraries),\
|
|
$(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l)))
|
|
else
|
|
my_shared_libraries := $(foreach l,$(my_shared_libraries),\
|
|
$(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l)))
|
|
endif
|
|
endif
|
|
$(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \
|
|
$(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries))
|
|
endif # my_shared_libraries
|
|
endif # LOCAL_INSTALLED_MODULE
|
|
|
|
# We need to enclose the above export_includes and my_built_shared_libraries in
|
|
# "my_strip_module not true" because otherwise the rules are defined in dynamic_binary.mk.
|
|
endif # my_strip_module not true
|
|
|
|
|
|
# Check prebuilt ELF binaries.
|
|
include $(BUILD_SYSTEM)/check_elf_file.mk
|
|
|
|
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
|
|
|
|
$(built_module) : $(my_prebuilt_src_file)
|
|
$(transform-prebuilt-to-target)
|
|
ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
|
|
$(hide) chmod +x $@
|
|
endif
|
|
|