454265c233
LOCAL_USE_VNDK property refers if the module uses VNDK, and this property is being used to check if the module is installed in vendor or product. However, the term no longer makes sense with VNDK deprecation, so it should be renamed. Similar to change in aosp/2897612, rename LOCAL_USE_VNDK as LOCAL_IN_VENDOR or LOCAL_IN_PRODUCT. Bug: 316829758 Test: AOSP CF build succeeded Change-Id: I2da2e2027ccabbcfbb444abc6828addeb3b22e13
216 lines
8 KiB
Makefile
216 lines
8 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
|
|
# 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 ifeq ($(call module-in-vendor-or-product),true)
|
|
_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_IN_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
|
|
|
|
ifeq ($(call module-in-vendor-or-product),true)
|
|
ifeq ($(LOCAL_IN_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
|
|
ifeq ($(call module-in-vendor-or-product),true)
|
|
ifeq ($(LOCAL_IN_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
|
|
|